注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #129100 [Wasm R2R] Report tracked GC vars as untracked in GC info
- #129089 Delete MapViewOfFile/test1 PAL test (uses removed FILE_FLAG_NO_BUFFERING)
- #129081 Remove dead prioritized-wait path from Unix WaitSubsystem
- #129075 [Wasm R2R] Bypass dynamic LDVIRTFTN helper
- #129073 [Wasm RyuJit] Zero init gc shadow stack slots in the prolog
- #128997 [WASI][Mono] Upgrade WASI SDK / wasmtime / WASIp2 to 0.2.8 and fix sockets for new wasi-libc
- #128788 Add async startup validation for Microsoft.Extensions.Options
- #128735 Skipping EDI in the runtime-async case as well
- #127695 Enhance collectible assembly handling in XmlSerializer
#129100 [Wasm R2R] Report tracked GC vars as untracked in GC info
- 作成者: @AndyAyersMS
- 作成日時: 2026年06月07日 17:08:02(UTC)
- マージ日時: 2026年06月07日 23:08:29(UTC)
- ラベル: area-CodeGen-coreclr
概要
WebAssembly JITにおいて、追跡されたGC変数(tracked GC vars)をGC情報では未追跡(untracked)として報告し、適切にゼロ初期化するようにしました。Wasm JITは追跡されたGCスロットのライフタイム情報を出力しないため(noTrackedGCSlotsがtrueの場合)、この修正により、(liveness)追跡されたGC変数の正確な処理を実現しています。
変更内容
- src/coreclr/jit/codegencommon.cpp: 8行追加。Wasm環境でのGC変数のゼロ初期化処理を改善
- src/coreclr/jit/gcencode.cpp: 6行追加、2行削除。GC情報エンコーディング時に、追跡されたGC変数を未追跡として適切に報告するロジックを調整
パフォーマンスへの影響
影響なし
関連Issue
その他
Wasm R2R(Read-ahead-of-time)コンパイラのGC追跡メカニズムに関連する修正で、ランタイムのGC処理の正確性を向上させます。
#129089 Delete MapViewOfFile/test1 PAL test (uses removed FILE_FLAG_NO_BUFFERING)
- 作成者: @Copilot
- 作成日時: 2026年06月07日 04:15:04(UTC)
- マージ日時: 2026年06月07日 06:36:42(UTC)
- ラベル: area-PAL-coreclr
概要
PAL(Platform Abstraction Layer)ヘッダから削除された FILE_FLAG_NO_BUFFERING を使用していた MapViewOfFile/test1 テストを削除しました。このテストはWindows以外のすべてのプラットフォームでコンパイル失敗を引き起こしていたため、テスト定義ファイルと共に削除されています。
変更内容
src/coreclr/pal/tests/palsuite/filemapping_memmgt/MapViewOfFile/test1/MapViewOfFile.cppを削除(244行)CMakeLists.txt、compilableTests.txt、paltestlist.txt、wasm/index.htmlからテストエントリを削除
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このPRはテスト削除のみで、ランタイムやライブラリの機能的な変更は含まれていません。削除の理由は FILE_FLAG_NO_BUFFERING がPALヘッダから削除されたことに伴う、クロスプラットフォーム互換性の問題解決です。
#129081 Remove dead prioritized-wait path from Unix WaitSubsystem
- 作成者: @Copilot
- 作成日時: 2026年06月06日 21:00:58(UTC)
- マージ日時: 2026年06月07日 02:44:31(UTC)
- ラベル: area-System.Threading
概要
Unix WaitSubsystem から未使用の優先待機(prioritized wait)パスを削除するコード削減変更です。内部APIから prioritize パラメータを完全に除去し、FIFO(先入れ先出し)の公平な待機方式のみをサポートするように統一しました。公開APIには影響なし。
// Before
public void RegisterWait(int waitedCount, bool prioritize, bool isWaitForAll)
{
if (prioritize)
waitedListNodes[i].RegisterPrioritizedWait(waitedObjects[i]!);
else
waitedListNodes[i].RegisterWait(waitedObjects[i]!);
}
// After
public void RegisterWait(int waitedCount, bool isWaitForAll)
{
waitedListNodes[i].RegisterWait(waitedObjects[i]!);
}
変更内容
- WaitSubsystem.Unix.cs:
Wait(...)とSignalAndWait(...)メソッドからprioritizeパラメータを削除、内部呼び出し時のprioritize: false指定を削除 - WaitSubsystem.HandleManager.Unix.cs:
IWaitableObjectインターフェースのWait_Locked(...)からprioritizeを除去、Wait()拡張メソッドを更新 - WaitSubsystem.ThreadWaitInfo.Unix.cs:
RegisterWait(...)メソッドからprioritizeパラメータを削除、優先待機分岐(RegisterPrioritizedWait呼び出し)を完全削除 - WaitSubsystem.WaitableObject.Unix.cs:
Wait_Locked(...)と静的Wait(...)からprioritizeを削除 - NamedMutex.Unix.cs:
Wait_Lockedメソッド署名を新インターフェースに合わせて更新
パフォーマンスへの影響
影響なし。変更前後で動作は同じ(すべての呼び出し箇所が既に prioritize: false を使用していたため、実質的に機能していない死コードの削除)。ただし条件分岐を削除することでわずかなコード最適化が期待できます。
関連Issue
なし
その他
- この変更は内部実装の整理であり、公開APIには影響しません
- Copilot により自動生成されたPull Requestです
- すべての
prioritize関連の死コードと LIFO 待機パスが削除され、コードの複雑性が削減されます
#129075 [Wasm R2R] Bypass dynamic LDVIRTFTN helper
- 作成者: @AndyAyersMS
- 作成日時: 2026年06月06日 17:15:56(UTC)
- マージ日時: 2026年06月07日 18:24:17(UTC)
- ラベル: area-CodeGen-coreclr
概要
Wasm R2R コンパイルで仮想関数ポインタ検索(ldvirtftn)の処理を修正しました。Wasm は CORINFO_HELP_READYTORUN_VIRTUAL_FUNC_PTR ヘルパーに対応していないため、ReadyToRun 固有の最適化パスをバイパスし、代わりに標準的なランタイム CORINFO_HELP_VIRTUAL_FUNC_PTR ヘルパーを使用するようにルーティングします。
変更内容
- src/coreclr/jit/importer.cpp:
impImportLdvirtftn内の ReadyToRunIsAot()高速パスを!TARGET_WASMで条件付けし、Wasm ターゲット時には標準的なランタイムヘルパーを使用するように修正(+5/-2)
パフォーマンスへの影響
影響なし。Wasm では元々 DelayLoad_Helper_Obj スタブが未実装のため、この変更により正しいコードパスへの誘導が行われます。
関連Issue
なし
その他
この変更は Wasm AOT/R2R コンパイルの機能性を確保するための修正であり、ランタイムの内部実装領域(JIT インポーター)に限定されています。
#129073 [Wasm RyuJit] Zero init gc shadow stack slots in the prolog
- 作成者: @AndyAyersMS
- 作成日時: 2026年06月06日 14:42:27(UTC)
- マージ日時: 2026年06月07日 13:56:31(UTC)
- ラベル: area-CodeGen-coreclr
概要
WebAssembly上でのRyuJIT実行時にGC参照スロットをプロローグで明示的にゼロ初期化するためのPRです。単一のmemory.fill命令を使用して、シャドウスタック上のGC参照スロットをゼロ初期化します。
変更内容
- src/coreclr/jit/codegenwasm.cpp: WASM固有の
CodeGen::genZeroInitFrame実装を追加し、memory.fillを使用したプロローグフレームゼロ初期化を実装。ブロック初期化ヘルパーを到達不可能としてマーク。 - src/coreclr/jit/codegencommon.cpp: WASMでゼロ初期化が必要な場合は常にブロック初期化を使用するよう
genCheckUseBlockInit()を更新。WASMプロローグでlvMustInitローカル変数からゼロ初期化バイト範囲を計算するロジックをWASM固有の実装に変更(特定のWASMフレームヘッダーローカルはスキップ)。 - src/coreclr/jit/compiler.hpp: WASM向けの新規関数シグネチャを追加。
パフォーマンスへの影響
単一のmemory.fill命令への統一により、複数の初期化操作と比較してWASM実行時のプロローグ生成がより効率的になることが期待されます。具体的なベンチマーク数値は提供されていません。
関連Issue
なし
その他
この変更はコンパイラのバックエンド実装であり、パブリックAPIへの影響はありません。WASMランタイムでのGCセーフティ確保に関連した内部実装の改善です。
#128997 [WASI][Mono] Upgrade WASI SDK / wasmtime / WASIp2 to 0.2.8 and fix sockets for new wasi-libc
- 作成者: @pavelsavara
- 作成日時: 2026年06月04日 16:52:54(UTC)
- マージ日時: 2026年06月07日 08:19:06(UTC)
- ラベル: arch-wasm area-Build-mono os-wasi
概要
Mono WASI ツールチェーンを WASI SDK 33.0、wasmtime 45.0.0、WASIp2 0.2.8 にアップグレードし、wasi-libc の新しいディスクリプタテーブル設計(タグ付き合併からファットポインタ+vtable 設計、遅延 pollable 生成)に対応する変更です。System.Net.Sockets のソケットイベントループを更新し、廃止された Node.js ラン スクリプトを削除し、WASI ハンドラが非対応のテストシナリオをスキップします。
変更内容
ツールチェーン / ビルドインフラ
- WASI SDK バージョンを 25.0 から 33.0 へ、wasmtime を 27.0.0 から 45.0.0 へ、wit-bindgen を 0.32.0 から 0.57.1 へ更新
- バージョンチェックを
StartsWithマッチングに変更(パッチリリース互換対応) - Node.js ベースの
CMAKE_CROSSCOMPILING_EMULATORを削除、廃止された-lwasi-emulated-pthreadリンクフラグを削除
ランスクリプトクリーンアップ
node.mjs/run-node.sh生成ターゲットを削除(wasmtime 経由の実行に統一)
WASIp2 バインディング再生成(0.2.0 → 0.2.8)
- wit-bindgen 0.57.1 による命名規則変更に対応(
get()→Get()、DNS_TIMEOUT→DnsTimeoutなど) System.Net.HttpとSystem.Private.CoreLibの生成コードを更新
ソケット実装の更新
SystemNative_GetWasiSocketDescriptor: ディスクリプタデータポインタとgetsockopt(SO_TYPE)で判定したソケットタイプを返却- 新規
SystemNative_WasiSubscribeSocketPollable: wasi-libc のsubscribeインポートを呼び出し、遅延 pollable を具体化 SocketPal.Wasi.cs: wasi-libc の tcp/udp ソケット構造体レイアウトを更新(フィールド再配置、型変更)SocketAsyncEngine.Wasi.cs:BeforePollHookでネイティブのsocketTypeを判定し、新規EnsurePollableヘルパーで遅延サブスクライブ
テスト調整
- System.Net.Http テスト:
[SkipOnPlatform(TestPlatforms.Wasi)]で認証、プロキシ、証明書検証、同期送信、バージョン選択などの非対応シナリオをスキップ - System.Net.Sockets テスト: Socket.Blocking、DualMode シナリオをスキップ
パフォーマンスへの影響
影響なし。互換性維持および新しいツールチェーン対応が主眼で、パフォーマンス関連の変更は含まれていません。
関連Issue
なし
その他
WASIp2 インターフェースの大幅なバージョン更新に伴い、生成コード(System.Net.Http: ~6600行追加、System.Private.CoreLib: ~200行追加)が増加していますが、これは自動生成による内部実装の変更です。破
#128788 Add async startup validation for Microsoft.Extensions.Options
- 作成者: @ViveliDuCh
- 作成日時: 2026年05月29日 23:53:32(UTC)
- マージ日時: 2026年06月07日 07:11:58(UTC)
- ラベル: area-System.ComponentModel.DataAnnotations
概要
Microsoft.Extensions.Optionsに非同期スタートアップ検証機能を追加します。新しいIAsyncValidateOptions<T>インターフェースとIAsyncStartupValidatorにより、Host.StartAsync()実行時に非同期検証パイプラインが動作します。既存の同期パス(IOptions<T>.Value、OptionsFactory.Create())は完全に同期のままであり、既存の動作に影響を与えません。
// 非同期検証の例
services.Configure<MyOptions>(configuration)
.Validate(async (options, ct) =>
{
var isValid = await ValidateAsync(options);
return isValid;
});
変更内容
System.ComponentModel.Annotations(DataAnnotations):
AsyncValidationAttribute— 非同期検証属性の新しい基底クラスIAsyncValidatableObject— 非同期検証可能オブジェクトの新規インターフェースValidator— 8個の新しい非同期メソッド追加(TryValidateObjectAsync等)
Microsoft.Extensions.Options:
IAsyncValidateOptions<T>—Task<ValidateOptionsResult>を返す非同期検証インターフェースIAsyncStartupValidator— ホストレベルの非同期スタートアップ検証インターフェースAsyncValidateOptions<TOptions>(0~5依存関係版) — ラムダベースの非同期検証クラスOptionsBuilder<T>に非同期Validateオーバーロード追加(0~5依存関係)StartupValidator—IAsyncStartupValidatorも実装(同期検証後に非同期検証を実行)ValidateOnStart()— 非同期検証エントリ登録に対応
Microsoft.Extensions.Options.DataAnnotations:
DataAnnotationValidateOptionsAsync<T>—Validator.TryValidateObjectAsyncを呼び出し、[ValidateObjectMembers]/[ValidateEnumeratedItems]を再帰的に処理ValidateDataAnnotationsAsync()拡張メソッド追加
Microsoft.Extensions.Hosting:
Host.StartAsync()—IAsyncStartupValidatorを優先して使用、利用不可時はIStartupValidatorにフォールバック
パフォーマンスへの影響
影響なし。非同期検証はHost.StartAsync()実行時にのみ別ステップで実行されます。同期パス(IOptions<T>.Value、OptionsFactory.Create())は影響を受けません。遅延検証と実行時リロードは非同期検証に影響されません。
関連Issue
#128100 フォローアップ: #128656 ソースジェネレータサポート追跡: #128882
その他
- スコープ外:
IAsyncOptions<T>、IAsyncOptionsSnapshot<T>、IAsyncOptionsMonitor<T>の実装は見送り(IOptions<T>.ValueがC#プロパティでありOptionsCacheがLazy<T>を使用するため) - スコープ外:
IOptionsMonitor<T>での実行時非同期再検証(OnChangeコールバックは同期のまま) - スコープ外:
[OptionsValidator]ソースジェ
#128735 Skipping EDI in the runtime-async case as well
- 作成者: @rcj1
- 作成日時: 2026年05月29日 00:22:06(UTC)
- マージ日時: 2026年06月07日 22:35:41(UTC)
- ラベル: area-System.Diagnostics
概要
スタックトレースの整形処理において、runtime-async メソッドに対して EDI(Exception Dispatcher Indicator)境界を非表示にする変更です。コンパイラ生成の非同期ステートマシンと同様に、runtime-async メソッドでも --- End of stack trace from previous location --- という境界表示をスキップし、スタックトレースの可読性を向上させます。
変更内容
- src/libraries/System.Private.CoreLib/src/System/Diagnostics/StackTrace.cs:
StackTrace.ToStringメソッド内の EDI 境界スキップ条件を拡張し、MethodImplAttributes.Asyncフラグを持つ runtime-async フレームもスキップ対象に追加(2行変更) - src/libraries/System.Diagnostics.StackTrace/tests/StackTraceTests.cs: runtime-async フレームに対する EDI 境界非表示動作を検証するテストケースを追加(32行追加)
パフォーマンスへの影響
影響なし
関連Issue
その他
本変更は .NET 11 で runtime-async 機能の導入に伴い、スタックトレース出力が .NET 10 との互換性を保つための修正です。公開API(System.Diagnostics.StackTrace)の動作変更に該当します。
#127695 Enhance collectible assembly handling in XmlSerializer
- 作成者: @StephenMolloy
- 作成日時: 2026年05月04日 05:59:35(UTC)
- マージ日時: 2026年06月07日 15:50:07(UTC)
- ラベル: area-Serialization
概要
XmlSerializerにおけるcollectible型の処理を改善するPRです。特にジェネリックコンテナ(List<T>や配列)に含まれるcollectible型に対して、適切なAssemblyLoadContext (ALC) にシリアライザーキャッシュを関連付けることで、メモリリークを防ぎcollectible アセンブリの正常なアンロードを実現します。
変更内容
- Compilation.cs:
FindCollectibleAssemblyヘルパーメソッドを追加。ジェネリック引数と要素型を再帰的に走査して、対象型に関連付けられたcollectible アセンブリを特定します。シリアライザー生成時やキャッシュ参照時に、t.Assemblyだけに依存せず、このメソッドで見つけたcollectible アセンブリを使用するよう更新されました。 - ContextAwareTables.cs: ロジック調整により、non-collectible型かつnon-collectible ALCの場合のみデフォルトテーブルを使用し、collectible型またはcollectible ALCの場合は
ConditionalWeakTableを使用することでリソース管理を改善します。 - XmlSerializerTests.cs:
List<T>と配列内のcollectible型が正常に処理され、メモリリークなくアンロード可能であることを検証する新テストXml_CollectibleTypeInGenericContainerと関連ヘルパーメソッドを追加。 - CodeGenerator.cs: 新しいアサーション機能をサポートするため
using System.Diagnostics;ディレクティブを追加。
パフォーマンスへの影響
影響なし
関連Issue
その他
- 破壊的変更なし。内部実装の改善です。
- collectible アセンブリを使用するシナリオ(動的なAssemblyLoadContextの作成と破棄)での信頼性が向上します。