Pull Request on 2026年10月06日

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

注意点

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


目次

  1. #135281 [release/11.0] Backport Tensor correctness and shape consistency fixes
  2. #135272 Avoid allocation when parsing whitespace-free UTF-8 X-format Guids
  3. #135271 Fix JsonSchemaExporter handling of extension data with global Disallow
  4. #135260 Fix GPT-6.1 Responses routing in CI scanner workflows
  5. #135248 Enable Roslyn compiler caching on Windows
  6. #135244 Implement HasSameMetadataDefinitionAs in System.Reflection.Context
  7. #135241 Return inherited accessors from InheritedPropertyInfo.GetAccessors
  8. #135238 JsonNamingPolicyAttribute: Add missing PascalCase
  9. #135236 Reject null characters in process arguments
  10. #135230 [release/10.0] Fix negative tmp-buffer size in vxsort align_vectorized
  11. #135229 [release/11.0] Fix negative tmp-buffer size in vxsort align_vectorized
  12. #135226 Fix Unix BER decoding on Linux & macOS
  13. #135224 [wasi] Remove quarantines for wasihost runtimeconfig properties
  14. #135220 Fix ZIP AES encryption method detection
  15. #135210 Delete typeof caching
  16. #135208 Avoid checked-build assertion for open Nullable assignability
  17. #135202 [aw] Restore CI scanner repository lookup dependency
  18. #135160 Enable class-level parallelism in Process tests
  19. #135144 Unify Thread.CurrentOSThreadId between CoreCLR and NativeAOT
  20. #135138 Unify Thread.SpinWait/Yield/OptimalMaxSpinWaitsPerSpinIteration between CoreCLR and NativeAOT
  21. #135136 Support /OPTIMIZE and raw method-body emission in managed ilasm
  22. #135132 Fix hexadecimal float sign round-tripping
  23. #135120 Expose HashLog2 and ChainLog2 on ZstandardCompressionOptions
  24. #135088 Arm64:[PAC-RET]Fix ARM64 epilog detection and PAC signing SP recovery
  25. #134958 [wasi] Implement MksTemps/MkdTemp so GetTempFileName and CreateTempSubdirectory work
  26. #134921 Fix SslStream handling of empty TLS handshake records
  27. #134729 Fix SAFEARRAY VARIANT copy-back and typed class array marshalling
  28. #134710 [release/10.0] JIT: handle redefined enumerators in conditional escape analysis
  29. #134602 [PERF] Retire default Mono performance runs and builds on main
  30. #134025 Add parameter reflection regression tests
  31. #133819 Implement IsByRefLike on the remaining Reflection.Emit Type subclasses
  32. #132861 Pass TPA through host-runtime contract instead of property string
  33. #132591 Stop generating static restore binlogs

#135281 [release/11.0] Backport Tensor correctness and shape consistency fixes

概要

.NET 11.0向けに、System.Numerics.Tensorsライブラリの重要な正確性と形状一貫性の修正をバックポートしています。配列要素型の検証、テンソルスライスのピニング、形状/ストレージの検証、ブロードキャスト、重複処理、リサイズのゼロフィル、数値演算の問題を修正し、同時に形状アライメントの一貫性を確保し、ネイティブ幅のカウント処理を保持します。

変更内容

  • TensorShape.cs: 形状整列の一貫性と空テンソルの処理ロジックを改善(341行追加)
  • TensorOperation.cs: ブロードキャスト、重複検出、スライスピニング関連の検証ロジックを強化(700行追加)
  • Tensor.cs: 配列要素型検証、形状/ストレージ検証を厳格化、数値演算の正確性向上(751行追加)
  • TensorPrimitives.Tan.cs: FMAなしの環境でのスカラー評価による精度向上(110行追加)
  • 読み取り専用テンソンインターフェース: ReadOnlyTensorSpan_1等で列挙と内部Anyスパンカーネルの修正
  • テスト追加: 2,328行のテストケース追加により、互換性のない配列、ピニング、空形状、ネイティブ幅カウント等をカバー
  • リソース追加: 新しいエラーメッセージを9行追加

パフォーマンスへの影響

改善:

  • Dense float Add (64x16): 16.37 µs → 0.114 µs(約143倍高速化)
  • Gapped-row float FlattenTo: 7.92 µs → 0.875 µs(約9倍高速化)
  • Gapped-row float Add: 16.25 µs → 2.05 µs(約8倍高速化)
  • Float Tan (FMA環境): 小幅改善(1.80 µs → 1.72 µs)

トレードオフ:

  • FMAなし・広範囲Tan: 5.60 µs → 9.19 µs(約64%低下)。これは精度向上のための意図的トレードオフで、キャンセレーション感応性を持つタンジェント計算でスカラー評価を使用するため

全環境(256/128ビットベクトル、AVX2/FMA無効、全intrinsic無効)で回帰テスト6,266件(net11.0)・200件(net481)すべてパス。管理されたメモリ割り当てなし。

関連Issue

#133459、#134691、#128555、#121463

メインPR: #134914、#135060

その他

互換性への影響(破壊的変更あり):

  • 互換性のない配列要素型(例:Array<int>をTensor<float>として解釈)を拒否。以前は無効なメモリアクセ

#135272 Avoid allocation when parsing whitespace-free UTF-8 X-format Guids

  • 作成者: @EgorBo
  • 作成日時: 2026年10月06日 12:24:33(UTC)
  • マージ日時: 2026年10月06日 16:16:39(UTC)
  • ラベル: area-System.Runtime

概要

UTF-8 X-format Guid解析における逆転したホワイトスペースチェックを修正しました。初期スキャンがホワイトスペースなしの入力に対して不要な一時バイト配列の割り当てとコピーを行っていた問題を解決し、元のスパンを返すパスを有効にします。標準的なX-format入力では割り当てが96バイトからゼロに削減されます。

// 標準的なX-format Guid解析
Guid.Parse("{0x00112233,0x4455,0x6677,{0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff}}"u8);

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Guid.cs: ホワイトスペース検出の逆転した条件を修正(+1/-1)

パフォーマンスへの影響

大幅な改善あり

ホワイトスペースなしのUTF-8 X-format Guid解析において:

  • 実行時間: 157.9 ns → 116.2 ns(約26%高速化)
  • メモリ割り当て: 96 B → 0 B(100%削減)
  • Gen0ガベージコレクション: 0.0114 → 0(割り当てなし)

関連Issue

#135272

その他

既存テストにより、ホワイトスペース有無両方のUTF-8 X-format入力がカバーされています。


#135271 Fix JsonSchemaExporter handling of extension data with global Disallow

概要

JsonSchemaExporterがグローバルUnmappedMemberHandling = Disallow設定下で[JsonExtensionData]を持つ型に対して不正にadditionalProperties: falseを出力する問題を修正しました。JsonTypeInfo.EffectiveUnmappedMemberHandlingを使用することで、エクスポーターが拡張データのオーバーライドを尊重し、通常の型は引き続き厳格に処理されるようにします。

変更内容

  • JsonSchemaExporter.cs: UnmappedMemberHandlingチェックの判定ロジックを改善(+1/-2行)
  • JsonSchemaExporterTests.cs: グローバルSkip/Disallow設定と[JsonExtensionData]の組み合わせに対する回帰テストを追加(+28行)。反射とソースジェネレーション両方をカバーし、シリアライザーのラウンドトリップテストも含む

パフォーマンスへの影響

影響なし

関連Issue

#135258

その他

  • 本修正により、JsonSerializerが拡張プロパティを受け入れてラウンドトリップする挙動と、JsonSchemaExporterが生成するスキーマの整合性が取れるようになります
  • CoreCLRと.NET Framework 4.8.1で検証済み(131,214テスト合格、0失敗)
  • 本PRはGitHub Copilotで生成されました

#135260 Fix GPT-6.1 Responses routing in CI scanner workflows

概要

CI scanner と feedback ワークフローで GPT-6.1 Sol モデルを /chat/completions 経由で呼び出していた問題を修正しました。GPT-6.1 Sol は Responses API を必須とするため、ワークフロー設定で COPILOT_PROVIDER_WIRE_API: responses を明示的に指定することで HTTP 400 エラーを解決します。

変更内容

  • ci-failure-scan.lock.yml / ci-failure-scan-feedback.lock.yml: Copilot 実行ステップで COPILOT_PROVIDER_WIRE_API: responses 環境変数を追加
  • ci-failure-scan.md / ci-failure-scan-feedback.md: GPT-6.1 Sol が Responses API を要求する理由についてのドキュメント追加
  • evals/README.md: ネイティブ SDK eval がこのルーティング設定をカバーしない理由を文書化
  • evals/kbe-search.test.mjs: GPT-6.1 Sol のルーティング検証用テストケース 2 件を新規追加(ロックファイル再生成後の動作確認)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • ファイアウォール (AWF 0.27.44) は既に GPT-5-family と o3 モデルに対して Responses を自動選択していますが、GPT-6.1 Sol のモデル名マッチングおよび gh-aw v0.86.2 のカタログではまだこのモデルをサポートしていないため、ワークフローレベルでの明示的な指定が必要です
  • モデル・依存ライブラリのバージョン更新なし
  • テスト検証済み: 新規ルーティングテスト 2 件、既存 28 テストの実行確認、ワークフロー compilation 確認、ローカル実行で HTTP 200 応答を確認

#135248 Enable Roslyn compiler caching on Windows

概要

Azure Pipelines CI/CDの構成を変更し、Roslyn コンパイラ出力キャッシング機能を Windows ビルドで有効化します。Unix 向けには sccache を保持しながら、Windows x64/x86/Arm64 向けには Roslyn 専用のキャッシュを統合します。キャッシュと統計情報テンプレートを共有化し、ビルド構成の保守性を向上させます。

変更内容

  • build-cache-stats.yml (新規): Windows/Unix 統合型キャッシュ統計レポート機能を追加
  • setup-build-caches.yml (更新): Roslyn キャッシュセットアップを Unix/Windows の両プラットフォーム対応に拡張
  • runtime.yml (更新): 共有キャッシュテンプレートを適用し、Windows キャッシュシード設定を追加
  • global-build.yml (更新): 共有キャッシュテンプレートを適用
  • jit-hardware-intrinsics-common.yml (更新): 共有キャッシュテンプレートを採用
  • 削除ファイル: setup-roslyn-cache.yml、roslyn-cache-stats.yml、sccache-stats.yml(機能統合により廃止)

パフォーマンスへの影響

キャッシュヒット率に基づく改善実績:

  • libs.tests ビルド時間: 6分32秒 → 4分53秒(25.25% 削減)
  • Unix ローリングビルドでの実績: 21,130 個のコンパイラ出力を再利用、98.4% のキャッシュヒット率達成(23 ジョブ対象、352 件新規保存)
  • Windows 固有のヒット率は初回ローリングビルド後に測定可能

関連Issue

#133748

その他

  • 検証内容: Azure Pipelines YAML の構文確認、Windows PowerShell キャッシュ処理の動作確認、既存 Unix キャッシュ動作の互換性確認を実施
  • 破壊的変更なし。既存の Unix sccache 動作と互換性を維持
  • ビルドインフラストラクチャ構成の変更のみで、コンパイラやランタイムの公開API には影響なし

#135244 Implement HasSameMetadataDefinitionAs in System.Reflection.Context

概要

CustomReflectionContextによって返されるTypeとメンバーがHasSameMetadataDefinitionAsでNotImplementedExceptionをスローしていた問題を修正しました。投影型とメンバークラスが、それらがラップするメンバーを比較し、同じコンテキストで投影されたメンバーのみマッチするようになります。

変更内容

  • ProjectingType/ProjectingPropertyInfo/ProjectingMethodInfo/ProjectingFieldInfo/ProjectingEventInfo/ProjectingConstructorInfo: HasSameMetadataDefinitionAsをオーバーライドし、ラップされたメンバーを比較して同じコンテキストで投影されたメンバーのみマッチさせる
  • VirtualPropertyBase/VirtualMethodBase: コンテキストが追加したプロパティとそのアクセサーについて、HasSameMetadataDefinitionAsを実装。自身とのみマッチ(異なるReflectedTypeでも同じ)
  • InheritedPropertyInfo/InheritedMethodInfo: 委譲型のプロパティ/メソッド比較を実装
  • HasSameMetadataDefinitionAsTests.cs: 投影型(ジェネリック定義を含む)、全種類の投影メンバー、追加プロパティとアクセサー、GetMemberWithSameMetadataDefinitionAs、null引数をカバーする包括的なテストを追加
  • null引数はArgumentNullExceptionをスロー(ランタイムメンバーと同じ動作)
  • GetMemberWithSameMetadataDefinitionAsはTypeの実装がそのまま動作するため、オーバーライド不要

パフォーマンスへの影響

影響なし

関連Issue

#135242

その他

  • 関連PR #135241で修正予定の既知問題:派生投影型のGetMethods()が基本型の追加プロパティのアクセサーを返す場合、GetMemberWithSameMetadataDefinitionAsが基本型のゲッターを返す(#135240)
  • 複数の動作選択肢が検討されたが、反射的でない動作や予期しない動作を避けるため、現在の実装が選択されました
  • Windows x64 CoreCLR、Mono(JIT/インタプリタ)、NativeAOT、ブラウザ-wasmでテスト済み

#135241 Return inherited accessors from InheritedPropertyInfo.GetAccessors

概要

CustomReflectionContextで基本型に追加されたプロパティが派生型でInheritedPropertyInfoとして報告される際、GetAccessorsメソッドが基本型のアクセサーを返していた問題を修正。GetGetMethodとGetSetMethodと同様に、GetAccessorsがInheritedMethodInfoでラップされたアクセサーを返すようにして、ReflectedTypeが派生型で統一されるようにしました。

変更内容

  • InheritedPropertyInfo.cs: GetAccessorsメソッドをオーバーライドし、各アクセサーをInheritedMethodInfoでラップして返すように実装。
  • InheritedPropertyInfoTests.cs: 派生型でのアクセサーの一貫性を検証するテストケース(ゲッター/セッターの組み合わせパターン、GetMethodsとの整合性など)を追加。

パフォーマンスへの影響

影響なし

関連Issue

#135240

その他

破壊的変更: このPRは返却値の変更を含みます。GetAccessorsが返すメソッドのReflectedType、Equals、GetHashCodeの振る舞いが変わるため、破壊的変更レビュープロセスの対象になる可能性があります。

既知の制限: 派生型でGetBaseDefinition()やGetParameters()のMemberプロパティは引き続き基本型のアクセサーを公開しており、これらは別途の変更で対応予定です。

テスト状況: Windows x64の他、Mono(JIT/インタープリタ)、NativeAOT、browser-wasmでも動作確認済み。


#135238 JsonNamingPolicyAttribute: Add missing PascalCase

概要

PR #124644でPascalCase命名ポリシーのサポートが追加されましたが、JsonNamingPolicyAttributeでの実装が漏れていました。本PRでは、JsonNamingPolicyAttributeにPascalCaseを指定した際に発生していたArgumentOutOfRangeExceptionを修正します。

[JsonNamingPolicy(JsonKnownNamingPolicy.PascalCase)]
public class TestClass
{
    public int Property { get; init; }
}

変更内容

  • System.Text.Json/src/System/Text/Json/Serialization/Attributes/JsonNamingPolicyAttribute.cs: PascalCase命名ポリシーのサポートを追加(+1行)
  • System.Text.Json/tests/Common/PropertyNameTests.cs: テストケースを追加(+1行)

パフォーマンスへの影響

影響なし

関連Issue

#124644

その他

なし


#135236 Reject null characters in process arguments

概要

ProcessStartInfo.Arguments と ProcessStartInfo.ArgumentList に埋め込まれたNull文字(\0)をバリデーションして拒否する機能を追加しました。バリデーションは ProcessStartInfo.ThrowIfInvalid の共有パスで実行され、プロセス起動前にプラットフォーム固有のコマンドライン構築前に検証が行われます。これは #132214 および #132640 の環境変数検証と同様の衛生的なバリデーション(primary security mitigation ではなく)です。

変更内容

  • Strings.resx: Null文字検出時のエラーメッセージリソースを追加(3行)
  • ProcessStartInfo.cs: ThrowIfInvalid メソッドにNull文字バリデーションロジックを追加。Arguments 文字列と ArgumentList の各要素をチェックし、Null文字が検出された場合は該当パラメータ名を指定して ArgumentException を投出(15行追加)
  • ProcessTests.cs: Null文字を含む Arguments と ArgumentList エントリが正しく拒否されることを検証する2つの回帰テストを追加(21行)

パフォーマンスへの影響

影響なし。バリデーション処理はプロセス起動時の初期段階で実行されるため、実行時のパフォーマンスへの悪影響は最小限です。

関連Issue

#132214、#132640

その他

  • テスト結果:692件中692件パス(2件スキップ)
  • 新規追加テストは実装前に失敗、実装後に合格を確認済み
  • プロセス引数は .NET のセキュリティベースライン上で信頼される入力であるため、本変更は衛生的なバリデーションであり、主要なセキュリティ対策ではありません

#135230 [release/10.0] Fix negative tmp-buffer size in vxsort align_vectorized

概要

vxsortのalign_vectorized関数におけるバッファサイズ計算の負数バグを修正します。GC mark list のソート処理中にcoreclr!memcpyでアクセス違反が発生する問題を解決します。このバグは.NET Core 6の導入時から存在しており、特にServer GC環境で再現されていました。

変更内容

  • src/coreclr/gc/vxsort/vxsort.h: boundary-lane分類のロジックを修正し、範囲外のレーンを正しく処理することで、無効なコピーサイズを防止

パフォーマンスへの影響

影響なし。変更はバウンダリーレーン分類に限定され、既存のソート・バッファ管理ロジックは保持されます。

関連Issue

#86548、#134881

その他

  • 回帰: .NET 6で導入されたバグ(PR #37159)
  • 顧客影響: Azure App Service上の多テナントSaaS環境でServer/Workstation GC バックグラウンドスレッドのクラッシュが定期的に発生し、SLA違反に至るケース報告あり
  • テスト: Server GC + GC stress C オプション付きでcoreclrテストを実行
  • リスク評価: Low。変更範囲が限定的で、既存のソート・バッファ管理ロジック構造は保持されます

#135229 [release/11.0] Fix negative tmp-buffer size in vxsort align_vectorized

概要

.NET 6以降のvxsort実装に存在するバグを修正するバックポート。Server/Workstation GC背景スレッドがGCマークリストのソート中にメモリアクセス違反でクラッシュする問題を解決します。負のバッファサイズが発生する境界レーン分類のロジックを修正し、無効なコピーサイズと出力の破損を防ぎます。

変更内容

  • src/coreclr/gc/vxsort/vxsort.h: vxsort内の境界レーン分類ロジックを修正。範囲外のレーンをサイドに強制し、その後のトリミングで処理することで、負のバッファサイズ問題を解決(+30/-1行)

パフォーマンスへの影響

影響なし。既存のソートおよびバッファ管理ロジックは保持され、変更は境界レーン分類に限定されます。

関連Issue

#86548、#134881

その他

  • 重大度: クリティカル。GCバックグラウンドスレッドのクラッシュはプロセス終了につながり、顧客のAzure App Serviceで定期的に発生し、SLA違反を引き起こしています
  • 回帰: .NET 6で導入(PR #37159)
  • リスク評価: 低。変更は局所的で既存ロジックを保持
  • テスト: Server GCでGCストレステスト(レベルC)を実施

#135226 Fix Unix BER decoding on Linux & macOS

概要

Unix環境(Linux・macOS)のBER(Basic Encoding Rules)デコード処理を修正します。ベクトル形式のデータを専用のインタロップパスに経由させ、x形式の任意のBER要素はber_get_stringbv API経由で処理するようにしました。これはAppleのLDAPフレームワークでber_skip_elementがエクスポートされていない問題に対応するものです。

変更内容

  • Interop.Ber.cs: OpenLdap インタロップレイヤーで、ベクトル形式データを適切に処理するためのロジックを追加(10行追加、2行削除)
  • BerConverter.cs: BER変換処理の修正(1行削除)
  • BerConverterTests.cs: LinuxとmacOSの両方のケースに対応した回帰テストを追加(44行追加)

パフォーマンスへの影響

影響なし

関連Issue

#135226

その他

このPRはSystem.DirectoryServices.Protocolsライブラリの内部実装(非公開API)への変更です。Linuxおよびmacosh環境でのLDAP BER デコード処理の互換性を向上させます。


#135224 [wasi] Remove quarantines for wasihost runtimeconfig properties

概要

WASI ホスト上で AppContext スイッチが正常に機能するようになったため、これらのスイッチに依存する 28 個の WASI テストを再有効化するPRです。#134964 により wasihost がアプリケーションのランタイム設定プロパティをランタイムに渡すようになり、#134954 で報告されていた問題が解決されました。

変更内容

WASI 環境で必要でなくなった ActiveIssue 属性(隔離)を削除:

  • System.Data.Common: DataSet XML シリアライズ関連の 10 個のテストを再有効化
  • System.Diagnostics.DiagnosticSource: Activity ID フォーマット関連の 3 個のテストを再有効化
  • System.Runtime.Serialization.Xml: DataContractSerializer 関連の 1 個のテストを再有効化
  • System.Globalization.Calendars: 日本語カレンダー日付解析関連の 1 個のテストを再有効化
  • System.Runtime: タイムゾーン不変化・UTF-7・エンコーディング関連の 13 個のテストを再有効化

パフォーマンスへの影響

影響なし。本PR は隔離されたテストの再有効化のみで、ランタイム動作には変更がありません。

関連Issue

#134954、#134813、#134964

その他

wasmtime 49.0.1 上で macOS arm64 環境による検証済み。インタープリタ版および trimmed composite R2R 版の両方で、対象テストスイート全体で合計 41,935 テストが実行され、0 件の失敗(ただし IdGenerationInternalParent はマルチスレッド要件のためスキップ)。


#135220 Fix ZIP AES encryption method detection

概要

ZIP AES暗号化エントリの検出ロジックを修正しました。WinZip AES形式では暗号化フラグと圧縮方法99の両方が必須ですが、以前はヘッダーで正しく識別されていない場合でも有効なAES拡張フィールドが暗号化・圧縮方法をオーバーライドしてしまう問題がありました。修正後は共有AES述語を使用してエントリを読み込み、AESエントリが必要な拡張データを欠く場合はInvalidDataExceptionをスローします。

変更内容

  • ZipArchiveEntry.cs: AES暗号化エントリの検出ロジックを改善し、共有AES述語を使用してエントリ読み込み時にAES有効性を検証。不正なAESエントリに対して例外をスロー
  • Strings.resx: 新規エラーメッセージリソースを3件追加
  • zip_ReadTests.cs: 320個の回帰テストケースを追加し、同期/非同期API、Read/Updateモード、暗号化フラグ、圧縮方法、AES強度、AE-1/AE-2形式、欠落/不正なAES拡張データを網羅

パフォーマンスへの影響

影響なし

関連Issue

#135205

その他

  • 互換性への影響: 不正なAESエントリは中央ディレクトリ読み込み時にInvalidDataExceptionでフェイルするようになり、従来のZipCryptoやUnknownへのフォールバックを回避します
  • テスト結果: Windows/Browser環境で320個の回帰テストが全てパス。修正前はWindows上で128件の失敗を記録。全Compression suite: 2,972テスト、ZipFileスイート: 367テスト成功
  • 実装メモ: ローカルヘッダ一貫性検証とアーカイブ書き込み処理は変更なし
  • PR説明と実装はGitHub Copilotによって生成されています

#135210 Delete typeof caching

概要

typeof式のキャッシング処理を削除する最適化除去PRです。静的フィールドに型情報をキャッシュしていた実装を廃止し、typeofを直接参照するように変更します。JITコンパイラがtypeof式を効率的に最適化するため、手動キャッシングは逆に性能低下を招くという判断に基づいています。

変更内容

複数のライブラリ全体でtypeofキャッシュの削除を実施:

  • System.ComponentModel.Composition系: キャッシュフィールド削除、typeof式を直接使用に統一
  • System.Data系(ODBC/OleDb): パラメータコレクション内のキャッシュロジック削除
  • System.Private.DataContractSerialization: Globals.csから大量のキャッシュフィールド削除(89行削除)、各DataContractクラスで直接typeof参照に変更
  • その他ライブラリ: System.Composition.Convention、System.Configuration、System.Data.Common等で同様のキャッシュ削除

パフォーマンスへの影響

改善予定。最新のJITコンパイラはtypeof式の最適化が充実しており、手動キャッシングによる不必要なメモリオーバーヘッドと参照追跡の負荷を排除することで、実行時性能と引き換えにメモリ効率が向上する見込みです。

関連Issue

#135210

その他

  • 内部実装の変更であり、公開API互換性への影響なし
  • 広範囲の複数ライブラリにおける一貫性のある機械的な変更
  • Globals.csが顕著に行数削減される(91行中89行削除)ため、型メタデータ周辺の簡潔化が進む

#135208 Avoid checked-build assertion for open Nullable assignability

  • 作成者: @Copilot
  • 作成日時: 2026年10月05日 12:26:54(UTC)
  • マージ日時: 2026年10月06日 04:08:09(UTC)
  • ラベル: area-System.Reflection

概要

Open Nullable<> 型の割り当て可能性チェックにおいて、チェックビルドで不正なアサーションが発生していた問題を修正しました。ジェネリック引数を MethodTable* ではなく TypeHandle として扱い、MethodTable.NullableType プロパティを通じて読み込むことで対応しています。

変更内容

  • CastHelpers.cs: nullable キャスト処理のロジック簡潔化(4行追加、8行削除)
  • RuntimeHelpers.CoreCLR.cs: ジェネリック引数を TypeHandle で表現し、InstantiationArg0 はデバッグ検証時のみ使用(13行追加、4行削除)
  • RuntimeType.CoreCLR.cs: 型割り当て可能性チェックの実装更新(2行追加、3行削除)
  • comutilnative.cpp/h、ecalllist.h: 不要になった nullable 関連ネイティブコードの削除
  • テスト追加: Open Nullable<> の割り当て可能性に関するテストケースを追加(MetadataLoadContext、System.Reflection テスト)

パフォーマンスへの影響

影響なし

関連Issue

#133448

その他

  • ジェネリック引数の型表現方法を改善することで、nullable 型に対する正確な型チェックが可能になりました
  • 既存の nullable ケースと並行して open-Nullable<> の割り当て可能性テストを追加し、リグレッション対策を強化しています

#135202 [aw] Restore CI scanner repository lookup dependency

概要

CI scanner のリポジトリ参照機能を復旧するパッチです。前回の変更(#133684)で repos バックエンドツールセットを削除した結果、本番環境のGiteway経由でスキャナが候補 Issue を読み込む際に search_repositories 内部呼び出しが失敗していました。本修正では repos をリストアし、ロックファイルを再生成し、回帰テストを追加して、本番・評価環境のバックエンドツールセット一貫性を確保します。

変更内容

  • .github/workflows/ci-failure-scan.lock.yml: repos バックエンドツールを復旧してロックファイルを v0.86.2 で再生成(内容は4行追加・4行削除、計8行)
  • .github/workflows/ci-failure-scan.md: スキャナ評価環境の説明を追加(リポジトリ参照機能の制限を明記)
  • .github/workflows/evals/README.md: 本番・評価環境のバックエンドツールセット一貫性確認についてのドキュメント追加
  • .github/workflows/evals/kbe-search.test.mjs: バックエンドツールセット比較とリポジトリ参照依存性に関する回帰テストを追加

エージェント向けツールリスト(issue_read、search_pull_requests、pull_request_read)は変更なし。

パフォーマンスへの影響

影響なし

関連Issue

#133684

その他

  • 検証結果:テスト 26 件すべてパス、本番 gateway (v0.4.9) による読み取りスモークテストで修正を確認
  • 評価環境では直接 GitHub MCP に接続するため、本番設定と異なる条件下でテストされていた点が先の検証で見落とされた原因

#135160 Enable class-level parallelism in Process tests

概要

Process テストスイートの実行予算不足を解消するため、クラスレベルの並列実行を Windows/Linux で復活させるもの。環境状態に敏感なテストを RemoteExecutor で隔離し、macOS ではアセンブリ全体のシリアル化を維持する。このアプローチにより、テスト実行時間の短縮と並行実行による問題の回避を両立させる。

変更内容

  • AssemblyInfo.cs: TARGET_OSX の条件付き定義を追加。Unix ターゲットフレームワークで TargetOS=osx の場合のみ定義し、オリジナルの CollectionPerAssembly 属性を適用
  • ProcessStandardConsoleTests.cs / ProcessStartInfoTests.cs: Windows エンコーディングテストと親環境テスト (3 つ) を RemoteExecutor 内で実行。ネイティブコンソール分離と環境継承の保持を実現
  • ProcessTests.Unix.cs: Unix 実行可能解決テストに一意のディレクトリと RemoteExecutor ワーキングディレクトリを使用
  • ProcessTests.Windows.cs: job-breakaway アクセス拒否対応の実装
  • Interop.cs: コンソール管理用の P/Invoke 定義追加
  • System.Diagnostics.Process.Tests.csproj: プロジェクト設定変更

パフォーマンスへの影響

ローカル測定では、シリアル実行時間 763.201s、並列実行時間 311.975s。ただし、これらは指標的な値で制御された性能実証ではない。Windows Server 2016 での試験では 691 ケース中 687 が合格、4 スレッドのクラス並列実行で全 5 つの隔離テストが成功(518.706 テスト秒)。macOS での Mono x64・Checked CoreCLR arm64 タイムアウト対策として、アセンブリシリアル化を維持。

関連Issue

#135001

その他

  • Windows/Linux ではクラスレベルの並列実行を復活させ、macOS(Mono/CoreCLR)ではアセンブリ全体のシリアル化を維持するプラットフォーム別戦略
  • Android・MacCatalyst・Browser の動作は変更なし
  • RemoteExecutor を用いた環境隔離により、子プロセス終了時の環境クリーンアップを実現
  • macOS の並行実行問題と Windows の job-breakaway エラーは未解決のまま
  • 実際の macOS や NativeAOT 実行確認は今後の自動 CI 実行に依存
  • シェアリングフレームワークターゲットパックの欠落により、リポジトリ完全ビルドは未検証

#135144 Unify Thread.CurrentOSThreadId between CoreCLR and NativeAOT

  • 作成者: @EgorBo
  • 作成日時: 2026年10月02日 23:38:04(UTC)
  • マージ日時: 2026年10月06日 22:10:30(UTC)
  • ラベル: area-System.Threading

概要

Thread.CurrentOSThreadIdの実装をCoreCLRとNativeAOT間で統一し、プラットフォーム固有の相互運用を共有化しました。Windows/Unixプラットフォーム向けのスレッドID取得をネイティブ相互運用層を通じて統一的に処理し、Mono実装は従来通り保持されます。WASIでは単一スレッド環境のためスレッドID 1 を返すようになりました。

変更内容

  • 共有相互運用層の導入: System.Private.CoreLib の共有ソースに Windows/Unix プラットフォーム別の実装を集約し、CoreCLRとNativeAOTで同一コードパスを使用
  • CoreCLR固有実装の削除: QCall経由のネイティブ呼び出し(comsynchronizable.cpp/.h、qcallentrypoints.cpp)を廃止
  • NativeAOT固有実装の削除: RuntimeImports.cs、Thread.NativeAot.cs、thread.cpp のランタイム固有エントリポイントを削除
  • Mono実装の保持: mono/mono/metadata/threads.c の実装は維持
  • WASI対応: pal_threading_wasi.c でWASI環境用に固定スレッドID返却を実装
  • 相互運用宣言の拡張: Unix側の64ビット相互運用を利用可能にし、GC遷移を抑止

パフォーマンスへの影響

影響なし。実装の統一化による構造的改善ですが、スレッドID取得自体のパフォーマンス特性に変化はありません。

関連Issue

なし

その他

Copilot による指摘として、クロスランタイムの相互運用変更であるため、特にWASIおよびNativeAOT環境での検証が必要。提出時点でビルド・テスト実行が未完了のため、プラットフォーム別の動作確認が必須です。


#135138 Unify Thread.SpinWait/Yield/OptimalMaxSpinWaitsPerSpinIteration between CoreCLR and NativeAOT

  • 作成者: @EgorBo
  • 作成日時: 2026年10月02日 22:50:37(UTC)
  • マージ日時: 2026年10月06日 16:19:11(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLR と NativeAOT 間で Thread.SpinWait、Thread.Yield、OptimalMaxSpinWaitsPerSpinIteration の実装を統一しました。マネージド実装を共有 Thread.cs に移動し、ネイティブ実装を MiscNativeHelpers.cpp(両ランタイムにコンパイル)でサポートしています。NativeAOT はハードコードされた値(8)の代わりに計測された OptimalMaxSpinWaitsPerSpinIteration を報告するようになります。

変更内容

  • 共有実装の統一: src/libraries/System.Private.CoreLib/src/System/Threading/Thread.cs に SpinWait、Yield、OptimalMaxSpinWaitsPerSpinIteration の実装を追加
  • ネイティブヘルパーの統合: src/coreclr/runtime/MiscNativeHelpers.cpp に両ランタイム共通のネイティブ実装を集約
  • CoreCLR 固有実装の削除: Thread.CoreCLR.cs、comsynchronizable.cpp/h から QCall/FCALL を削除し、ecalllist.h のエントリを削除
  • NativeAOT 固有実装の削除: Thread.NativeAot.cs、MiscHelpers.cpp、RuntimeImports.cs から NativeAOT 専用実装を削除
  • Mono への影響: Thread.Mono.cs を軽微に調整

パフォーマンスへの影響

NativeAOT が計測値に基づく動的な OptimalMaxSpinWaitsPerSpinIteration を使用することで、スピンウェイトの効率が改善される可能性があります。ただしベンチマーク結果は提供されていません。統一実装により、ランタイム間での動作の一貫性が向上します。

関連Issue

#135138、dotnet/corert#4430

その他

この変更は公開 API(Thread.SpinWait、Thread.Yield)に対する内部実装の統一であり、互換性への影響はありません。複数のランタイムの分散した実装を 1 箇所に集約することで、保守性が向上します。


#135136 Support /OPTIMIZE and raw method-body emission in managed ilasm

概要

管理型ilasmで /OPTIMIZE フラグと生のメソッドボディ生成をサポートします。デフォルトでは作成者が指定した命令形式(long/short/macro)を保持し、/OPTIMIZE 指定時のみ定数とブランチをコンパクト化します。新しいメソッドボディライターにより、署名付きオフセットラベルと予約済みオペランド修正を通じてバイト単位の忠実なアセンブリを実現し、エラートレランスモードで不正なEH境界も保持できます。

変更内容

  • MethodBodyWriter.cs(新規): 命令バイト、例外句、分岐/スイッチ/トークン修正を直接生成する専用ライター実装
  • GrammarActions.Instructions.cs: 命令生成をライターにルーティング、冗長コード削除
  • GrammarActions.MethodBodies.cs/ExceptionHandling.cs: EH位置とラベル記録、メソッド終了時に修正完了
  • EntityRegistry.cs: 新しいライター統合、SRM APIの固定容量チャンク回避策廃止
  • InstructionEncoderExtensions.cs: プライベートフレームワークラベルアクセサを削除
  • Options.cs: 最適化動作文書化
  • Diagnostic.cs: 分岐/EH関連の新規診断追加
  • テスト拡張: 114件の新規テストケース追加(命令エンコーディング、ブランチ制限、スイッチベース、不正EHフィールド、PDB offsets対応など)
  • KNOWN-ISSUES.md: 廃止最適化制限を削除

パフォーマンスへの影響

ベンチマーク測定結果(Windows x64/.NET 11 RC、BenchmarkDotNet):

  • 8ブランチ: 150.8 us → 110.2 us(約27%改善)、メモリ 207.95 KB → 203.57 KB
  • 1,024ブランチ: 10.222 ms → 9.317 ms(約9%改善)、メモリ 5,970.65 KB → 6,058.88 KB(+1.5%)

Hyper-V VM上の測定のため参考値です。スループット低下なし。大規模ケースでは源コード位置付きの修正ブックキーピング用にメモリ増加。

関連Issue

なし

その他

  • 520テスト全合格、失敗/スキップなし
  • ネイティブilasmとの互換性検証完了(10個のCLI smoke image、NativeAOT対応)
  • 既知制限: ゼロコードメソッドは依然ボディ生成をバイパスし、不正例外領域を削除(Copilot review指摘)
  • 前方ブランチの緩和なし。明示的な .s ブランチは拡幅されず、オーバーフロー時は診断出力
  • ラベル依存解決の遅延化と携帯型PDB sequence pointのオフセット保持(グローバルメソッド対応)

#135132 Fix hexadecimal float sign round-tripping

概要

16進数浮動小数点数(hexadecimal float)のカスタム符号のラウンドトリップ問題を修正します。数値パース時に最長マッチするカスタム符号を選択し、同一長の場合はPositiveSignを優先することで、16進浮動小数点数、科学記法(E形式)、整数でカスタム符号のプレフィックスオーバーラップが一貫して機能するようにします。

変更内容

  • Number.Parsing.Common.cs: 符号マッチング ロジックを共通化し、最長マッチ優先、同一長時はPositiveSign優先の処理を実装
  • Number.Formatting.cs: 指数部の符号フォーマット時にNumberFormatInfoのカスタム符号を使用
  • Number.Parsing.cs: 共通化されたパース処理に統合し、コード削減
  • NumberStyles.cs: 16進浮動小数点数のカスタム符号依存性をドキュメント化
  • テストファイル: Double、Float、Half、BFloat16、Int32、BigIntegerのラウンドトリップ・カスタム符号回帰テストを追加(合計280行以上)

パフォーマンスへの影響

影響なし

関連Issue

#135039

その他

  • 破壊的変更の可能性: 共有パースコードの符号優先度変更が、複数の公開数値API(double.Parse、float.Parse、Half.Parse、BFloat16.Parse、int.Parse等)に影響します。カスタム符号を使用するNumberFormatInfoプロバイダーを使用している場合、パース動作が変わる可能性があります。
  • テスト結果: CoreLib ビルド成功、System.Runtime.Tests 78,557 テスト中 78,470 パス(0 失敗、87 スキップ)
  • 既知の制限: UTF-8 パースにおいて、異なるエンコード長を持つ同等の空白文字がある場合、UTF-16 パースとは異なるオーバーラップ符号が選択される可能性があります

#135120 Expose HashLog2 and ChainLog2 on ZstandardCompressionOptions

概要

Zstandard圧縮オプションにHashLog2とChainLog2プロパティを公開し、大規模プリフィックス(>32MB)に対するデルタ圧縮の際に、エンコーダーがインデックステーブルの制限を超えてプリフィックス全体をインデックスできるようにします。

public sealed partial class ZstandardCompressionOptions
{
    public static int MinHashLog2 { get; }  // 6
    public static int MaxHashLog2 { get; }  // 30
    public static int MinChainLog2 { get; } // 6
    public static int MaxChainLog2 { get; } // 30 (64-bit) / 29 (32-bit)
    
    public int HashLog2 { get; set; }       // 0 = デフォルト(Quality から自動決定)
    public int ChainLog2 { get; set; }      // 0 = デフォルト
}

変更内容

  • ZstandardCompressionOptions.cs: HashLog2 と ChainLog2 インスタンスプロパティを追加。値 0 は実装定義のデフォルトを示し、非ゼロ値は [Min..Max] 範囲で検証
  • ZstandardUtils.cs: 仕様定数 HashLog_Min (6)、HashLog_Max (30)、ChainLog_Min (6)、ChainLog_Max (プラットフォーム依存) を定義
  • ZstandardEncoder.cs: オプション設定時に HashLog2 != 0 または ChainLog2 != 0 の場合、ZSTD_c_hashLog と ZSTD_c_chainLog パラメータを転送。SetPrefix にインデックス制限に関する注記を追加
  • ref/System.IO.Compression.cs と Zstandard.PlatformNotSupported.cs: API定義とプラットフォーム非対応版にプロパティを追加
  • ZstandardCompressionOptionsTests.cs: 静的境界値、デフォルト値、有効範囲のラウンドトリップ、範囲外例外、圧縮ラウンドトリップのテストを追加

パフォーマンスへの影響

影響なし(APIの機能追加のため、既存コードのパフォーマンスに影響なし。ユーザーが明示的に設定した場合は、より大規模なプリフィックスに対するデルタ圧縮が効率化される可能性あり)

関連Issue

#129214

その他

  • 破壊的変更: なし(既存APIへの追加のみ)
  • 互換性: 完全下位互換性を維持。デフォルト値 0 は既存の動作を保持
  • プラットフォーム依存: ChainLog2 の最大値が 64-bit (30) と 32-bit (29) で異なる

#135088 Arm64:[PAC-RET]Fix ARM64 epilog detection and PAC signing SP recovery

概要

ARM64 PAC(Pointer Authentication Code)対応環境での戻り番地ハイジャック検出とエピログ検出を修正します。SP調整がエピログの証拠として誤認識される問題を解決し、スタックアンワインディング中に回復したSPを使用してPAC署名を正しく検証します。

変更内容

  • UnixNativeCodeManager.cpp: エピログ検出ロジックを改善(SP調整のみではエピログと判定しない)し、アンワインディング結果から得たcaller SPを使用してPAC署名済み戻りアドレスの検証SPを回復
  • unwindarm64.cpp: NativeAOT環境で署名SP が CFA(Canonical Frame Address)と一致することを保証するアサーションを追加
  • CorInfoImpl.RyuJit.cs: PAC CFI(Control Flow Integrity)の前提条件検証ロジックを追加

パフォーマンスへの影響

影響なし(デバッグ/検証ロジックの追加)

関連Issue

#134912

その他

⚠️ Copilot Code Review指摘: PAC対応のARM64 OSRプロログで新しいCFA不変性がハイジャック署名を無効化する可能性があり、高重要度の問題として指摘されています。この問題への対応がレビューと共に進められています。


#134958 [wasi] Implement MksTemps/MkdTemp so GetTempFileName and CreateTempSubdirectory work

概要

WASIプラットフォーム上で Path.GetTempFileName() と Directory.CreateTempSubdirectory() を機能させるため、mkstemps/mkstemp と mkdtemp 実装をWASI向けに追加しました。wasi-libcがこれらのシステムコールを提供していないため、対応する PInvoke関数が失敗していた問題を解決します。

変更内容

  • src/native/libs/System.Native/pal_io.c: WASI限定の実装追加

    • GetTempNameRandomChars: テンプレート検証(サフィックス直前に6つのXが必須)
    • FillTempNameRandomChars: getentropy(wasi:random経由)で乱数を生成し[A-Za-z0-9]にマップ
    • SystemNative_MksTemps: ファイル作成ループ(最大100回試行)、成功時はファイルディスクリプタを返却、衝突時はEEXISTで再試行
    • SystemNative_MkdTemp: ディレクトリ作成ループ(最大100回試行)、成功時はテンプレート文字列を返却
    • 非WASI環境への影響なし、CoreCLRとMonoの両方で動作
  • テストファイル(24ファイル): WASI向けのActiveIssue属性を計89個削除

    • 関連する既存テストのクォーランティンが解除され、tempファイル関連テスト(StreamReaderやStreamWriter)が復活
    • ConfigurationTests.TouchingFileWillReloadForUserSecretsのみ残存(別の未解決問題)

パフォーマンスへの影響

影響なし

関連Issue

#134943 (Resolves)、#135225(関連する未解決問題)、#134813(前提PR)

その他

  • CoreCLR WASI インタプリタでの検証実施: 95,469テスト実行、95,300パス、0失敗、169スキップ
  • wasi-sdk 34およびwasmtime経由でテスト確認
  • GitHub Copilot補助で著作

#134921 Fix SslStream handling of empty TLS handshake records

  • 作成者: @rzikm
  • 作成日時: 2026年09月30日 10:06:14(UTC)
  • マージ日時: 2026年10月06日 18:13:35(UTC)
  • ラベル: area-System.Net.Security

概要

SslStream.ReceiveHandshakeFrameAsyncにおいて、空のTLSハンドシェイクレコード(16 03 01 00 00)を受信した際にIndexOutOfRangeExceptionがスローされる問題を修正しました。レコード長の検証を先に行うことで、空のハンドシェイクレコードに対して即座にIOExceptionをスロー するように改善されます。

変更内容

  • SslStream.IO.cs: ハンドシェイク受信時のレコード長検証ロジックを追加。ClientHelloプローブ前に記録長を検証し、TLS/SSLv2オフセット互換性を維持。
  • ServerAsyncAuthenticateTest.cs: 18個の新しい回帰テストケースを追加(直接証明書、コールバック、同期/非同期認証、両方のハンドシェイク実装、断片化読み取り、トレーリングバッファデータ、トランスポート開放状態など)。
  • SslStreamRemoteExecutorTests.cs: 追加の回帰テストケースを実装。

パフォーマンスへの影響

影響なし(検証ロジックの追加のみで、既存の5バイトフレーム認識とアプリケーションデータ処理は変更なし)

関連Issue

#134784

その他

  • 本修正は内部実装(SslStreamのハンドシェイク処理)の改善であり、公開APIへの影響なし。
  • 修正前後での動作対比: 修正前は空のハンドシェイクレコード受信時に予期しないIndexOutOfRangeExceptionがスロー、修正後は適切なIOExceptionがスロー。
  • 全18個の新規回帰テストが修正前のコードでは失敗、修正後は合格を確認。Windows x64での機能テスト/ユニットテストで5,410パス、失敗なし。
  • TLS 1.2を使用してマネージドフレーミングをテストしており、Apple Network Frameworkのパスは対象外。
  • PRはGitHub Copilotで生成されたことが注記されています。

#134729 Fix SAFEARRAY VARIANT copy-back and typed class array marshalling

概要

SAFEARRAYおよびVARIANT型の相互運用で3つの重大な問題を修正しています:

  1. VARIANT配列要素がby-ref型に不正に強制変換される問題
  2. 静的配列のコピーバック時にネイティブ要素が失われる問題
  3. クラス型配列がインスタンスチェックに違反する問題

これらの修正により、マネージド配列の要素型制約を保持し、正確な値の相互運用を実現します。

変更内容

  • olevariant.cpp/h: VARIANT要素の強制変換を廃止し、静的SAFEARRAY内容をコピーバック時に有効なままにする処理を追加(87行追加)
  • StubHelpers.cs/stubhelpers.cpp/h: VARIANT配列要素の処理ロジックを修正・追加
  • ilmarshalers.cpp: マーシャリングロジックの調整(10行追加)
  • dispparammarshaler.cpp/interoputil.cpp: 関連する呼び出し箇所の修正
  • テストケース: SafeArrayTest.cs、SafeArrayNative.cpp、COM Dispatchテストに回帰テストを追加(VARIANT配列と型付きクラス配列の相互運用シナリオ201行追加)

パフォーマンスへの影響

影響なし

関連Issue

#134579 #134580 #134581 #134574

その他

  • P/Invoke経由のSAFEARRAY相互運用における互換性に関する修正(内部実装レベルの変更)
  • 修正内容はChecked CoreCLRビルドおよび既存テストで検証済み
  • COM相互運用とDispatchテストの両方のシナリオをカバーする回帰テストを追加

#134710 [release/10.0] JIT: handle redefined enumerators in conditional escape analysis

概要

Conditional Escape Analysis (CEA) における列挙子の再定義ハンドリングのバグを修正しました。CEA最初の実装から存在する不具合で、複数に達する定義がある場合に不正なコード生成を招いていました。このバグにより静かに悪いコードが生成される可能性がありました。

変更内容

  • objectalloc.cpp/objectalloc.h: 条件付きエスケープ解析で列挙子が再定義される場合を適切に処理するロジックを追加。複数の定義に達する場合の最適化の除外条件を実装。
  • テストケース: Runtime_134605関連のリグレッションテストを追加(通常とStruct版の2つのプロジェクト構成)

パフォーマンスへの影響

影響なし。本修正は不正な最適化を除外するものであり、パフォーマンスの低下ではなく正確性の向上です。

関連Issue

#134605、#134658(元のPR)

その他

  • .NET 10のrelease/10.0ブランチへのバックポート(元のPR #134658の修正を反映)
  • 客からの報告によるバグ修正
  • SPMI(Static Program Model Inspection)での差分がないことを確認済み
  • リスクレベルは低い(最適化の保守的な除外)

#134602 [PERF] Retire default Mono performance runs and builds on main

概要

runtime mainのデフォルトMonoパフォーマンス実行とビルドを廃止し、CoreCLRとNativeAOTのワークロードを保持するパイプライン最適化。Mono関連の自動実行をオプト インに変更しながら、明示的なMonoビルダーと既存の消費者は維持されます。

依存関係: dotnet/performance#5322のマージが必要(新しいrunMonoパラメータを使用)。

変更内容

  • perf.yml / perf-slow.yml: デフォルトMono desktop/WAsmパフォーマンス実行を無効化。Mono専用の夜間スケジュールを削除し、CoreCLR Linux/Windows ARM64実行は保持。
  • perf-build.yml: 5つのMonoビルドセレクタをデフォルトfalseに設定。WASM buildはruntime所有ラッパーを通して1回だけ経由。
  • perf-build-jobs.yml / perf-wasm-build-jobs.yml: desktop/WAsmビルドラッパーをCoreC LR専用にデフォルト化。手動Monoビルダーはguarded状態で保持し、ソースのみgapfill Mono opt-insは明示的に。
  • perf-gapfill.yml: 明示的な手動Monoビルドのみ、ワークロード転送アーティファクトを公開。
  • runtime-wasm-perf.yml: Mono WASM実行を無効化。

パフォーマンスへの影響

  • パイプライン実行時間短縮: Mono desktop/WASM デフォルト実行を削除により、CI実行時間削減
  • メモリ/ストレージ削減: 不要なMonoアーティファクト生成を削除
  • 変更は内部実装(パイプライン設定)であり、ランタイム動作に直接的な影響なし

関連Issue

#134397、#134337(クローズしない)

その他

  • 後方互換性: 共有パフォーマンスコントロールはデフォルトtrue(旧ブランチ用)。現在のruntime mainのみ opt-out。
  • 検証済: Azure Pipelines公開/内部プレビューで検証。3つのエンドツーエンドサニティテスト実行成功(2026-09-24)。
  • 既知制限: gapfill転送のviperMicroNoR2RとdownloadSpecificBuildパラメータ、CoreCLR R2Rインタプリタ x64/ARM64ミスマッチは変更対象外。
  • リリースブランチ無変更: main限定の変更。手動パフォーマンスツールと既存ビルダー実装は利用可能。

#134025 Add parameter reflection regression tests

概要

パラメータリフレクション機能の回帰テストを追加するPRです。パラメータのデフォルト値、名前なしパラメータのフォーマット、インデクサーと合成配列メンバーの修正型、ランタイムパラメータ再構築をカバーする包括的なテストスイートを実装しています。

変更内容

  • src/libraries/System.Runtime/tests/System.Reflection.Tests/ParameterInfoTests.cs: 以下のシナリオをカバーするリグレッションテストを新規追加
    • パラメータデフォルト値の欠落ケース
    • 名前なしパラメータのフォーマット(末尾スペースが含まれないことを検証)
    • インデクサーパラメータの修正型(GetModifiedParameterType)
    • 合成配列パラメータの修正型
    • ランタイムパラメータのシリアライズ/デシリアライズ往復検証

パフォーマンスへの影響

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

関連Issue

#134025

その他

NativeAOT互換性上の懸念事項(Copilotレビューで指摘):

  • 複数のテストケースがNativeAOT環境で失敗する可能性があります:
    1. RuntimePropertyIndexParameterInfoとRuntimeSyntheticParameterInfoがGetModifiedParameterTypeをオーバーライドしていないため、NotSupportedExceptionが発生
    2. ToString_UnnamedParameter_OmitsTrailingSpaceテストはNativeAOTの実装が末尾スペースを追加するため失敗
    3. パラメータ情報のシリアライズ状態がNativeAOTで不足し、GetRealObjectがエラーを起こす可能性
    4. Monoテスト隔離にアクティブなトラッキングIssueが未参照

これらの懸念事項は、NativeAOT実装の更新または対応するテスト条件の追加により解決する必要があります。


#133819 Implement IsByRefLike on the remaining Reflection.Emit Type subclasses

概要

Reflection.Emit API で Type.IsByRefLike プロパティが4つの Type サブクラスで NotSupportedException をスロー していた問題を修正します。SymbolType、TypeBuilderImpl、GenericTypeParameterBuilderImpl は false を返し、TypeBuilderInstantiation は汎用型定義に処理を転送するようになります。これにより、MakeArrayType、MakePointerType、MakeByRefType、MakeGenericType での動作が一貫性を持つようになります。

変更内容

  • SymbolType.cs: IsByRefLike オーバーライドを追加、false を返す(MakeArrayType、MakePointerType、MakeByRefType で生成される複合型向け)
  • TypeBuilderInstantiation.cs: IsByRefLike オーバーライドを追加、汎用型定義に転送(例:typeof(Span<>).MakeGenericType(typeBuilder) は by-ref-like)
  • TypeBuilderImpl.cs: IsByRefLike オーバーライドを追加、false を返す(永続化ビルダー型向け)
  • GenericTypeParameterBuilderImpl.cs: IsByRefLike オーバーライドを追加、false を返す(永続化汎用パラメータ向け)
  • テスト追加: 8つの新規テストケース(ランタイムビルダーおよび永続化ビルダー向け)

パフォーマンスへの影響

影響なし

関連Issue

#91532、#34846、#133816

その他

  • 破壊的変更ではない: これまで NotSupportedException をスローしていたプロパティが有効な値を返すようになる観測可能な変更です。
  • TypeBuilderInstantiation の特別扱い: ランタイム汎用型定義がビルダー型で インスタンス化される場合、結果は TypeBuilderInstantiation となり、定義自体がビルダーの場合のみ false を返します。この動作は SignatureConstructedGenericType.IsByRefLike と一致します。
  • 永続化ビルダー型は別コミット: PersistedAssemblyBuilder が公開 API になったため、TypeBuilderImpl と GenericTypeParameterBuilderImpl も含められています。
  • System.Reflection.Context のギャップ: CustomReflectionContext でマップされた型は同様の問題を持っており、これは別PR(#133816)で対応予定です。
  • テスト実績: Windows x64 の checked ビルドと release ビルド両方でシステムテスト群がパス。Mono と NativeAOT では未検証。

#132861 Pass TPA through host-runtime contract instead of property string

  • 作成者: @elinor-fung
  • 作成日時: 2026年08月27日 22:28:28(UTC)
  • マージ日時: 2026年10月06日 01:28:26(UTC)
  • ラベル: area-Host

概要

ホストからランタイムへTrusted Platform Assemblies (TPA) を大きな文字列プロパティの代わりに、host_runtime_contract コールバック経由で構造化データとして渡すように変更しました。ホストは初期化時に解決されたアセンブリ名を提供し、ランタイムが必要に応じて各パスをオンデマンドで解決します。従来の TRUSTED_PLATFORM_ASSEMBLIES プロパティはオンデマンドで再構築可能であり、カスタムホストによる明示的な供給にも対応しています。パス区切り文字を含むパスでのアプリケーション実行が可能になります。

変更内容

  • host_runtime_contract 拡張: get_assembly_names と resolve_assembly_to_path コールバックを追加し、hostpolicy/corerun/CoreCLR/Mono に導入
  • CoreCLR バインダー: 名前のみの TPA エントリをホストコールバック経由でオンデマンド解決、構造化された TPA マップをコントラクト提供名から構築
  • Mono サポート: コントラクトベースの TPA 解析、AppContext ホストプロパティ icall を実装
  • ホストポリシー: 構造化 TPA 名/パスマッピング、遅延 TPA プロパティ再構築キャッシング、ディレクトリ重複排除を実装
  • corerun: デフォルトをコールバックベース TPA 配信に切り替え、解決コンテキスト実装
  • テスト/ドキュメント: コールバック/レガシプロパティ動作の両方をカバー

パフォーマンスへの影響

改善あり(Windows x64 基本コンソールアプリ測定結果):

  • スタートアップ: 67.684 ms → 66.831 ms (-0.853 ms、-1.26%)
  • ネイティブ割り当てバイト数: 10,131.65 KiB → 9,593.95 KiB (-537.70 KiB、-5.31%)
  • ライブ保持ネイティブバイト数: 1,955.30 KiB → 1,871.10 KiB (-84.20 KiB、-4.31%)

不要なパース処理削減とスタートアップ時割り当て削減により実現。

関連Issue

#3163 #75882 #104402

その他

互換性: TRUSTED_PLATFORM_ASSEMBLIES プロパティはレガシ/プロパティベースの TPA を含む後方互換性をサポート。ただし Copilot レビューで複数の課題が指摘されており、マージ前に対応が必要です:

  • CoreCLR バインダーの TPA 名パスで割り当て失敗チェック欠落
  • Mono でホスト解決 TPA エントリ失敗時の早期終了処理の問題
  • hostpolicy での拡張子剥離ロジックが多重拡張子パスで誤動作の可能性

#132591 Stop generating static restore binlogs

概要

dotnet/runtimeのビルドシステムにおいて、無条件に生成されていたネストされた静的グラフリストア用のバイナリログ(binlog)生成を廃止します。静的グラフリストア機能自体は有効なままで、ユーザーが明示的に要求した場合のみ外側のビルドbinlogを生成します。キャッシュされたリストアの場合でもパフォーマンス向上が期待されます。

変更内容

  • eng/Build.props: GenerateRestoreUseStaticGraphEvaluationBinlog=trueプロパティの無条件な設定を削除
    • RestoreUseStaticGraphEvaluation=trueは変更なし(静的グラフリストア機能は保持)
    • 削除行数: 1行

パフォーマンスへの影響

大幅な改善が期待される

完全キャッシュリストアシナリオでのベンチマーク結果(変更前→変更後):

  • ./build.sh -restore -v:q: 50.35秒 → 26.69秒(約47%削減)
  • ./build.sh -restore -v:q -bln <path>: 46.19秒 → 26.78秒

ネストされたbinlog生成に伴うオーバーヘッド(プロジェクト評価とインポート記録)が削減されます。

関連Issue

なし

その他

  • 本変更は互換性に影響なし(ユーザーが-blまたは-blnフラグで明示的に外側のbinlogを要求した場合、従来通り生成される)
  • 静的グラフリストア機能自体は2020年から有効で、診断用に内部binlogが生成されていました。本PRで不要な場合の生成をスキップします

目次