Pull Request on 2026年08月17日

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

注意点

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



#132427 [release/11.0-rc1] Add structural union type classifier

概要

C# Union型のSTJ(System.Text.Json)対応を完成させるための重要なコンポーネントとして、JsonUnionTypeStructuralClassifier の公開API実装を.NET 11-RC1へバックポートしています。このAPIにより、すべてJSONオブジェクトとしてシリアライズされるUnion型ケースについて、オブジェクトのプロパティ名に基づいた構造的な判別が可能になります。

変更内容

  • 新規公開API: JsonUnionTypeStructuralClassifier および補助的な ValueBitArray、UTF-8辞書ルックアップヘルパーを追加
  • 値形状(JsonValueType)の拡張: JsonValueType.Any を導入し、カスタムコンバーターが全JSON値形状をサポートするものとして保守的に扱う
  • Union値形状分類の更新: ランタイムとソースジェネレーター間の曖昧性検出を統一化し、ネストされたUnionの処理に対応
  • リソース・メッセージ更新: 構造分類器の設定およびサポート外シナリオ向けにエラーメッセージを追加
  • 組み込みコンバーターの宣言: Object/Array/Collection/Node型のコンバーターに適切なJsonValueTypeを明示的に指定
  • テスト拡充: リフレクション/ソースジェン両モードで構造分類動作と更新された診断をカバー

パフォーマンスへの影響

影響なし

関連Issue

#129805

その他

  • リスク評価:中。公開API追加のみで既存APIの変更なし
  • 互換性:破壊的変更なし。.NET 11の承認済みAPIのバックポート
  • テストカバレッジ:完全に含まれており、リグレッションは報告されていません
  • Copilotのレビューコメント:ドキュメント内で"POCO"の用語をオブジェクトシリアライズケースの動作説明に置き換えることが推奨されています

#132426 Clarify that runtime-async suspension points are forbidden in handlers, not try blocks

概要

docs/design/specs/runtime-async.mdの制限事項に関する曖昧な表現を明確化するドキュメント更新です。

変更前の記述「Suspension points may not appear in exception handling blocks」は、保護されたtryブロック全体を指すと誤読される可能性がありましたが、意図は例外ハンドラー(catch/filter/finally/fault)内のみを対象としています。

変更により、tryブロック内のawaitは許可され、catch/finallyハンドラー内のawaitのみが禁止されることが明確になります。ランタイム自体のテスト(simple-eh.cs)でもtry内でのawaitが使用されており、SDKの実装でも同様に対応されています。

変更内容

  • docs/design/specs/runtime-async.md: 制限事項の説明を修正し、「exception handling blocks」を「handler blocks」に明確化。ECMA-335で定義される4つのハンドラー種別(catch、filter、finally、fault)を明記。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 変更はドキュメントのみで、コード実装の変更なし
  • IL rewriter、profiler、analyzerの実装者にとって重要な曖昧性の解消
  • 補足として、ハンドラー内のawaitはコンパイラにより自動的にハンドラーの外に低減され、メソッドはMethodImplOptions.Asyncを保持することが実装の事実として存在(今回の変更では未記載)

#132411 [System.Text.Json] Add structural union type classifier

概要

System.Text.Jsonに公開API JsonUnionTypeStructuralClassifier を追加し、JSONトークン種別と同一レベルのオブジェクトプロパティ名に基づいてユニオン型のケースを分類します。分類器の構築時に曖昧または非サポートの設定を拒否し、ランタイムとソースジェネレータの変換メタデータと診断を統一します。最大64を超えるオブジェクトケースを含むマルチステージの候補除外を備えた包括的なエンドツーエンドカバレッジが実装されています。

変更内容

  • 新規公開API: JsonUnionTypeStructuralClassifierクラス(742行)を追加し、ユニオン型のケース分類ロジックを実装
  • ヘルパー型: ValueBitArray(91行)を追加し、最大64を超えるケースに対応するビット配列ユーティリティを実装
  • ソースジェネレータ: JsonSourceGenerator.Parser.csでパーサロジックを更新(+23/-24)
  • エラーメッセージ: Strings.resxに15個の新しい診断メッセージを追加
  • テスト整備: 既存テスト(StructuralJsonTypeClassifierTests.cs)をテスト専用プロトタイプから汎用エンドツーエンドカバレッジに刷新(+927/-648)、カバレッジ率99.78%
  • 既存コード調整: ユニオン変換関連の実装を整理・簡潔化

パフォーマンスへの影響

影響なし

関連Issue

#129805

その他

  • 65,954テスト(システム全体)合格、エラー0件
  • JsonUnionTypeStructuralClassifier.csカバレッジ454/455行(99.78%)、ValueBitArray.cs41/41行(100%)
  • 公開ユニオンデシリアライゼーションが分類器に転送しないトークン種別の防御的デフォルト以外は全カバレッジ達成
  • 参照アセンブリ(ref)に6行の公開API定義を追加

#132408 NativeAOT: remove BOM from generated source/response files

概要

NativeAOT のソースコードおよびレスポンスファイルから BOM(Byte Order Mark)を削除する変更です。レスポンスファイルが BOM で始まり、その後にフラグが続く場合、clang がそれをファイル名として解釈し、no such file or directory: '<feff>-fuse-ld=bfd' というエラーが発生していました。WriteLinesToFile が UTF-8 BOM なしを使用するように修正されています。

変更内容

  • src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Unix.targets (+2/-2)
    • レスポンスファイルとソースファイル生成時の encoding 属性を削除
    • 結果として UTF-8 BOM なしでファイルが生成されるようになります

パフォーマンスへの影響

影響なし

関連Issue

#132378

その他

  • 修正対象リビジョン: 4832002fd28748322015287b8fb3b8126334865f
  • Unix プラットフォーム(特に clang ツールチェーン)の NativeAOT ビルドシステムに関連する修正です

#132405 Add merge automation for 11.0rc1/rc2 release branches

  • 作成者: @akoeplinger
  • 作成日時: 2026年08月17日 13:06:40(UTC)
  • マージ日時: 2026年08月17日 13:19:19(UTC)
  • ラベル: area-Meta

概要

.NET 11.0のリリース候補版ブランチ(rc1/rc2)から本番リリースブランチへの自動マージ設定を追加します。既存の自動化フローを11.0リリースに拡張するもので、release/11.0-rc1とrelease/11.0-rc2からrelease/11.0への自動マージを有効にします。

変更内容

  • github-merge-flow.jsonc: release/11.0-rc1 → release/11.0のマージ自動化エントリを追加
  • github-merge-flow.jsonc: release/11.0-rc2 → release/11.0のマージ自動化エントリを追加

パフォーマンスへの影響

影響なし(ビルド構成の変更のみ)

関連Issue

なし

その他

この変更はリリース管理の自動化に関するものであり、開発者のコード実装には直接的な影響を与えません。GitHub Actions等のマージワークフローの設定変更です。


#132402 Use stable net/netframework folders for the mono SDK tasks

  • 作成者: @akoeplinger
  • 作成日時: 2026年08月17日 11:18:01(UTC)
  • マージ日時: 2026年08月17日 16:14:22(UTC)
  • ラベル: area-Build-mono

概要

Mono/WebAssembly SDK のタスク アセンブリを、TFM バージョン固有のフォルダ(tasks/net11.0、tasks/net472 など)から安定した version-independent フォルダ(.NET Core は net、.NET Framework は netframework)へ移行するもの。これにより、.NET Core TFM バージョンアップ時の調整作業が不要になります。対象は WasmAppBuilder、WasmBuildTasks、MonoAOTCompiler、MonoTargetsTasks、LibraryBuilder、MobileBuildTasks、AppleAppBuilder、AndroidAppBuilder、HelixTestTasks、WorkloadBuildTasks の 10 プロジェクト。

変更内容

  • タスク プロジェクトの OutputPath/IntermediateOutputPath オーバーライド: 各タスク .csproj で出力フォルダを安定した net/netframework に指定
  • SDK テンプレート ファイルの静的化: .in テンプレートファイルからテンプレート トークン(TFM)を除去し、パッケージ プロジェクト(.pkgproj)から GenerateFileFromTemplate ステップを削除
  • SDK props/targets の更新: タスク解決パスを新しい安定フォルダから参照するよう変更(Sdk.targets、MonoTargetsTasks.props、Sdk.props など)
  • ローカル ビルド props の更新: WasmApp.LocalBuild.props、AppleBuild.LocalBuild.props で新しいフォルダ構造に対応
  • ドキュメント更新: README ファイルのパス例を tasks/net/ に修正
  • 潜在的なバグ修正:
    • NetFrameworkToolCurrent が空の場合の誤判定対策(source-only ビルド時の multi-targeting プロジェクトで不正なパス追加が発生)
    • WasmBuildTasks.dll の実際のパッケージ場所とプロパティ参照の不整合を解決
    • 削除済みの TestExclusionListTasks への stale な参照を削除

パフォーマンスへの影響

影響なし

関連Issue

#123155、#130782(参照)

その他

  • WorkloadBuildTasks は TFM-selected consumption 用に pinned な net8.0 出力フォルダを別途保持
  • すべてのタスク プロジェクトが通常ビルド/source-only モード両方で正常にビルドされることを確認
  • すべての *TasksAssemblyPath プロパティが実在するファイルに解決されることを検証済み
  • GitHub Copilot の支援で作成されたプルリクエスト

#132400 Fix PAL QueryThreadCycleTime test format macros

  • 作成者: @Copilot
  • 作成日時: 2026年08月17日 11:10:34(UTC)
  • マージ日時: 2026年08月17日 22:49:45(UTC)
  • ラベル: area-Infrastructure

概要

PAL(Platform Abstraction Layer)の QueryThreadCycleTime テスト内のフォーマットマクロを修正します。テスト出力のフォーマット定義に関する問題を解決するための内部テストコード修正です。

変更内容

  • src/coreclr/pal/tests/palsuite/threading/QueryThreadCycleTime/test1/test1.cpp
    • テスト出力で使用されているフォーマットマクロの修正(5行追加、4行削除)

パフォーマンスへの影響

影響なし(テストコードの修正)

関連Issue

#132390

その他

  • PAL(Platform Abstraction Layer)の内部テストコード修正であり、ランタイムの本体機能には影響なし
  • テスト実行時の出力フォーマットに関する修正と考えられます

#132398 Use GC.AllocateUninitializedArray in File.ReadAllBytes[Async]

概要

File.ReadAllBytes と File.ReadAllBytesAsync が、読み込みループで即座に上書きされる不要なゼロ初期化コストを削減するため、GC.AllocateUninitializedArray<byte>(count) を使用するよう最適化されました。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/IO/File.cs: File.ReadAllBytes と File.InternalReadAllBytesAsync のバッファ割り当てを new byte[count] から GC.AllocateUninitializedArray<byte>(count) に変更
  • 読み込みループが常にバッファ全体を上書きするため、初期化されていないメモリが外部に露出することはなく、初期化されていないメモリが観測される可能性はありません

パフォーマンスへの影響

大規模ファイル読み込みで顕著な改善:

  • 10 MBの同期読み込み: 14%高速化 (~1.58秒 → ~1.36秒)
  • 10 MBの非同期読み込み: 24%高速化 (~1.82秒 → ~1.39秒)
  • 小規模ファイル (1KB~100KB): 誤差範囲内

GC.AllocateUninitializedArray は内部サイズ閾値以下のメモリはゼロ初期化にフォールバックするため、大規模読み込みのみが恩恵を受けます。

関連Issue

なし

その他

  • APIドキュメント注記: PR概要では GC.GetUninitializedArray と記載されていますが、実際のAPIは GC.AllocateUninitializedArray<T> です
  • 本PRはGitHub Copilotにより作成されました

#132376 Upgrade gh-aw compiler to v0.86.2

  • 作成者: @vitek-karas
  • 作成日時: 2026年08月16日 20:39:55(UTC)
  • マージ日時: 2026年08月17日 06:31:18(UTC)
  • ラベル: area-skills

概要

gh-awコンパイラとセットアップアクションをv0.85.4からv0.86.2にアップグレードしました。主な目的は、Copilot CLIツールキャッシュヒット時のPATH解決の問題を修正することです。v0.85.4では絶対パス/usr/local/bin/copilotが呼び出されていましたが、キャッシュ時には存在せずエラーが発生していました。v0.86.2ではPATHからcopilotを解決し、${RUNNER_TEMP}/gh-aw/bin/copilot下にステージングして実行するように改善されました。

変更内容

  • .github/aw/actions-lock.json: github/gh-aw-actions/setupをv0.86.2にアップグレード、SHA更新
  • 6つのエージェントワークフロー.lock.ymlファイル全て再生成:
    • holistic-review.lock.yml
    • closed-issue-reference-check.lock.yml
    • ci-failure-scan.lock.yml(CI外ループ失敗スキャナ)
    • ci-failure-scan-feedback.lock.yml
    • breaking-change-doc.lock.yml
    • ci-failure-fix.lock.yml

各ワークフローはgh-aw v0.86.2のコンパイル出力により再生成され、Copilot CLIのステージング処理、MCP gateway環境変数、プロンプト生成フローが更新されました。

パフォーマンスへの影響

影響なし

関連Issue

github/gh-aw#51843

その他

検証方法: gh aw compile --schedule-seed dotnet/runtime --no-emit --validate --zizmor --poutineで完全コンパイルを実行し、同一の生成ファイルであることを確認


#132367 Make the Nullable<T>.Value exception message actionable

概要

Nullable<T>.Value プロパティアクセス時に値がない場合にスローされる例外メッセージを改善しました。メッセージを「Nullable object must have a value.」から「Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.」に変更し、問題の根本原因(.HasValue チェック不足)と解決方法を明確に示すようにしました。

変更内容

  • src/libraries/System.Private.CoreLib/src/Resources/Strings.resx: InvalidOperation_NoValue リソース文字列の内容を更新
  • src/coreclr/nativeaot/System.Private.Reflection.Execution/src/Resources/Strings.resx: NativeAOT版の同一リソース文字列を更新
  • リソース名 (InvalidOperation_NoValue) は変更なし。Nullable<T>.Value ゲッターとそのシムでのみ使用されるため、他の呼び出しサイトへの影響なし

パフォーマンスへの影響

影響なし

関連Issue

#126560

その他

  • 例外メッセージテキストの変更は破壊的変更に該当しない(Framework Design Guidelines に従い、ユーザーは例外メッセージのテキストに依存しないべき)
  • リソース名は変更されていないため、SR.InvalidOperation_NoValue の呼び出しは継続して機能
  • Mono は CoreLib の .resx を共有するため、追加の変更は不要
  • 既存テストでメッセージテキストをアサートしているものはなし

#132363 [wasm] Bump chrome for testing - linux: 151.0.7922.137, windows: 152.0.7977.42, mac: 152.0.7977.42

概要

WebAssembly テスト環境で使用するChrome for Testingのバージョンを更新します。Linux環境を151.0.7922.137に、Windows/Mac環境を152.0.7977.42に引き上げるバージョン管理の更新です。

変更内容

  • eng/testing/BrowserVersions.props: Chrome for Testingのバージョン指定を更新
    • Linux: 151.0.7922.137
    • Windows: 152.0.7977.42
    • Mac: 152.0.7977.42

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

github-actions[bot]による自動更新のPull Requestです。


#132274 Fix DeflateEncoder.GetMaxCompressedLength conservative bound

概要

DeflateEncoderのGetMaxCompressedLengthメソッドが不正確な上限を返していた問題を修正しました。従来のcompressBound()ベースの実装は、デフォルト設定での圧縮を想定していましたが、.NETの実装は品質レベルやウィンドウサイズなどのカスタム設定をサポートしています。zlib-ngのdeflateBound()に由来するマネージド実装に置き換え、すべてのサポート対象の圧縮設定に対応する保守的な上限を計算するようにしました。

変更内容

  • DeflateEncoder.cs: GetMaxCompressedLengthの実装をzlib-ng由来の公式を使用した保守的な上限計算に置き換え。従来のcompressBound()ベースから、すべての圧縮設定に対応可能なマネージド実装へ変更。
  • ZLibEncoder.cs: メソッドコメントを更新し、戻り値が上限値であることを明記。
  • GZipEncoder.cs: gzipオーバーヘッドに関するコメントを修正。
  • EncoderDecoderTestBase.cs: モバイルプラットフォーム向けのスキップを削除し、RoundTrip_AllWindowLogsテストを再度有効化。

パフォーマンスへの影響

影響なし。本修正は圧縮の正確性を改善するもので、実際の圧縮パフォーマンスには影響しません。

関連Issue

#127563

その他

  • モバイルプラットフォーム(iOS、macCatalyst等)でのCompressメソッドがDestinationTooSmallを返す問題を解決します。
  • zlib-ng(一部プラットフォーム)とzlib(モバイルプラットフォーム)の両方に対応する保守的な上限を採用しているため、プラットフォーム間での互換性が向上します。
  • ただし、プラットフォーム側のzlib実装が変更された場合、ハードコードされた上限値が乖離するリスクは残存します。

#132259 JIT: fill two gaps in wasm codegen

概要

WebAssembly JIT バックエンドにおける2つのコード生成ギャップを修正しました。genReturnSuspendでretbuf戻り値とVector128戻り値の処理を追加し、genEmitHelperCallの管理スロー ヘルパーシグネチャテーブルを拡張して、未サポート組み込み関数と範囲外イミディエートパスから到達可能な全ヘルパーに対応させています。

変更内容

  • src/coreclr/jit/codegenwasm.cpp
    • genReturnSuspend: バッファ経由で戻る場合(wasm関数の戻り値がない)にダミー戻り値をプッシュしないよう修正
    • genReturnSuspend: Vector128<T>(v128)戻り値の処理を追加
    • genEmitHelperCall: 4つしかなかった引数なし管理スロー ヘルパーシグネチャを拡張し、既存のJITパスから到達可能な全ヘルパーに対応

パフォーマンスへの影響

影響なし(コード生成正確性の修正)

関連Issue

なし

その他

System.Private.Xmlをクロスジェニング中に、XmlTextReaderImpl.ParseTextAsyncがバッファ経由でValueTuple`4を戻す場合にこの問題が発見されました。この修正により、WebAssemblyプラットフォーム上での非同期メソッド実行時のコード生成エラーが防止されます。


#132168 Merge SIMD test sources into grouped runners

概要

SIMDテストを複数の個別プロジェクトから最適化/非最適化の統合ランナーアセンブリに統合。ソースglob経由でC#ソースを両ランナーに直接コンパイルし、テスト数を削減しつつ機能を保持。従来のコンパイル時TARGET_32BIT分岐をプラットフォーム条件付きVectorConvertテストに置き換えて、テスト構造を簡潔化。

変更内容

  • テストソース修正: SIMD C#テストファイル約60個に名前空間をラッピング(個別テスト型の分離)
  • プロジェクトファイル削除: *_r.csprojと*_ro.csproj(最適化/非最適化別プロジェクト)を廃止
  • ランナー統合: JIT.SIMD_r(実行時)とJIT.SIMD_ro(読み取り専用)の2つの統合ランナーに統合
  • 共通基盤: ベクターヘルパーを共通基底クラスで共有、優先度メタデータと依存ネイティブテストを保持
  • プラットフォーム条件: VectorConvertテストでplatform-conditionalな条件付きコンパイル導入

パフォーマンスへの影響

影響なし(テスト実行ロジックは変更なく、プロジェクト構成の整理のみ)

関連Issue

なし

その他

  • テスト検証: src\tests\build.cmd -Dir JIT\SIMD x64 Checked -Priority 1で両ランナー共に59/59テスト合格
  • 破壊的変更なし: 公開API無関係の内部テスト構造の整理

#132047 Enable Azure Pipelines reporter in paltests.proj

概要

CoreCLR PALTests Helix レグでAzure Pipelines テストレポーターを有効にし、ビルド分析機能を強化する変更です。EnableAzurePipelinesReporter MSBuildプロパティを設定して、テスト失敗の分析と可視化を改善します。

変更内容

  • src/coreclr/scripts/paltests.proj: EnableAzurePipelinesReporter MSBuildプロパティを有効化(+1行)

パフォーマンスへの影響

影響なし

関連Issue

#122345

その他

なし


#131771 Add typed self-counting WASM sections

  • 作成者: @jtschuster
  • 作成日時: 2026年08月03日 20:49:43(UTC)
  • マージ日時: 2026年08月17日 17:33:42(UTC)
  • ラベル: area-ReadyToRun

概要

WASM オブジェクトライター実装の第2段階として、型安全な自己カウント機能を持つWASMセクション機構を導入します。共有機能をSectionDataEmitterに統合し、imports、functions、globals、exports、elements用の型付きベクトルセクションを追加。エントリの追加時に自動的にセクションのカウントを追跡し、手動でのカウンター管理を排除します。

変更内容

  • WasmSection.cs: WasmExternallyCountedSectionと型付きセクション基盤クラスを追加。自動カウント追跡機構を実装
  • WasmSections.cs: imports、functions、globals、exports、elements用の型付きセクションクラスを追加
  • WebcilSection.cs: 基底クラスをWasmSectionからSectionDataEmitterに変更(WebCILは実際のWASMカスタムセクションではないため)
  • WasmObjectWriter.cs: 従来の手動カウンター管理とカウント前置き書き込みロジックを削除
  • WasmDataSection.cs、WasmDataSegment.cs、WasmNative.cs: セクション出力機構に対応

パフォーマンスへの影響

影響なし。既存の出力構造と動作は保持され、セクションカウントはエントリ書き込み成功に直結することで信頼性が向上します。

関連Issue

#131770(先行PR) #131772(後続PR) #131778(後続PR)

その他

  • 互換性: 内部実装の変更で、公開APIへの影響なし
  • 注意点: Copilotが2点の潜在的問題を指摘
    • GetOrCreateSectionの戻り値が未使用(副作用は発生)
    • Debug ビルドでのみアサート検証。Release ビルドでSetEntryCount漏れがあると暗黙的に無効なモジュール(ゼロカウント)が生成される可能性

#129853 fix shutdown tests

概要

Helix環境におけるシャットダウン機能テストの信頼性を向上させるため、プロセス起動とシャットダウン処理を強化します。主な改善点は、dotnetホストをPATHに依存せずアクティブなtesthost レイアウトから解決する、プロセス起動の再試行ロジック(3回、短い遅延)を追加する、未起動のProcessオブジェクト処理を堅牢化することです。

変更内容

  • SelfHostDeployer.cs: プロセス起動時の再試行ロジックを追加し、起動フローを再構成することで一時的な起動失敗への耐性を向上
  • ApplicationDeployer.cs: dotnetミューサーの解決ロジックを改善(Helix環境対応、PATH フォールバック付き)し、シャットダウン時に未起動Process インスタンスでの例外発生を回避
  • DotNetCommands.cs: dotnet解決ロジックの簡潔化(29行追加、56行削除)
  • ShutdownTests.cs: テストの追加・改善(23行追加)
  • RunnerTemplate.sh、tests.proj: テスト設定の微調整

パフォーマンスへの影響

影響なし

関連Issue

#129832

その他

本PR対象はテスト インフラストラクチャの改善であり、ランタイムやコンパイラの公開APIへの影響はありません。Helix環境の制約条件(PATH未設定、一時的なプロセス起動失敗)への耐性強化が主目的です。既存の起動シグナリングとエラー伝播セマンティクスは保持されます。


目次