Pull Request on 2026年06月06日

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

注意点

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



#129063 Delete FILE_FLAG_NO_BUFFERING from win32 PAL

概要

Windows PAL(Platform Abstraction Layer)から未使用で移植性がないFILE_FLAG_NO_BUFFERINGフラグを削除します。このフラグはファイルI/O操作で使用されていないため、コードベースから完全に削除されます。

変更内容

  • pal.h: FILE_FLAG_NO_BUFFERINGマクロ定義を削除
  • config.h.in: 関連する設定定義を削除
  • configure.cmake: ビルド設定から該当部分を削除
  • file.cpp: FILE_FLAG_NO_BUFFERINGに関連する実装コード(38行)を削除
  • CreateFileA/CreateFileW テスト: テストケースからFILE_FLAG_NO_BUFFERINGの使用箇所を削除し、テストロジックを更新

パフォーマンスへの影響

影響なし

関連Issue

#124911

その他

この変更は内部実装(PAL層)への変更であり、公開APIへの影響はありません。Windows固有の非移植的なフラグを削除することで、コードの保守性を向上させます。


#129060 [Wasm / RyuJit]: don't mark CORINFO_HELP_GETREFANY pure on wasm

概要

Wasm ABIにおいて、TypedReferenceが暗黙的な参照渡し(implicit byref)として扱われるため、CORINFO_HELP_GETREFANYヘルパーをpure関数として標識しないよう修正されました。Windows x64と同じ制限を適用することで、JITの最適化時に副作用を正しく認識させることを目的としています。

変更内容

  • src/coreclr/jit/utils.cpp: HelperCallProperties::init()内のCORINFO_HELP_GETREFANYのpureフラグ設定をWasmターゲットで無効化。Windows x64と同様に暗黙的byref渡しのため純粋関数と見なさないよう制限を拡張。

パフォーマンスへの影響

影響なし(最適化制限の追加により、Wasmターゲットでの不正な最適化を防止)

関連Issue

#128234

その他

  • 影響を受けるテストケース: JIT/Methodical/refany/array2_{d,r}およびarray3_{d,r}
  • Wasm ABIにおけるTypedReferenceの暗黙的参照渡しという言語仕様に基づいた修正

#129057 Add OpenBSD support in CPalThread

概要

OpenBSD環境でのCPalThread::GetStackBase()とCPalThread::GetStackLimit()メソッドのサポートを追加します。OpenBSDはpthread_attr_get_npやpthread_getattr_npを提供していないため、代わりにpthread_stackseg_np関数を使用してスタック属性を取得します。

変更内容

  • src/coreclr/pal/src/thread/thread.cpp: OpenBSD環境向けのスタック属性取得ロジックを追加。pthread_stackseg_np関数を使用してstack_t経由でスタック情報を取得する処理をTARGET_OPENBSD条件コンパイルブロック内に実装(+13/-1)

パフォーマンスへの影響

影響なし

関連Issue

#124911

その他

本PRは.NETのOpenBSDポート化への段階的な対応の一環です。作成者は一括でのOpenBSD対応を推進する意向がありますが、現在対応が停滞しているため、この部分的なサポート追加を先行実装する形となっています。


#129053 Fix composite R2R token corruption for devirtualized async-variant callees

  • 作成者: @jtschuster
  • 作成日時: 2026年06月05日 20:39:34(UTC)
  • マージ日時: 2026年06月06日 02:19:48(UTC)
  • ラベル: area-ReadyToRun

概要

Composite ReadyToRunにおいて、ランタイム非同期な仮想メソッドへのdevirtualized呼び出しをawaitするランタイム非同期呼び出し元が、コンパイラ生成の非同期thunkへのトークン解決時にIndexOutOfRangeExceptionまたはトークン破損を引き起こす問題を修正します。devirtualized対象のケースでGetPrimaryMethodDefinition()をGetTypicalMethodDefinition()の前に呼び出すことで、基本となるEcmaMethodとそのModuleを取得し、正しいトークンパスを使用します。

変更内容

  • src/coreclr/tools/aot/ILCompiler.ReadyToRun/JitInterface/CorInfoImpl.ReadyToRun.cs: _HandleToModuleToken()内でdevirtualized対象の処理にて、トークン解決前にGetPrimaryMethodDesc()を挿入してシンセティックメソッドラッパーをアンラップし、正しいmoduledefトークンパスを使用するように修正(+5/-1)
  • ILCompiler.ReadyToRun.Tests: Composite環境での回帰テスト(2アセンブリ)を追加(R2RTestSuites.cs、AsyncDevirtNonAsyncCalleeLib.cs、CompositeAsyncDevirtNonAsyncCalleeMain.cs)
  • src/tests/async: 単一アセンブリ環境での回帰テスト(RuntimeAsyncMethodGeneration(false)使用)を追加(devirtualize-inherited-nonasync)

パフォーマンスへの影響

影響なし

関連Issue

#128413

その他

修正はAOT(Ahead-of-Time)コンパイラのReadyToRun機能に関するもので、公開APIではなく内部実装の修正です。本修正がないとcrossgen2がAbortする問題が発生します。Composite環境と単一アセンブリ環境の両方をカバーする包括的な回帰テストが追加されています。


#129025 JIT/wasm: place SCC dispatcher inside Wasm try region when needed

概要

WebAssembly JITコンパイラにおいて、SCC(Strongly Connected Component)ディスパッチャーのWasm try regionへの配置ロジックを改善しました。SCC headerがWasm try entryである場合、ディスパッチャーをtry region内に配置することで、EH/try-region entry rulesを適切に遵守するようにしました。

変更内容

  • src/coreclr/jit/fgwasm.cpp: SCC dispatcher配置ロジックを修正
    • SCC headerがWasm try entryの場合、ディスパッチャーブロックをそのtry region内に作成し、try headerの近くに配置
    • ディスパッチャーがtry内に配置される場合、インバウンドフローをWasm try headerを通るようにルーティング
    • サポートされていないSCC header try-nesting関係(sibling/deeper-nested try)に対してNYI_WASMガードを追加
    • デバッグダンプの改善:ディスパッチャーが選択したEH region(try/handler/method)の表示を追加

パフォーマンスへの影響

影響なし

関連Issue

#128234

その他

本変更は、Wasm環境におけるirreducible-loopの変換処理の正確性を向上させるものです。すべてのSCC header try-nesting パターンに対応しているわけではなく、現在サポートされていない複雑なケースはNYI_WASM(Not Yet Implemented for Wasm)でフラグされます。


#129007 Enable must-throw for unsupported intrinsics under optimizations

概要

最適化下での非サポート組み込み関数(intrinsics)に対して must-throw 最適化を有効にします。これにより、例外スロー処理のコールドブロックが統合され、コードサイズの回帰を削減します。最適化されたコードではスタックトレース情報の喪失が既に可能であるため、各スロー処理が一意のカレー関数を持つ必要がなくなります。

変更内容

  • src/coreclr/jit/hwintrinsic.cpp: 非サポート組み込み関数の例外生成ロジックを変更。スロー処理のコールドブロックマージを可能にする実装(+32/-7行)
  • src/coreclr/jit/hwintrinsic.h: must-throw 最適化関連の関数/定義を追加(+2/-1行)
  • src/coreclr/jit/importercalls.cpp: インポーター呼び出し処理で同様のスロー最適化を適用(+58/-15行)

パフォーマンスへの影響

  • コードサイズ削減: 複数の例外スロー処理を統合することでコールドブロックのサイズ回帰を軽減
  • メモリ効率向上: 重複する must-throw ブロックが統合されることによるメモリ削減
  • 実行速度への直接的な影響は最小限(最適化されたコード経路では例外スロー処理は稀)

関連Issue

#128513

その他

  • JIT(Just-In-Time)コンパイラの内部実装変更であり、公開APIへの影響なし
  • この変更は最適化レベルが有効な場合のみに適用されます

#128975 Remove process object from PAL

概要

PAL(Platform Abstraction Layer)の process object 実装を削除し、プロセスハンドルセマンティクスを簡略化するリファクタリングです。現在のプロセスのみをサポートする pseudo handle に統一し、不要なプロセスオブジェクトとセッションID追跡機能を廃止します。

変更内容

  • process.cpp: プロセスオブジェクトバッキングデータの削除、プロセス終了パス(PROCEndProcess)を現在のプロセスのみに限定、セッションID API の削除
  • pal.cpp: 初期化時の gSID 初期化処理(getsid() 呼び出し)の削除
  • procobj.hpp: プロセスオブジェクト型宣言と CProcProcessLocalData 型定義の完全削除
  • process.h: gSID と PROCGetProcessIDFromHandle 宣言の削除、コメント更新
  • palinternal.h: GetCurrentSessionId 宣言の削除
  • corunix.hpp: PAL オブジェクト型列挙から otiProcess の削除
  • handleapi.cpp: プロセスハンドル検証の削除、pseudo handle の複製動作を変更

パフォーマンスへの影響

  • PAL 初期化時に getsid() システムコール実行が削除されるため、初期化時間がわずかに改善
  • プロセスハンドル操作の複雑性低下により、検証コストが軽減

関連Issue

なし

その他

  • 互換性への影響: Unix PAL レベルの内部実装の変更で、Windows 互換性は維持。ただし、プロセスオブジェクト経由でのハンドル操作が不可能になります(現実装では使用されていないため問題なし)
  • コード削除: 合計 276 行のコード削除により、コードベースが簡潔化

#127318 Support open generics in polymorphic serialization in System.Text.Json

  • 作成者: @Copilot
  • 作成日時: 2026年04月23日 11:43:04(UTC)
  • マージ日時: 2026年06月06日 12:11:06(UTC)
  • ラベル: area-System.Text.Json

概要

System.Text.Json の多相シリアライゼーションにおいて、開いた(未検証の)ジェネリック型を [JsonDerivedType] 属性で指定し、実行時に閉じた型に解決する機能を追加しました。リフレクションベースのリゾルバーとソースジェネレーターの両方で、開いたジェネリック派生型を閉じた派生型に統合して登録します。これにより、ジェネリック階層での多相シリアライゼーション対応が改善されます。

サンプルコード:

[JsonDerivedType(typeof(Derived<>), "d")]
public class Base<T> { ... }
public class Derived<T> : Base<T> { ... }

// Base<int>     → Derived<int>
// Base<string>  → Derived<string>

変更内容

  • RoslynExtensions.cs: 開いたジェネリック型の統合アルゴリズムを実装(416行追加)
  • DefaultJsonTypeInfoResolver.Helpers.cs: リフレクションパスでの開いたジェネリック派生型解決を追加(227行追加)
  • JsonSourceGenerator.Parser.cs: ソースジェネレーション時の開いたジェネリック解決とSYSLIB1229診断を追加(220行追加)
  • JsonSourceGenerator.Emitter.cs: 解決した開いたジェネリック派生型用の JsonPolymorphismOptions 生成コードを追加
  • PolymorphicTests.CustomTypeHierarchies.cs: 6つのサポートパターンと6つの非サポートパターンの包括的なテスト追加(890行追加)
  • Strings.resx: 実行時エラーメッセージを追加
  • xlf ファイル: 新診断メッセージの多言語ローカライズを追加

パフォーマンスへの影響

影響なし

関連Issue

#125449

その他

  • 新診断: SYSLIB1229 が発行され、サポートされていないパターン(型パラメータの不一致、あいまいなマッチ、制約違反など)で警告を出します。この診断は #pragma で抑止可能です。
  • サポートパターン: 同一バインディング、パラメーター並び替え、部分的な具体化、ネストされた型引数、インターフェースベース、外側の型からのパラメータを含む 6 パターンに対応。
  • 公開API変更: なし(内部実装とジェネレーター出力のみ)
  • 破壊的変更: なし

#125386 Remove GetCommandLineW from PAL

概要

PAL(Platform Abstraction Layer)からGetCommandLineWを削除し、Unix環境でのコマンドライン取得の実装を簡素化しました。CoreCLRの診断フォールバックはminipal_getexepath()を使用して実行可能ファイルパスベースのアプローチに変更されています。

変更内容

  • PAL実装の削除: Unix PALのGetCommandLineW、コマンドライン格納・クリーンアップ処理を削除(src/coreclr/pal/src/thread/process.cpp、src/coreclr/pal/src/init/pal.cpp)
  • PALヘッダー更新: PAL_InitializeCoreCLRシグネチャを更新し、GetCommandLineW宣言を削除(src/coreclr/pal/inc/pal.h)
  • CoreCLR診断ロジック更新: Unix環境でのコマンドラインフォールバック実装を変更、診断コマンドラインが"近似値"であることを明記(src/coreclr/vm/ceeload.cpp、src/coreclr/vm/eventing/eventpipe/ep-rt-coreclr.h)
  • PALSuiteテスト削除: GetCommandLineWテストスイートの削除(テストソース、ビルド設定、テストリスト)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はPAL抽象化層の簡潔化と、Unix環境でのコマンドライン処理の実装削減を目的としています。GetCommandLineWはWindows固有のAPIであり、Unixでの実装が削除されることで、プラットフォーム依存コードの負担が軽減されます。


目次