注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #129063 Delete FILE_FLAG_NO_BUFFERING from win32 PAL
- #129060 [Wasm / RyuJit]: don't mark CORINFO_HELP_GETREFANY pure on wasm
- #129057 Add OpenBSD support in CPalThread
- #129053 Fix composite R2R token corruption for devirtualized async-variant callees
- #129025 JIT/wasm: place SCC dispatcher inside Wasm try region when needed
- #129007 Enable must-throw for unsupported intrinsics under optimizations
- #128975 Remove process object from PAL
- #127318 Support open generics in polymorphic serialization in System.Text.Json
- #125386 Remove GetCommandLineW from PAL
#129063 Delete FILE_FLAG_NO_BUFFERING from win32 PAL
- 作成者: @am11
- 作成日時: 2026年06月06日 01:17:45(UTC)
- マージ日時: 2026年06月06日 04:18:07(UTC)
- ラベル: area-PAL-coreclr community-contribution
概要
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
その他
この変更は内部実装(PAL層)への変更であり、公開APIへの影響はありません。Windows固有の非移植的なフラグを削除することで、コードの保守性を向上させます。
#129060 [Wasm / RyuJit]: don't mark CORINFO_HELP_GETREFANY pure on wasm
- 作成者: @AndyAyersMS
- 作成日時: 2026年06月05日 23:23:54(UTC)
- マージ日時: 2026年06月06日 14:22:43(UTC)
- ラベル: area-CodeGen-coreclr
概要
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
その他
- 影響を受けるテストケース:
JIT/Methodical/refany/array2_{d,r}およびarray3_{d,r} - Wasm ABIにおける
TypedReferenceの暗黙的参照渡しという言語仕様に基づいた修正
#129057 Add OpenBSD support in CPalThread
- 作成者: @sethjackson
- 作成日時: 2026年06月05日 21:57:41(UTC)
- マージ日時: 2026年06月06日 13:45:19(UTC)
- ラベル: area-System.Threading community-contribution os-openbsd
概要
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
その他
本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
その他
修正はAOT(Ahead-of-Time)コンパイラのReadyToRun機能に関するもので、公開APIではなく内部実装の修正です。本修正がないとcrossgen2がAbortする問題が発生します。Composite環境と単一アセンブリ環境の両方をカバーする包括的な回帰テストが追加されています。
#129025 JIT/wasm: place SCC dispatcher inside Wasm try region when needed
- 作成者: @AndyAyersMS
- 作成日時: 2026年06月05日 00:23:18(UTC)
- マージ日時: 2026年06月06日 14:29:52(UTC)
- ラベル: area-CodeGen-coreclr
概要
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
その他
本変更は、Wasm環境におけるirreducible-loopの変換処理の正確性を向上させるものです。すべてのSCC header try-nesting パターンに対応しているわけではなく、現在サポートされていない複雑なケースはNYI_WASM(Not Yet Implemented for Wasm)でフラグされます。
#129007 Enable must-throw for unsupported intrinsics under optimizations
- 作成者: @tannergooding
- 作成日時: 2026年06月04日 18:55:46(UTC)
- マージ日時: 2026年06月06日 04:52:12(UTC)
- ラベル: area-CodeGen-coreclr
概要
最適化下での非サポート組み込み関数(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
その他
- JIT(Just-In-Time)コンパイラの内部実装変更であり、公開APIへの影響なし
- この変更は最適化レベルが有効な場合のみに適用されます
#128975 Remove process object from PAL
- 作成者: @huoyaoyuan
- 作成日時: 2026年06月04日 07:28:11(UTC)
- マージ日時: 2026年06月06日 13:50:24(UTC)
- ラベル: area-PAL-coreclr community-contribution
概要
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
その他
- 新診断: SYSLIB1229 が発行され、サポートされていないパターン(型パラメータの不一致、あいまいなマッチ、制約違反など)で警告を出します。この診断は
#pragmaで抑止可能です。 - サポートパターン: 同一バインディング、パラメーター並び替え、部分的な具体化、ネストされた型引数、インターフェースベース、外側の型からのパラメータを含む 6 パターンに対応。
- 公開API変更: なし(内部実装とジェネレーター出力のみ)
- 破壊的変更: なし
#125386 Remove GetCommandLineW from PAL
- 作成者: @huoyaoyuan
- 作成日時: 2026年03月10日 14:04:47(UTC)
- マージ日時: 2026年06月06日 18:24:44(UTC)
- ラベル: EventPipe area-PAL-coreclr community-contribution
概要
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での実装が削除されることで、プラットフォーム依存コードの負担が軽減されます。