注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #136172 [clr-interp] Preserve byref-like locals when an await does not suspend
- #136170 [release/8.0] Skip file-backed named mutex tests on Mono
- #136168 Reuse handle-based unwind lookup for WebAssembly
- #136159 ILVerify: fix crashes on non-array element operands and on ldelem.ref of null
- #136149 JIT: Preserve volatile static reads when folding readonly fields
- #136147 Cleanup unused cmake configs
- #136139 Fix AcceptWithDefaultValidation_CertificateContextTrust_HonorsChainPolicy test failures
- #136135 ILVerification.Tests: reject unknown error names
- #136131 coreclr: default EnableWriteXorExecute to 0 on OpenHarmony
- #136129 Add native AOT to DefaultCoreClrSubsets on WASI
- #136128 Home DIM instantiating thunks on System.Object
- #136125 Reject NativeAOT closed static delegates over non-reference first parameters
- #136124 [release/8.0] Update branding to 8.0.34
- #136123 [release/9.0] Update branding to 9.0.23
- #136120 Correct x86 instruction metadata
- #136119 Guard EncryptedXml_DecryptDocument_MaxCount_Default with RemoteExecutor.IsSupported
- #136116 Require threads for ControlledExecutionTests.CancelInTryAndExitCatchNormally
- #136114 [CI] Report compiler cache statistics after runtime test builds
- #136112 Add
ilverify --list-errorsto list the names--ignore-errormatches - #136109 [Bugfix] Clear removed elements in ImmutableArray<T>.Builder
- #136089 [cDAC] Fix incorrect filtering of stack-interior references
- #136072 Restart HttpListener authentication when protection policy changes
- #136063 Make whole-list ImmutableList<T>.Reverse() O(n)
- #136050 [wasm][R2R] Fix calls through MethodImpl-redirected slots on portable entrypoints
- #136040 JIT: inline box Nullable<T> in ReadyToRun
- #136033 ilverify: respect IgnoresAccessChecksToAttribute
- #136021 JIT: keep
lea esp, [ebp]in x86 epilogs - #136006 [wasi] Set RUNTIME_IDENTIFIER and ENTRY_ASSEMBLY_NAME in wasihost
- #135991 [wasm] Fix single-register struct call result stores (narrow stores, GC write barrier)
- #135983 [browser] Make SystemJS_GetLocaleInfo argument order consistent
- #135968 [release/11.0] cDAC: skip empty assembly-list slots in Loader_1.GetModuleHandles
- #135956 Simplify frozen object heap allocation
- #135952 Resolve WASI SDK for NativeAOT runtime test builds
- #135893 JIT: Gate single-edge root profile trust on hotness or speed preference
- #135863 corehost: singlefilehost fixes for OpenHarmony
- #135853 JIT: spill local refs for COMMA-wrapped local stores in impAppendStmt
- #135837 JIT: ignore finally-entry backedges when fixing continuation weights
- #135823 JIT: preserve null checks when folding ThrowIfNull in Tier0
- #135731 Merging internal commits for release/8.0
- #135727 Merging internal commits for release/8.0
- #135653 Load CoreCLR browser-WASM PDBs into memory instead of the VFS
- #135494 [cDAC][wasm] Keep caller SP for non-R2R callers and restore SoftwareExceptionFrame FP
- #135146 [wasm] [JIT] Contain Array Data Offsets
- #135067 Enable ILLink caching and post-build purging in CI
- #135066 Support ILLink caching in runtime library builds
- #134910 [JIT] Rationalize: Re-run pre-order processing on identity shuffle rewrite in
PreOrderVisit - #134819 Update x64 Helix test VMs to Azure Linux 4
- #133533 Convert .data tls IL tests to C++/CLI
- #131428 Ensure that x64 disassembly names operands at the size actually encoded
- #129510 [release/10.0] Fix MemoryCache negative _cacheSize drift that permanently latches a size-limited cache
#136172 [clr-interp] Preserve byref-like locals when an await does not suspend
- 作成者: @radekdoulik
- 作成日時: 2026年10月20日 18:24:28(UTC)
- マージ日時: 2026年10月20日 21:16:42(UTC)
- ラベル: area-CodeGen-Interpreter-coreclr
概要
インタープリターの継続ハンドラー(通常/ジェネリックの両継続opcodeが共有)で、await が同期的に完了して中断しない場合に、初期化済みのローカル(byref-like ローカルを含む)が誤ってゼロクリアされる問題の修正です。「継続なし」の高速パスを、ローカルのゼロクリアより前に移動しました。実際に中断する場合は、従来どおり継続処理の前にゼロクリアします。Resolves dotnet/runtime#136171。
変更内容
src/coreclr/vm/interpexec.cpp: 共有ハンドラー内の処理順を変更し、継続がない場合の高速パスをローカルのゼロクリアより前に実行するようにしました。実中断時のゼロクリアと継続キャプチャは変更していません。src/tests/JIT/Regression_ro_2/Runtime_136000.cs: 既存のRuntime_136000.TestEntryPointを、ジェネリック/非ジェネリックな包含型と ref struct/byref ローカルの組み合わせによる4ケースの条件付き Theory に拡張しました。各ケースで、Task.CompletedTaskに対する保持、保留中タスクの未完了結果、実中断後のデフォルト化を検証します。通常の byref の初期化にはNoInliningの ref identity ヘルパーを使い、ローカルのアドレス再計算ではなく継続ローカルのクリア処理を検証できるようにしています。
パフォーマンスへの影響
影響なし(ベンチマーク結果の記載はありません)。
関連Issue
その他
- このテストは #136085 で追加されたもので、同PRはネイティブJITの継続キャプチャに関する別の問題を修正しています。インタープリターの「チェック前クリア」の挙動はそのテストより前から存在していました。
- 作成者によると、ローカルのアドレスを直接使うプロトタイプでは、中断後にネイティブJITでアドレスが再マテリアライズされる別の問題が見つかっています。本PRはJITコードを変更せず、byrefケースも無効化していません。
- 検証(作成者報告):
- 修正前のWasmランタイムでは、元の回帰テストが想定どおり失敗しました。
- 修正後のWasmランタイムでは、拡張した回帰テスト16/16が成功しました。
- 関連する async テスト36/36が成功しました。
- 同一ソースのネイティブARM64 JITでは4/4が成功しました。
- 検証はNode.js上のbrowser/Wasmターゲットで行っています。実際のCIバイナリ、R2Rコンパイル済み呼び出し元、Mono、他のネイティブアーキテクチャ、async スイート全体は検証対象外です。
- スコープ: 変更は共有ハンドラーの処理順のみで、ネイティブJITのソース、Reflection.Emit、R2R、パイプラインは変更していません。
#136170 [release/8.0] Skip file-backed named mutex tests on Mono
- 作成者: @ViveliDuCh
- 作成日時: 2026年10月20日 18:10:20(UTC)
- マージ日時: 2026年10月20日 23:24:37(UTC)
- ラベル: Servicing-approved area-System.Threading
概要
release/8.0ブランチにおいて、Mono上でファイルバックの名前付きMutexに関するテスト2件をスキップするようにする変更です。Monoの名前付きMutex実装は共有メモリのバッキングファイルを使用しないため、これらのテストはMonoには適用されません。テストコードのみの変更です。
変更内容
src/libraries/System.Threading/tests/MutexTests.cs(+2/-0)- Mono上でファイルバックの名前付きMutexテスト2件をスキップする処理を追加(追加2行)
パフォーマンスへの影響
影響なし
関連Issue
その他
- ランタイムやライブラリ本体、公開APIへの変更はなく、互換性への影響もありません。
- 提供された情報には、スキップされるテスト名や具体的なスキップ方法の詳細は含まれていません。
#136168 Reuse handle-based unwind lookup for WebAssembly
- 作成者: @rcj1
- 作成日時: 2026年10月20日 18:06:44(UTC)
- マージ日時: 2026年10月20日 21:39:14(UTC)
- ラベル: area-Diagnostics-cdac
概要
WebAssembly (WASM) の R2R アンウィンドデータ検索を、専用の「制御PCのみ」の検索経路から、既存の ExecutionManager のハンドルベース API を再利用する形に統一する変更です。他アーキテクチャと同じ検索パターンに揃え、IExecutionManager.TryGetUnwindInfo とその実装を削除します。
変更内容
WasmR2RInfo.TryGetUnwindDataが、仮想 IP をGetCodeBlockHandleで解決し、GetUnwindInfoとGetUnwindInfoBaseAddressからランタイム関数エントリとイメージベースを取得するように変更(コードブロックやアンウィンド情報が取得できない場合の失敗時の挙動は維持)IExecutionManager.TryGetUnwindInfoを削除(IExecutionManager.cs、ExecutionManagerCore.cs、ExecutionManager_1.cs)- ルートメソッドとファンクレットのアンウィンドデータ解決を、実際の
ExecutionManager経由で検証するテストを追加(WasmR2RInfoTests.cs) - スタックウォークのテストダブルおよび既存テストを更新(
StackWalkTests.cs、WasmUnwinderTests.cs、ExecutionManagerTests.cs) - データコントラクトのドキュメントを更新(
ExecutionManager.md、StackWalk.md)
パフォーマンスへの影響
影響なし(パフォーマンスに関する記載・ベンチマーク結果は提供情報にありません)
関連Issue
なし
その他
- 検証は、タグ付きフレーム ABI に一致する CI ランタイムと crossgen2 に対し nesm で実施。例外ディスパッチ、ネイティブ仮想アンウィンド、第1パスのフィルター、第2パスのディスパッチ・呼び出し、finally ファンクレットの6地点で取得したスナップショットを使用
- ブランチとベースラインで、公開
IStackWalkの結果が完全に一致(リーダーあたり135エントリ、うちマネージドフレーム98) - 本番の
WasmContext.Unwind94ステップ(呼び出し元の SP/IP/FP を含む)と、33フレームインスタンスの MethodDesc/アンウィンドデータのコールド解決も同一結果 - 検証対象は CI ランタイムに対する cDAC のアンウィンドであり、このブランチから再ビルドしたネイティブランタイムではない点に注意
- 作成者の説明によれば、PR 説明は GitHub Copilot により生成
#136159 ILVerify: fix crashes on non-array element operands and on ldelem.ref of null
- 作成者: @pcshrosbree
- 作成日時: 2026年10月20日 15:44:51(UTC)
- マージ日時: 2026年10月20日 18:18:10(UTC)
- ラベル: area-Tools-ILVerification community-contribution
概要
ILVerifyが、配列ではないオペランド(例: string)を ldelem.* / stelem.* / ldelema に渡された場合に InvalidCastException でクラッシュする問題を修正します。修正後は ExpectedArray を報告し、そのメソッドの検証を中断します。また、null配列に対する有効な ldelem.ref で NullReferenceException が発生する問題も修正します。
クラッシュを再現するILの例:
.method public static void M() cil managed
{
ldstr "a"
ldc.i4.0
ldelem.i4
pop
ret
}
変更内容
src/coreclr/tools/ILVerification/ILImporter.Verify.cs(+7/-3)CheckIsArrayが失敗した場合にAbortBasicBlockVerification()を呼ぶようにしました。これはCheckIsIndex、CheckIsByRef、CheckIsNumeric、CheckIsIntegerと同じ扱いです。ImportLoadElement/ImportStoreElement/ImportAddressOfElementの((ArrayType)array.Type).ElementTypeへのキャストに到達しなくなります。ImportLoadElementでldelem.refの配列が null(array.Typeが null)の場合、ldnullと同様に null 参照をスタックにpushするようにしました。ECMA-335 (III.4.7, III.4.8) では、null配列参照は実行時にNullReferenceExceptionとなる有効なILです。
src/coreclr/tools/ILVerification.Tests/ILTests/ArrayTests.il(+87/-0)- テストメソッドを9件追加しました。
- stringを配列オペランドとする
_Invalid_ExpectedArrayが7件(ldelem.i4、ldelem.ref、ldelem <token>、stelem.i4、stelem.ref、stelem <token>、ldelema) int32を配列オペランドとするldelem.refの_Invalid_ExpectedArrayが1件- null配列に対する
ldelem.refのLoadElement.RefFromNull_Validが1件
- stringを配列オペランドとする
- テストメソッドを9件追加しました。
挙動の変化として、ldlen の非配列オペランドや多次元配列への要素アクセスも CheckIsArray を通ります。これらは以前もクラッシュせず ExpectedArray を報告していましたが、今後はそこで検証を中断します。
パフォーマンスへの影響
影響なし
関連Issue
- #136159(本PR)
- dotnet/roslyn#58652(RoslynのVBテスト
TestGetObjectValueCallsで同じILVerifyのクラッシュが報告されている。ldnull; ldc.i4.1; ldelem.refを含むメソッドが該当)
その他
- 検証結果:
- 修正適用時は ILVerification.Tests が Release / Debug とも 528/528 で成功しました。main は 519/519 です。
- 修正を両方戻すと、追加した9件だけが失敗します。7件は
InvalidCastException、int32の1件とnullの1件はNullReferenceExceptionです。 - 10.0.12 共有フレームワークの172アセンブリに対してILVerify CLIを main と本PRで実行し、出力が同一であることを確認しています(
ExpectedArrayやクラッシュは両者で発生せず、想定通り)。
- 作成者の記載によると、PRはAI(Anthropic Claude、OpenAI Codex)の支援を受けて作成され、作成者がレビュー済みです。
#136149 JIT: Preserve volatile static reads when folding readonly fields
- 作成者: @EgorBo
- 作成日時: 2026年10月20日 12:54:15(UTC)
- マージ日時: 2026年10月20日 15:55:03(UTC)
- ラベル: area-CodeGen-coreclr
概要
NativeAOTが「書き込まれない static フィールドは readonly である」と推論した場合に、そのフィールドの volatile 読み取りまで定数畳み込みされ、acquire セマンティクスが失われる問題を修正します。これにより、後続のロードがスピンループの外へホイスト(巻き上げ)される回帰が発生していました(#135724 のコメントで報告)。修正として、volatile アクセスの場合は readonly フィールドの畳み込みをスキップします。
変更内容
src/coreclr/jit/importer.cpp(+3/-2)- JIT のインポーターで readonly フィールドを定数畳み込みする処理に対し、
volatile読み取りを除外する条件を追加
- JIT のインポーターで readonly フィールドを定数畳み込みする処理に対し、
パフォーマンスへの影響
影響なし(ベンチマーク結果の記載はありません)。volatile 読み取りに限り畳み込みが行われなくなるため、その範囲では最適化が抑制されますが、正しいメモリセマンティクスを維持するための変更です。
関連Issue
- #135724(回帰が報告されたPR)
その他
- 影響範囲は JIT コンパイラ内部の実装(公開APIの変更や互換性への影響の記載はなし)
- 主に NativeAOT で、書き込みのない static フィールドが readonly と推論されるケースに関係します
#136147 Cleanup unused cmake configs
- 作成者: @am11
- 作成日時: 2026年10月20日 12:46:30(UTC)
- マージ日時: 2026年10月20日 17:46:50(UTC)
- ラベル: area-PAL-coreclr community-contribution
概要
ネイティブライブラリ、CoreCLR PAL、GCのビルド構成から、使用されていないCMakeの機能検出(プローブ)と設定値を削除するクリーンアップです。生成ヘッダーの対応する定義や、クロスコンパイル用のキャッシュエントリも併せて整理されています。ランタイムの公開API・動作に関わる変更ではなく、ビルドシステム内部の整理です。
変更内容
src/native/libs/configure.cmake: 未使用のライブラリプローブと関連するインクルード設定を削除 (-20)src/coreclr/pal/src/configure.cmake: 未使用のPALプローブと定数を削除 (-153)src/coreclr/pal/src/config.h.in: 上記に対応するPALの構成定義を削除 (-14)src/coreclr/gc/unix/configure.cmake: 未使用のスレッドIDプローブを削除 (-12)src/coreclr/gc/unix/config.gc.h.in: 対応するGC側の定義を削除 (-1)src/coreclr/CMakeLists.txt: 不要になったWASIのプローブ結果を削除 (-2)eng/native/tryrun.cmake: 不要なクロスコンパイル用キャッシュエントリを削除 (-16)eng/native/tryrun.browser.cmake: ブラウザ向けの未使用キャッシュエントリを削除 (-25)eng/native/tryrun_ios_tvos.cmake: Apple モバイル向けの不要なプローブ結果を削除 (-7)
すべて削除のみの変更です(追加行なし)。
パフォーマンスへの影響
影響なし(提供された情報にベンチマーク結果やランタイムの性能に関する記載はありません。なお、CMake構成時のプローブ数が減るため、構成処理がわずかに軽くなる可能性はありますが、情報としては確認できません)。
関連Issue
なし
その他
- Copilotのレビュー要約では、削除内容はプローブ・ヘッダー・クロスコンパイルキャッシュ間で一貫しており、未解決の指摘事項はないとされています(静的レビューのみで、ビルドとテストは未実行)。
- 作成者による概要の記載はありません。
#136139 Fix AcceptWithDefaultValidation_CertificateContextTrust_HonorsChainPolicy test failures
- 作成者: @rzikm
- 作成日時: 2026年10月20日 09:05:36(UTC)
- マージ日時: 2026年10月20日 20:36:23(UTC)
- ラベル: area-System.Net.Security
概要
TlsSessionTests.cs を修正し、AcceptWithDefaultValidation_CertificateContextTrust_HonorsChainPolicy テストの失敗(#136096)に対処するPull Requestです。変更は1ファイルの1行削除のみです。
変更内容
src/libraries/System.Net.Security/tests/FunctionalTests/TlsSessionTests.cs: 1行を削除(+0/-1)- 削除された行の具体的な内容は提供情報に含まれていないため不明です。
パフォーマンスへの影響
影響なし(テストコードのみの変更)
関連Issue
その他
- 変更対象はテストコードのみで、公開APIやランタイム/ライブラリの実装、互換性への影響はありません。
- Pull Requestの説明にはIssueへのリンクのみが記載されており、失敗の原因や修正方針の詳細は提供情報からは確認できません。
#136135 ILVerification.Tests: reject unknown error names
- 作成者: @pcshrosbree
- 作成日時: 2026年10月20日 08:16:25(UTC)
- マージ日時: 2026年10月20日 22:29:39(UTC)
- ラベル: area-Tools-ILVerification community-contribution
概要
ILVerification.Tests のテストローダー(TestDataLoader)が、_Invalid_ メソッド名に含まれる期待エラー名を Enum.TryParse で解析し、VerifierError に該当しない名前を黙って無視していた問題を修正します。無視されると、テストが名前に書かれたより少ないエラーしか期待せず、スペルミスなどでテストが弱体化してしまうためです。本PRはテストのみの変更で、不明なエラー名があればテスト名と不明な名前を含むメッセージで例外を投げるようにします。
出力例:
System.ArgumentException : Test 'StoreLocUninit' expects 'StackUninit', which is not a VerifierError.
変更内容
TestDataLoader.cs: 期待エラー名がVerifierErrorとして解析できない場合にArgumentExceptionをスローするよう変更(+16/-5)。_InvalidType_側も同じチェックを使い、従来のEnum.Parse由来の例外ではなくテスト名入りのメッセージになります。ExceptionRegionTests.il:Leave.ToOtherFault_Invalid_LeaveOutOfFault.LeaveIntoFault.LeaveIntoHandlerをLeave.ToOtherFault_Invalid_LeaveOutOfFault.LeaveIntoHandlerにリネーム。LeaveIntoFaultというコードは存在せず、従来も実際にはLeaveOutOfFaultとLeaveIntoHandlerのみを検証していたため、検証内容は変わりません。ThisStateTests.il:special.StoreLocUninit..ctor_Invalid_StackUninitをspecial.StoreLocUninit..ctor_Validにリネーム。StackUninitはUninitStackの誤記と思われますが、コンストラクタはint32ローカルに0を格納するだけでthisを格納しないため検証可能で、ILVerify はエラーを報告しません。従来もエラーなしを期待していたため、検証内容は変わりません。
パフォーマンスへの影響
影響なし(テストコードのみの変更)。
関連Issue
なし
その他
- 不明なエラー名があると
TestMethodsWithInvalidILが1件の失敗結果として報告され、その間は他の無効IL(invalid-IL)ケースが実行されません。テストケースに新しいフィールドを追加せずに済むため、この方式が採用されています。 - テスト結果:
ILVerification.Testsは Release/Debug ともに 519 件が成功し、mainと同数です。元の名前を戻すと新しいメッセージで失敗し、ローダーの変更を戻すと元の名前は再び通ることが確認されています。メソッド名・型名に仕込んだスペルミスもそれぞれ新メッセージで失敗します。 - 作成者によると、本PRは AI(Anthropic Claude、OpenAI Codex)の支援のもとで作成され、作成者がレビュー済みとのことです。
#136131 coreclr: default EnableWriteXorExecute to 0 on OpenHarmony
- 作成者: @springmin
- 作成日時: 2026年10月20日 05:48:30(UTC)
- マージ日時: 2026年10月20日 14:04:04(UTC)
- ラベル: area-VM-coreclr community-contribution
概要
OpenHarmony 上の CoreCLR で EnableWriteXorExecute(W^X)のデフォルト値を 0 にする変更です。
- W^X アロケーターは、memfd をバックにした同一ページを「読み書き用ビュー」と「読み取り+実行用ビュー」の二重マッピングで管理します。
- OpenHarmony のサンドボックスは、ファイルバックのマッピングへの
PROT_EXECを拒否します(匿名の実行可能メモリは許可)。そのため実行用ビューを作成できず、JIT コンパイルされたコードを実行できません。 - 既存の RISC-V 向けの条件(デフォルト 0 で RWX アロケーターを選択)に
TARGET_OPENHARMONYを加え、OpenHarmony ビルドで JIT が追加設定なしに動作するようにします。 - ノブ自体は変更されておらず、
DOTNET_EnableWriteXorExecute=1を指定すれば引き続き W^X を要求できます。
変更内容
src/coreclr/inc/clrconfigvalues.hEXTERNAL_EnableWriteXorExecuteを囲むガードを#ifdef TARGET_RISCV64から#if defined(TARGET_RISCV64) || defined(TARGET_OPENHARMONY)に変更し、両ターゲットでデフォルトを 0 にしました。- サンドボックス上の理由を示すコメント 2 行と、末尾の
#endifコメントを追加しました。 - 差分は 4 行追加・2 行削除です。
影響範囲
- ランタイムの内部設定(CLR config のデフォルト値)の変更で、公開 API の変更ではありません。
TARGET_OPENHARMONYは #132953 のプラットフォームビルドサポートで定義されます。RISC-V を含む他のターゲットは従来どおりの分岐を通り、デフォルト値 1 を維持します。- マネージド API、ビルド、テストの変更はありません。互換性への影響は OpenHarmony ターゲットのデフォルト動作のみです。
パフォーマンスへの影響
ベンチマーク結果の記載はありません。WX を無効化するデフォルト(RWX アロケーター)への切り替えであり、OpenHarmony 以外のターゲットには影響しません。PR の主眼は性能ではなく、JIT コードを実行可能にすることです。
セキュリティ面では、OpenHarmony ではデフォルトで WX が無効になります。ただし、ファイルバックの実行可能マッピングを許可するサンドボックス構成向けに、DOTNET_EnableWriteXorExecute=1 でオプトインできます。
関連Issue
なし(PR 本文には、依存する PR として #132953 の言及があります)
その他
作成者による検証結果は次のとおりです。
- OpenHarmony arm64 実機で、
DOTNET_EnableWriteXorExecute未設定かつDOTNET_ReadyToRun=0のフレームワーク依存コンソールアプリが最後まで実行され、実行可能アロケーターからEACCESエラーは報告されませんでした。 - 同一ビルドで
DOTNET_EnableWriteXorExecute=1を指定すると、二重マッピングされたファイルを実行可能にする際に失敗します(このデフォルト変更が回避する事象)。 - 実機の直接プローブでは、memfd マッピングへの
PROT_EXEC付与(mprotect)はEACCESを返す一方、匿名マッピングは RW から RX に切り替えて実行できました。
なお、PR 本文には AI 支援(エージェントツール)を用いて作成された旨の記載があります。
#136129 Add native AOT to DefaultCoreClrSubsets on WASI
- 作成者: @MichalStrehovsky
- 作成日時: 2026年10月20日 05:09:14(UTC)
- マージ日時: 2026年10月20日 22:05:39(UTC)
- ラベル: arch-wasm area-Infrastructure
概要
WASI向けビルドの DefaultCoreClrSubsets に Native AOT を追加するPRです。あわせて、サブセット一覧の並び順を整理し、ブロック冒頭の無条件版とWASI固有版を比較しやすくしています。この変更後、両者の差異は「WASIでは libs.native をCoreCLRの一部として扱う」点だけになります。
変更内容
eng/Subsets.props(+1/-1): WASI向けDefaultCoreClrSubsetsに Native AOT を追加し、リストの並び順を整理src/libraries/System.Private.CoreLib/src/System/Threading/Wasi/WasiEventPipeJobs.cs(+2/-0): 2行追加(提供情報からは具体的な内容は不明)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 作成者は MichalStrehovsky 氏です。
- WASIで
libs.nativeをCoreCLRの一部として扱っている理由は、作成者自身も「for some reason」としており、本PRでは変更されていません。 WasiEventPipeJobs.csの変更内容は提供情報に含まれていないため、詳細は元のPRの差分を確認してください。
#136128 Home DIM instantiating thunks on System.Object
- 作成者: @MichalStrehovsky
- 作成日時: 2026年10月20日 04:06:38(UTC)
- マージ日時: 2026年10月20日 12:45:02(UTC)
- ラベル: area-NativeAOT-coreclr
概要
NativeAOTにおけるデフォルトインターフェイスメソッド(DIM)のinstantiating thunkの配置先を、ジェネリックなインターフェイス自身ではなく、非ジェネリックな System.Object に変更する修正です。thunkがジェネリック型上にあると「instantiating argumentが必要かどうか」の判定で問題が生じ(実際には不要)、それを打ち消すための特殊処理が多数必要になるため、これを回避する局所的な修正として行われています。Issue #136073 を修正します。
作成者によると、この方法は複数オブジェクトファイル(multi-obj)モードでは機能せず、これらのthunkがすべてCoreLib.objにコンパイルされるように見える制限がありますが、他の事情を考慮すれば許容できるとされています。
変更内容
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/CompilerTypeSystemContext.InterfaceThunks.cs(+3/-6): instantiating thunkのホーム(所有型)をSystem.Objectにする変更。明示的なthunk所有者の保持やコンストラクタ引数が削除されています。src/tests/Loader/classloader/DefaultInterfaceMethods/regressions/github136073.cs(+38/-0): 回帰テストの追加。objectとstringを用いた共有ジェネリックのデフォルト実装を対象に、レシーバーのキャストとジェネリック型の同一性を検証します。src/tests/Loader/classloader/DefaultInterfaceMethods/regressions/github136073.csproj(+5/-0): 回帰テストのソースを含めるプロジェクトファイルの追加。
パフォーマンスへの影響
影響なし(記載された情報の範囲では、パフォーマンスに関する言及やベンチマーク結果はありません)。
関連Issue
その他
- 複数オブジェクトファイル(multi-obj)コンパイルモードでは、thunkがすべてCoreLib.objにコンパイルされる想定となる制限があり、メンテナによる許容判断が必要です。
- Copilotのレビューでは、NativeAOTでの実行が未検証である点が指摘されています。
#136125 Reject NativeAOT closed static delegates over non-reference first parameters
- 作成者: @Copilot
- 作成日時: 2026年10月20日 03:38:08(UTC)
- マージ日時: 2026年10月20日 08:33:16(UTC)
- ラベル: area-NativeAOT-coreclr
概要
NativeAOT では、第1引数が参照型以外(値型など)の closed static delegate が受け入れられ、メソッドが値を期待する箇所にオブジェクト参照が渡されていました。CoreCLR ではこのバインドは拒否されます。本PRは NativeAOT の動作を CoreCLR に揃え、該当するバインドを拒否します。
- 第1引数が値型・byref・ポインター・関数ポインターの場合は、null ターゲットも含めて拒否されます。
- 例外をスローするオーバーロードは
ArgumentExceptionを報告します。 throwOnBindFailure: falseの場合はnullを返します。
変更内容
src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.cs(+5/-1)- 非参照型の第1引数を拒否するガードを追加。
src/libraries/System.Runtime/tests/System.Runtime.Tests/System/DelegateTests.cs(+76/-0)- 影響を受ける各オーバーロード、ジェネリックのインスタンス化、非サポートのシグネチャに対するテストケースを追加。
- 有効な参照型・インターフェース・配列のバインドが維持されることを確認するテストを追加。
- Mono は一部のバインドを現状許容するため、拒否のアサーションは CoreCLR と NativeAOT に限定。
パフォーマンスへの影響
影響なし
関連Issue
その他
- NativeAOT と CoreCLR の動作差異を解消する変更で、これまで NativeAOT で受け入れられていた不正なバインドが拒否されるようになります。
- Copilot のレビュー概要によると、ビルドとテストはレビュー時に実行されておらず、CoreCLR と NativeAOT でのテスト結果は人手での確認が必要とされています。
#136124 [release/8.0] Update branding to 8.0.34
- 作成者: @dotnet-release-bot[bot]
- 作成日時: 2026年10月20日 03:27:13(UTC)
- マージ日時: 2026年10月20日 17:30:08(UTC)
- ラベル: community-contribution area-codeflow branding-update
概要
release/8.0 ブランチのバージョンブランディングを更新するPRです(リリースボットによる自動作成)。パッチバージョンを 33 から 34 に変更し、8.0.34 向けのブランディングにします。
変更内容
eng/Versions.props(+2 / -2)PatchVersion:33→34
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- バージョン情報のみの変更で、コード・公開API・ランタイム/ライブラリの実装には変更ありません。
- 互換性への影響(破壊的変更・非推奨化など)やセキュリティ修正に関する記載は、提供された情報にはありません。
#136123 [release/9.0] Update branding to 9.0.23
- 作成者: @dotnet-release-bot[bot]
- 作成日時: 2026年10月20日 03:25:54(UTC)
- マージ日時: 2026年10月20日 17:32:55(UTC)
- ラベル: community-contribution area-codeflow branding-update
概要
release/9.0 ブランチのバージョンブランディングを、パッチバージョン 22 から 23 に更新するリリース管理用のPRです(9.0.23 向け)。コードやAPIの変更は含まれません。
変更内容
eng/Versions.props: PatchVersion を22→23に変更(+2 / -2)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
dotnet-release-bot[bot]により自動作成されたPRです。- 提供された情報の範囲では、互換性・セキュリティ・動作に関する変更内容は確認できません。
#136120 Correct x86 instruction metadata
- 作成者: @tannergooding
- 作成日時: 2026年10月20日 01:18:37(UTC)
- マージ日時: 2026年10月20日 16:55:17(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITが使用するx86命令メタデータを修正するPRです。対象は、メモリサイズ、EVEX圧縮ディスプレースメント(compressed displacement)、マスキング、オペランドマッピングです。
特に VPMULDQ / VPMULUDQ は64ビットのブロードキャストメモリオペランドを使うため、JITは圧縮ディスプレースメントを8バイト単位でスケールする必要があります。この修正に合わせて、隣接フィールドのケースを検証する AVX-512 向けの符号付き・符号なし回帰テストを追加しています。あわせて関連する命令メタデータを修正し、EVEXのサイズ計算とLoweringのために quarter-width tuple(1/4幅タプル)の扱いを追加しています。
変更内容
src/coreclr/jit/emit.h: +12行(変更の詳細は提供情報に含まれません)src/coreclr/jit/emitxarch.cpp: +17/-1行。EVEXサイズ計算に関する変更とみられますsrc/coreclr/jit/instr.cpp/instr.h: +10行 / +2/-1行。quarter-width tuple関連の追加とみられますsrc/coreclr/jit/instrsxarch.h: 91行を更新(x86命令メタデータの修正)src/coreclr/jit/lowerxarch.cpp: +3行。quarter-width tupleの扱いに関するLowering側の変更src/tests/JIT/Regression_2/Runtime_135844/:VPMULDQ/VPMULUDQの隣接フィールドケースを検証する回帰テスト(.csと.csproj)を新規追加
パフォーマンスへの影響
ベンチマーク結果などの記載はなく、パフォーマンスへの影響に関する情報は提供されていません。変更の主眼は、命令エンコード時のディスプレースメントスケール等の正確性の修正です。
関連Issue
#135844(このPRで解決)
その他
- 対象はJIT(x86/x64)の内部実装であり、公開APIの変更ではありません。
- 本PRの説明はGitHub Copilotにより生成された旨が記載されています。
#136119 Guard EncryptedXml_DecryptDocument_MaxCount_Default with RemoteExecutor.IsSupported
- 作成者: @lewing
- 作成日時: 2026年10月20日 01:17:33(UTC)
- マージ日時: 2026年10月20日 03:46:41(UTC)
- ラベル: area-System.Security
概要
EncryptedXml_DecryptDocument_MaxCount_Default(#135741で追加)は、通常の [Fact] から RemoteExecutor.Invoke を呼び出していたため、RemoteExecutorがサポートされない環境(例:runtime-coreclr crossgen2 のouterloop R2Rライブラリ実行)で PlatformNotSupportedException が発生していました。本PRでは属性を [ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))] に変更し、RemoteExecutorが非対応の環境ではテストがスキップされるようにします。同系統の _AppContext テストと同じ方式に揃えた変更です。
// 変更後の属性
[ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))]
変更内容
src/libraries/System.Security.Cryptography.Xml/tests/EncryptedXmlTests.cs(+1/-1)EncryptedXml_DecryptDocument_MaxCount_Defaultテストの属性を[Fact]から[ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))]に変更
パフォーマンスへの影響
影響なし(テストコードのみの変更)
関連Issue
- #135741:対象テストが追加されたPR(Issueではなく関連PRとして記載)
その他
- 変更はテストのみで、公開API・ランタイム/ライブラリの実装・互換性への影響はありません。
- 失敗が確認されたビルド:build 1639697
- 作成者によると、このPRはGitHub Copilotの支援を受けて生成されたものです。
#136116 Require threads for ControlledExecutionTests.CancelInTryAndExitCatchNormally
- 作成者: @pcshrosbree
- 作成日時: 2026年10月20日 00:05:25(UTC)
- マージ日時: 2026年10月20日 01:09:58(UTC)
- ラベル: area-System.Numerics community-contribution
概要
ControlledExecutionTests.CancelInTryAndExitCatchNormally に IsMultithreadingSupported の条件を付け、スレッドが使えない環境(シングルスレッドのbrowser-wasm)ではテストをスキップするようにする1行の修正です。#135939 のマージ以降、browser-wasm CIの System.Runtime.Tests がタイムアウトしており、その原因と推測される問題への対応です。PR自体のブラウザCI実行で、タイムアウトが解消するかどうかが確認されます。
変更内容
src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Runtime/ControlledExecutionTests.cs(+1/-1)CancelInTryAndExitCatchNormallyのテスト属性にIsMultithreadingSupportedの条件を追加。同クラス内の他のTask.Runを使うテストと同じ扱いに揃えています。
背景として、2つのPRが1分差でマージされたことによる相互作用があります。
- #135915:
IsMultithreadingSupportedをクラス単位から、Task.Runでキャンセルする4つの有効なテストへ移動 - #135939:
CancelInTryAndExitCatchNormallyを再度有効化。ただしブランチが #135915 より前のため、main上では条件が付いていない状態になった
シングルスレッドのwasmでは、アクションがスピンしている間キャンセル側の Task.Run タスクが実行できず、テストが完了しません。
パフォーマンスへの影響
ライブラリ本体への影響はなく、テストのみの変更です。CIの実行時間については、browser-wasmの LibraryTestsCoreCLR レグにおける System.Runtime.Tests の結果が次のとおりです。
- #135939 なし:872秒(build 1641014)、972秒(build 1641108)で成功
- #135939 あり:どちらも5402秒でタイムアウト(build 1641112、1641117)
関連Issue
- #136116(本PR)
- 関連PR:#135915、#135939
その他
src/libraries配下で #135939 が変更したのは、このテストの属性のみです。ログからは、実行中だったテストの名前は特定できていません。したがって、このテストが原因というのは推測であり、本PRのCI結果で検証されます。- 作成者の記載によれば、本PRはAI(Anthropic Claude、OpenAI Codexによる確認)の支援で準備され、作成者がレビューしたうえで投稿されています。
#136114 [CI] Report compiler cache statistics after runtime test builds
- 作成者: @agocke
- 作成日時: 2026年10月19日 23:51:08(UTC)
- マージ日時: 2026年10月20日 21:50:35(UTC)
- ラベル: area-Infrastructure-coreclr
概要
CIパイプラインにおいて、Roslynコンパイラキャッシュの統計レポートが、ランタイムテストのビルド前に出力されていたため、テストのコンパイル分が集計から漏れていました。このPRは、統計レポートのステップをランタイムテストのビルド後へ移動します。キャッシュの設定やビルドの挙動自体は変更されません。
変更内容
eng/pipelines/coreclr/templates/jit-hardware-intrinsics-common.yml(+2/-2): 統計レポートのステップ位置を変更eng/pipelines/runtime.yml(+4/-4): 統計レポートのステップ位置を変更- 対象は計6つのジョブ定義で、CoreCLR checkedビルド(Linux arm64を含む)、NativeAOT、hardware-intrinsicsのジョブが含まれます。
- 変更はステップの配置のみで、呼び出し回数は変わりません(作成者による確認)。
パフォーマンスへの影響
影響なし(CIパイプラインのステップ順序の変更のみで、ランタイム/ライブラリの実行性能には関係しません)。
関連Issue
なし
その他
- 作成者による検証:
- Linux arm64 Checked設定・分離したRoslynキャッシュで
CoreCLRTestLibraryを2回ビルドし、いずれも成功。初回はキャッシュエントリを保存し、2回目は再利用された。 - 変更した2つのYAMLファイルをパースし、6箇所のステップ順序を確認。
git diff --checkは成功。
- Linux arm64 Checked設定・分離したRoslynキャッシュで
- フルのarm64 CIはローカルでは実行されていません。
- このPRはGitHub Copilotを用いて生成されたと記載されています。
#136112 Add ilverify --list-errors to list the names --ignore-error matches
- 作成者: @pcshrosbree
- 作成日時: 2026年10月19日 23:38:02(UTC)
- マージ日時: 2026年10月20日 03:46:07(UTC)
- ラベル: area-Tools-ILVerification community-contribution
概要
ILVerify に --list-errors オプションを追加します。--ignore-error / --ignore-error-file は正規表現でエラー名にマッチさせますが、その名前を確認する手段がなかったため、一覧を出力できるようにしました。Issue #136056 では --help --verbose が提案されていましたが、代替案として挙げられていた独立オプションを採用しています。--verbose の意味は従来どおり変わりません。
Noneを除くすべてのVerifierError名をStrings.resxのメッセージ付きで出力- すべての
ExceptionStringID名(型システムエラー)を出力 - 上記どちらの名前も持たないエラーは
Noneにマッチする旨を出力
--help と同様に入力ファイルなしで動作します。入力ファイルを併せて指定した場合は、一覧を出力するのみで検証は行いません。また、メッセージ中の '{0}' などのプレースホルダー(5件)は、実際のエラー報告時に ILVerify が埋めるものであり、一覧では未置換のまま表示されます。
出力例:
Verification errors (--ignore-error matches these names):
UnknownOpcode: Unknown opcode.
...
Type system errors (--ignore-error also matches these names):
ClassLoadGeneral
...
An error with neither kind of name, such as an exception while verifying a method, matches None.
変更内容
src/coreclr/tools/ILVerify/ILVerifyRootCommand.cs(+35/-0)--list-errorsオプションの追加- 通常の
--helpには--list-errors List the error names that --ignore-error matchesの1行が追加される
パフォーマンスへの影響
影響なし(コマンドラインオプションの追加のみで、検証処理自体の変更はなし)。
関連Issue
#136056(Fixes)。PR 番号は #136112 です。
その他
- ILVerify にはコマンドラインのテストがないため、
mainビルドと本ブランチのビルドを比較して手動で検証したとのことです。- 入力ファイルなしで終了コード 0、検証エラー名 124件(
Noneを除く全VerifierError)と型システム名 25件(全ExceptionStringID)が宣言順に出力される。 - 通常の
--helpの差分は追加された1行のみ。 ReturnTestsアセンブリで--ignore-error "^ReturnPtrToStack$"を指定すると、ReturnPtrToStackの2件のみが除外される。InvalidMetadataReferenceTestsで--ignore-error "^ClassLoadGeneral$"を指定すると、ClassLoadGeneralの5件が除外される。ILVerification.Testsは 513/513 件がパス。
- 入力ファイルなしで終了コード 0、検証エラー名 124件(
- 作成者によると、本PRは AI(Anthropic Claude と OpenAI Codex)の支援を受けて作成され、作成者がレビュー済みです。
#136109 [Bugfix] Clear removed elements in ImmutableArray<T>.Builder
- 作成者: @equmagg
- 作成日時: 2026年10月19日 22:48:23(UTC)
- マージ日時: 2026年10月20日 11:39:40(UTC)
- ラベル: area-System.Collections community-contribution
概要
ImmutableArray<T>.Builder で RemoveRange や RemoveAll などの一括削除を行った後、Count 以降のバッキング配列に削除済みの値が残る不具合を修正するPRです。Count を増やすとその残存値が露出し、「追加された要素は default(T) で初期化される」というドキュメント上の保証に反していました。また、削除された参照がバッキング配列に残り続ける問題もありました。
var builder = ImmutableArray.Create(1, 2, 3, 4).ToBuilder();
builder.RemoveRange(1, 2);
builder.Count = 4;
Console.WriteLine(string.Join(", ", builder));
// 期待値: 1, 4, 0, 0
// 修正前: 1, 4, 3, 4
.NET 9、.NET 10、.NET 11 RC2 で再現が確認されており、以前から存在する問題とのことです。
変更内容
ImmutableArray_1.Builder.cs(+2/-10)RemoveRange(int, int)が、参照を含む型で後続要素が残る場合にのみ削除区間を詰め替え前にクリアし、その後_countを直接変更していました。この誤った位置のクリア処理を削除しました。RemoveAllや列挙型のRemoveRangeオーバーロードが使用するRemoveAtRangeヘルパーも、空いた末尾をクリアせずに_countだけを減らしていました。- 両方のパスで、要素の詰め替え後に既存の
Countセッターを使うよう変更しました(RemoveAtと同じ方式)。これにより、すべての要素型で空いた末尾がクリアされます。 - 既存の引数検証と no-op 時の挙動は維持されます。
ImmutableArrayBuilderTest.cs(+63/-0)- 整数型、参照型、参照を含む構造体を対象に、空・先頭・中間・末尾・全削除・非連続削除の各ケースを追加しました。
- 予備容量がある場合とない場合の両方のビルダーを対象にしています。
Countを増やす前の残存内容と、増やした後のdefault初期化を検証します。
パフォーマンスへの影響
ベンチマーク結果の記載はありません。Count セッター経由でクリアを行うため、削除後に末尾のクリア処理が実行される点が挙動上の変更です。
関連Issue
なし
その他
- 公開APIの変更はなく、
Countが保証するdefault(T)初期化に実装を合わせるバグ修正です。 - 削除済み参照がバッキング配列に残らなくなるため、参照型の要素が意図せず保持され続ける問題も解消されます。
#136089 [cDAC] Fix incorrect filtering of stack-interior references
- 作成者: @SwapnilGaikwad
- 作成日時: 2026年10月19日 13:50:26(UTC)
- マージ日時: 2026年10月20日 12:58:48(UTC)
- ラベル: area-VM-coreclr community-contribution
概要
ランタイムの一部の経路では、PromoteCarefully を経由せずにスタック内部参照(stack-interior references)を報告するため、cDAC側とランタイム側でフィルタリングが非対称になっていました。比較前に両方の結果からこれらの参照を除外することで、cDAC ストレステストの誤検知(false failure)を防ぎます。作成者によれば、#135959 で失敗していたCIパイプラインへの対処であり、本PRはcodexの支援で作成されています。
変更内容
src/coreclr/vm/cdacstress.cpp(+12/-5)- cDAC側とランタイム側の双方の結果から、スタック内部参照をフィルタリングしてから比較するように変更
パフォーマンスへの影響
影響なし(ストレステスト用の比較ロジックの修正であり、通常のランタイム実行パスへの影響に関する記載はありません)
関連Issue
- #135959(失敗していたCIパイプラインの元となるPR。作成者の記述より)
その他
- 公開APIの変更や互換性への影響に関する記載はありません。
- レビュー依頼先: @dotnet/arm64-contrib, @dhartglassMSFT, @max-charlamb
#136072 Restart HttpListener authentication when protection policy changes
- 作成者: @rzikm
- 作成日時: 2026年10月19日 08:36:18(UTC)
- マージ日時: 2026年10月20日 18:02:08(UTC)
- ラベル: area-System.Net.Http
概要
HttpListener の拡張保護(extended protection)セレクタがNTLMハンドシェイクの途中でポリシーを変更した場合、従来は400を返していました。Windows Server 2019 (RS5) では、古いコンテキストが破棄され、その継続トークンが新しいコンテキストに渡されて InvalidToken が返り、マネージド側のクライアント障害マッピングが400を選択していたためです。
本PRでは、進行中の同一パッケージのコンテキストがポリシー非互換になった場合に、401と新しいチャレンジで認証を再開するよう変更しています。古いコンテキストは、弱いポリシーのまま再利用せず、切り離して破棄します。新規の不正トークンに対する既存のマッピング(400)は変更されません。
変更内容
src/libraries/System.Net.HttpListener/src/System/Net/Windows/HttpListener.Windows.cs(+10/-0): ポリシー非互換になった進行中コンテキストを検出し、古いコンテキストを切り離して破棄したうえで、401と新しいチャレンジで認証を再開する処理を追加。src/libraries/System.Net.HttpListener/tests/HttpListenerAuthenticationTests.cs(+4/-2): 既存の回帰テストに、Never/Never認証の成功と未認証の厳格ポリシー拒否に加えて、素のWWW-Authenticate: NTLMによる再開チャレンジの確認を追加。
パフォーマンスへの影響
影響なし
関連Issue
#135190(本PRで解決)
その他
- 作成者の記載によるテスト結果:
- ローカルのテスト実行: 688 passed、0 failed、8 skipped。資格情報が必要な回帰テストはローカルではスキップされ、不正なNTLM/Negotiateトークンのケースは想定どおり400を維持。
- NativeAOTビルドも成功。
- RS5(SYSTEM権限)では、修正前は400で失敗し、修正後は10回すべて成功(ポリシー不変の対照も成功)。
- RS5での通常スイートは696 passed、0 failed、12 skipped。
- RS5のCoreCLR対照実験では、10組のrelaxed/strictペアで、認証済みが204、未認証が新しいNTLMチャレンジ付きの401。
- 作成者によると、詳細なコンテキスト/SSPIトレースは、NativeAOTの計装実行ではなくこのCoreCLR対照実験から取得したものです。
- PR説明とコード変更はGitHub Copilotによって生成されたと記載されています。
#136063 Make whole-list ImmutableList<T>.Reverse() O(n)
- 作成者: @Copilot
- 作成日時: 2026年10月19日 07:16:08(UTC)
- マージ日時: 2026年10月20日 09:45:46(UTC)
- ラベル: area-System.Collections tenet-performance
概要
ImmutableList<T>(およびそのBuilder)の全体反転 Reverse() が、これまでO(n log n)のインデックス指定スワップで実装されていた点を、ツリーをミラーリングする方式に変更し、各ノードを1回だけ訪問するO(n)にしています。AVLバランスは維持されます。部分範囲の反転は従来のまま変更されていません。
実装は次の方針です。
- コピーオンライトで、frozen(凍結)済みの内部ノードはクローンし、リーフは再利用する
- 未凍結のBuilderノードはその場で反転する
- 全範囲を対象とするオーバーロードのみ、この経路を通す
変更内容
ImmutableList_1.Node.cs(+15/-1): ツリーをミラーリングして全体を反転する処理を追加し、全範囲のオーバーロードをこの経路に接続ImmutableListBuilderTest.cs(+50): Builder向けテストを追加ImmutableListTest.cs(+31): 全リスト反転の境界、バランス、インデックスアクセス、スナップショット保持のテストを追加ImmutableListTestBase.cs(+1/-1): 軽微な修正
パフォーマンスへの影響
作成者によるローカルのBenchmarkDotNet(ShortRun)結果(100,000要素):
| 操作 | 変更前 | 変更後 |
|---|---|---|
| Immutable list | 17.16 ms | 1.23 ms |
| Frozen builder | 15.85 ms | 1.01 ms |
| Mutable builder | 15.68 ms | 0.437 ms |
- Immutable listのアロケーションは 4.80 MB から 3.15 MB に減少
- 計算量の改善(O(n log n)→O(n))により、大きなリストほど効果が大きくなる見込みです
関連Issue
#136030(このPRで修正)
その他
なし
#136050 [wasm][R2R] Fix calls through MethodImpl-redirected slots on portable entrypoints
- 作成者: @lewing
- 作成日時: 2026年10月19日 01:52:36(UTC)
- マージ日時: 2026年10月20日 02:29:20(UTC)
- ラベル: arch-wasm area-ReadyToRun
概要
Wasm(portable entrypoints)のR2R環境で、同一型の .override(MethodImpl)によってリダイレクトされたvtableスロットを経由する呼び出しが、実装ではなく宣言側メソッドを実行・準備してしまう問題を修正します。非portableターゲットでは宣言のvtableスロットが実装のentrypointを保持するため問題になりませんが、portable entrypointsでは以下の3つの経路で宣言側が処理されていました(self_override5で再現)。
ExternalMethodFixupWorker: スロットを読む前に宣言側をprestubしており、宣言自身のR2Rボディを公開し、Checkedビルドでassertしていました。修正後は、スロットを読み、そのentryを所有するメソッドを準備して、セルをそれでパッチします(非portable分岐と同様)。ExecuteInterpretedMethodWithArgs_PortableEntryPoint_Complex(R2R → インタープリタ): 宣言側を準備・実行していました(例: 名前で宣言にバインドされたdelegate)。修正後は、PrepareInterpreterCodeと同様に、先に宣言→実装のマッピングを行います。- 同entryの早期パス: 実装のインタープリタコードが宣言側に格納されている場合にCheckedでassertしていました(既存の問題)。修正後は、そのコードを所有するメソッドとして実行します。
変更内容
src/coreclr/vm/prestub.cpp(+25/-10): 上記3経路の修正。src/tests/Loader/classloader/MethodImpl/Desktop/self_override5.il(+0/-1): #134949 に起因するquarantine(除外設定)を削除。
パフォーマンスへの影響
影響なし(正確性の修正であり、性能に関する記載はありません)。
関連Issue
#134949(部分的に対応)
その他
- もう一方の #134949 の失敗(
overflow0[1-4]_div)は、インタープリタ実行のCoreLibでR2Rコードを動かした場合にのみ発生します。レビューでこれは未サポートと整理されたため、これらのquarantineは維持されます。 CallDescrWorkerInternalのportableパスも、マッピングなしでprestubを行います。再現は未確認で、今後のフォローアップ候補です。- 検証: WASI(Checkedランタイム、wasmtime)で、R2R版CoreLibとCI構成の両方において、MethodImplテスト、
CovariantReturnsテスト20件、jit64_5がR2RおよびインタープリタでPASSしました。ブラウザおよびReleaseランタイムビルドは未検証です。
#136040 JIT: inline box Nullable<T> in ReadyToRun
- 作成者: @lewing
- 作成日時: 2026年10月18日 23:22:38(UTC)
- マージ日時: 2026年10月20日 01:39:05(UTC)
- ラベル: area-CodeGen-coreclr
概要
ReadyToRun(R2R)コードで CORINFO_HELP_BOX_NULLABLE のインライン展開を有効化する変更です。クラスハンドルを直接埋め込む代わりに、box T と同じ経路(基底型のトークン経由)でアロケーションを行います。これにより、既存のエスケープ解析が対象となるヒープ割り当てを除去できるようになります。
作成者によると、box int? は browser-wasm および tiering なしのネイティブ R2R でおよそ 30 倍高速化されたとのことです。ios 系ターゲットは CoreCLR を composite R2R として公開するため同じコード生成になりますが、実機での計測は行われていません。
変更内容
src/coreclr/jit/importer.cpp(+17/-8)- ReadyToRun のボックス化を、基底型に対する解決済みトークン経由のアロケーションで行うよう変更
- 既存の JIT / NativeAOT のアロケーション経路と、共有ジェネリックのフォールバック経路は維持
パフォーマンスへの影響
box int?が browser-wasm および tiering なしのネイティブ R2R で約 30 倍高速化(作成者による報告)- ios 系ターゲットは同じコード生成になる見込みだが、実機では未計測
関連Issue
なし
その他
- Copilot のレビュー概要では「要確認」と評価されています。合成されたトークンとプラットフォーム固有の ReadyToRun fixup について、モジュール間の解決とバージョニングの挙動をメンテナが確認する必要があるとされています。
- レビュー概要によれば、ビルドやテストは実行されていません。
#136033 ilverify: respect IgnoresAccessChecksToAttribute
- 作成者: @lagudafuadtosin
- 作成日時: 2026年10月18日 16:05:57(UTC)
- マージ日時: 2026年10月20日 07:10:30(UTC)
- ラベル: area-Tools-ILVerification community-contribution
概要
ILVerify が IgnoresAccessChecksToAttribute を尊重するようになり、ランタイムと同様にこの属性が付与するアクセス権を許可します(#130959 の修正)。通常の可視性チェックの後(最後)に判定され、属性が公開鍵を指定している場合のみ公開鍵の一致が要求されます。
変更内容
src/coreclr/tools/ILVerification/AccessVerificationHelpers.cs: 通常の可視性チェック後に属性ベースのアクセス判定を追加。公開鍵トークンの比較ロジックを再利用。src/coreclr/tools/ILVerification/ILVerifyTypeSystemContext.cs、Verifier.cs: 属性対応のための関連変更(詳細は提供情報からは不明)。src/coreclr/tools/ILVerify/ILVerifyRootCommand.cs、Program.cs: ILVerify ツール側の関連変更(詳細は提供情報からは不明)。src/coreclr/tools/ILVerification.Tests/ILTests/AccessTestsIgnoreChecks.il/.ilproj: private アクセスと公開鍵不一致を検証する新規テストフィクスチャを追加。src/coreclr/tools/ILVerification.Tests/ILMethodTester.cs、TestDataLoader.cs: 新規テストを実行するためのテスト基盤の調整。
作成者によると、新規の AccessTestsIgnoreChecks テストは main では失敗し、修正後は成功します。
パフォーマンスへの影響
影響なし(提供情報にパフォーマンスに関する記載はありません)。
関連Issue
その他
Copilot のレビューでは「変更推奨」とされ、以下の2点が未解決として指摘されています。
- (高) 属性が参照するフレンドアセンブリのアイデンティティ項目の検証が CoreCLR と異なるため、アクセスを許可する前にこれらの項目を検証すべき。
- (中) 公開鍵不一致の否定テストで使用している鍵が無効なアイデンティティであり、有効で異なる公開鍵を使うべき。
なお、Copilot による検証はソース確認と属性 blob のデコードに限られ、ビルドやテストは実行されていません。
#136021 JIT: keep lea esp, [ebp] in x86 epilogs
- 作成者: @pcshrosbree
- 作成日時: 2026年10月18日 02:27:34(UTC)
- マージ日時: 2026年10月20日 15:25:03(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
x86 JITのエピローグで lea esp, [ebp] を mov esp, ebp に書き換えないよう修正するPRです。#135793 で「変位0・ベースのみのLEAをレジスタ移動に書き換える」最適化が入りましたが、AMD64では rsp, [rbp] が例外になっていた一方、x86には同じ例外がありませんでした。
- localloc を使い、EBP以外のcallee-saved registerをpushしないメソッドは、エピローグで
lea esp, [ebp-0]によりESPを復元します。 - x86のGC-infoエピローグデコーダ(
gc_unwind_x86.inlのUnwindEbpDoubleAlignFrameEpilog)は、checkedビルドでこの命令のバイト列を検証し、変位0の場合は3バイトをスキップします。cDACのX86Unwinderも同様です。 - #135793 後は
mov esp, ebpが出力されるため、このようなエピローグでスレッドがGCサスペンドのhijackを受けると、checkedランタイムがSKIP_LEA_ESP_EBPでassertします。windows-x86 checkedのSystem.Text.Json.TestsとSystem.Runtime.Testsで発生したとのことです(詳細は #136020)。
変更内容
src/coreclr/jit/emitxarch.cppemitter::emitIns_R_ARXのスタックポインタ/フレームポインタの例外を、AMD64限定ではなく全xarchターゲットに適用します。これによりlea esp, [ebp]がそのまま出力されます。- コメントにx86側の利用箇所(デコーダ)を明記しています。
src/tests/JIT/Regression/JitBlue/Runtime_135793/Runtime_135793.cs- localloc を使う2つのメソッドに対する、disasmテスト(
HasDisasmCheck)です。x86ではlea esp, [ebp]の直後にpop ebpが続くことを確認します。
- localloc を使う2つのメソッドに対する、disasmテスト(
src/tests/JIT/Regression/JitBlue/Runtime_135793/Runtime_135793.csproj- 上記テストのプロジェクトファイルです。
検証結果(作成者による、linux-x64上でのクロスターゲット検証):
- 修正前: エピローグは
mov esp, ebp/pop ebp/retとなり、disasmチェックは失敗します。 - 修正後: エピローグは
lea esp, [ebp]/pop ebp/retとなり、チェックが通ります。 - AMD64には既に同じ例外があるため、x64コードへの影響はありません。同じメソッドのx64の出力は、サイズ・命令数・PerfScoreとも修正前後で同一とのことです。
パフォーマンスへの影響
影響なし。x64の出力はサイズ・命令数・PerfScoreとも変化しません。x86では特定のエピローグ(localloc使用時のESP復元)の命令が mov esp, ebp から lea esp, [ebp] に戻るのみです。
関連Issue
#136020(修正対象)。原因となった変更は #135793 です。
その他
- 実際のWindows x86ランタイムでの実行は未確認で、このPRのwindows-x86 checkedのCIレグで検証される予定です。
- 作成者の記載によれば、本変更はAI支援(Anthropic Claude、OpenAI Codexによる確認)で準備され、作成者がコードとdisassemblyを確認したとのことです。
#136006 [wasi] Set RUNTIME_IDENTIFIER and ENTRY_ASSEMBLY_NAME in wasihost
- 作成者: @lewing
- 作成日時: 2026年10月17日 20:31:34(UTC)
- マージ日時: 2026年10月20日 16:25:29(UTC)
- ラベル: arch-wasm area-Host os-wasi
概要
CoreCLR の WASI ホスト(wasihost)が RUNTIME_IDENTIFIER を設定していなかったため、RuntimeInformation.RuntimeIdentifier が "unknown" を返していた問題を修正します。ホストが wasi-wasm(Mono の WASI ドライバーと同じ値)を設定するようになり、あわせて ENTRY_ASSEMBLY_NAME も corerun や hostpolicy と同様に get_runtime_property から提供されます。また、#134964 で追加された runtimeconfig.bin リーダーを堅牢化しています。
変更内容
src/native/corehost/wasihost/wasihost.cppRUNTIME_IDENTIFIER(wasi-wasm)を設定ENTRY_ASSEMBLY_NAMEをget_runtime_propertyから返すように変更runtimeconfig.binリーダーの堅牢化:ファイルが存在しない場合のみ無視し、それ以外のオープン失敗は起動を停止(従来は全 feature switch が黙って破棄され得た)。末尾に余分なデータがある場合は拒否
RuntimeIdentifierTests.csVerifyWasiRidテストを追加(ホスト側の変更がないと失敗する)
System.Runtime.InteropServices.RuntimeInformation.Tests.csproj- これまで WASI では実行されていなかったため、
-wasiターゲットを追加
- これまで WASI では実行されていなかったため、
パフォーマンスへの影響
影響なし
関連Issue
- #134964(
runtimeconfig.binリーダーの導入元。本 PR で堅牢化) - #134952(
APP_CONTEXT_BASE_DIRECTORYはこのレイアウト決定を待つため本 PR では未対応)
その他
- 作成者によると、本 PR は GitHub Copilot の支援を受けて作成されています。
#135991 [wasm] Fix single-register struct call result stores (narrow stores, GC write barrier)
- 作成者: @lewing
- 作成日時: 2026年10月17日 03:27:49(UTC)
- マージ日時: 2026年10月20日 16:26:01(UTC)
- ラベル: arch-wasm area-CodeGen-coreclr
概要
Wasmにおいて、単一レジスタで返される構造体の呼び出し結果ストア(LowerStoreSingleRegCallStruct)が、構造体のWasm ABI型(4バイト未満の構造体やオブジェクト参照をラップする構造体では i32)に型を変更していた問題の修正です。
この問題により、Half や1バイト構造体のストアが4バイト書き込みとなって隣接領域を破壊していました(インプレースの TensorPrimitives.Tan<Half> で次の入力がゼロになる)。また、オブジェクト参照のストアではGC write barrierが失われていました(Wasmのオブジェクトは現状gen0に留まるため、現時点では実害なし)。
修正は LoongArch64/RISC-V64 と同じルールを採用し、構造体自身のレジスタ型を維持しつつ、float戻り値の場合のみ呼び出しの型を採用します。
変更内容
src/coreclr/jit/lower.cpp:LowerStoreSingleRegCallStructのストア型決定ロジックを修正(+7/-9)- 小さな構造体は
i32.store8/i32.store16を使用 - オブジェクトフィールドは
CORINFO_HELP_CHECKED_ASSIGN_REFを使用 - それ以外のストアは変更なし(
struct { float }/struct { double }はf32.store/f64.store、struct { long }はi64.store、struct { Vector128<int> }はv128.store) Int128は隠しリターンバッファを使用するため影響なし
- 小さな構造体は
src/libraries/System.Numerics.Tensors/tests/Helpers.cs,TensorPrimitives.Generic.cs,TensorTests.cs: この問題のために無効化されていた3つのTensorsテストを再有効化(計 -9行)src/tests/JIT/Regression_ro_2/Runtime_135117.cs: 回帰テストRuntime_135117を追加(+206行)
パフォーマンスへの影響
影響なし(ベンチマーク結果の記載なし)。SuperPMIのdiffsが添付されています。
関連Issue
#135117(本PRで解決)
その他
Runtime_135117は、元のJITではWASIのReadyToRunで失敗し、修正後は成功するとのことです。- CIのWASIランタイムテストのサブセットには
Regression_ro_2が含まれていません。 - #129555 の挙動(float/doubleのストア)は維持されます。
#135983 [browser] Make SystemJS_GetLocaleInfo argument order consistent
- 作成者: @lewing
- 作成日時: 2026年10月16日 22:32:00(UTC)
- マージ日時: 2026年10月20日 16:26:36(UTC)
- ラベル: arch-wasm area-System.Globalization os-browser
概要
SystemJS_GetLocaleInfo は C およびマネージド interop 側では (locale, culture, ...)(記述対象のロケール、次に表示言語)と宣言されていますが、TypeScript 実装と CoreLib の呼び出し側は (culture, locale, ...) の順で使っていました。リポジトリ内では両者の入れ替わりが打ち消し合って動作していましたが、宣言どおりに呼び出すと結果が誤っていました(例:fr-FR を en-US で記述すると anglais##États-Unis が返る)。
本PRは TypeScript 側のパラメータ順を宣言に合わせ、JSGetLocaleInfo / JSGetNativeDisplayName とその呼び出し元を更新します。リポジトリ内の動作は変わりません。
変更内容
src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.Browser.cs:JSGetLocaleInfo/JSGetNativeDisplayNameとその呼び出しの引数順を修正src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.Icu.cs: 上記に合わせて呼び出し側を更新src/mono/browser/runtime/globalization-locale.ts: TS 実装のパラメータ順を(locale, culture, ...)に変更src/native/libs/System.Native.Browser/native/globalization-locale.ts: 同上
パフォーマンスへの影響
影響なし
関連Issue
その他
- 内部実装(ブラウザ向けのグローバリゼーション interop)の引数順の整合性修正であり、公開APIの変更はありません。
- リポジトリ内の動作は変わらないとされています。
- PR説明は GitHub Copilot により生成されたものです。
#135968 [release/11.0] cDAC: skip empty assembly-list slots in Loader_1.GetModuleHandles
- 作成者: @pcshrosbree
- 作成日時: 2026年10月16日 18:46:02(UTC)
- マージ日時: 2026年10月20日 00:28:37(UTC)
- ラベル: Servicing-approved community-contribution area-Diagnostics-cdac
概要
release/11.0 に #135519 をバックポートするPRです。cDACの Loader_1.GetModuleHandles は、コレクティブルなアセンブリがアンロードされた際にAppDomainのアセンブリリストへ残る空スロットで例外をスローしていました。本PRはネイティブDACと同様に、このような空スロットをスキップするよう修正します。プロダクトコードの変更はnullチェックのみです。
変更内容
src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/Loader_1.cs(+4/-0): 空スロットをスキップする処理を追加docs/design/datacontracts/Loader.md(+7/-1): 疑似コードを更新src/native/managed/cdac/tests/UnitTests/LoaderTests.cs(+35/-0): 新規テストGetModuleHandles_SkipsEmptySlotsを追加src/native/managed/cdac/tests/UnitTests/MockDescriptors/MockDescriptors.Loader.cs(+51/-0): 新テストに必要なモックAppDomainのサポートを追加(#135516 由来)
自動バックポートはテストファイル2件でコンフリクトしました(release/11.0 に #135516 がないため)。そのため、新規テストと必要なモックサポートのみを追加しています。#135516 自体の修正とテストは含まれません。
影響範囲と互換性:
- cDAC(診断用データコントラクトリーダー)の内部実装の修正であり、公開APIの変更や破壊的変更はありません。
- 修正前は、
GetModuleHandlesを利用するAPIが失敗していました(例:ISOSDacInterface.GetAssemblyListが、アセンブリを返さず失敗のHRESULTを返す)。修正後は、残りのモジュールが返されます。 - この問題はコードを読んで発見されたもので、実プロセスやダンプでの再現は行っていません。
- リグレッションではありません。
GetModuleHandlesは元々(#114800 で追加、当時はGetModules、#117452 でリネーム)空スロットをスキップしていませんでした。
パフォーマンスへの影響
影響なし
関連Issue
その他
- リスクは低いです。プロダクトの変更は、ネイティブのイテレータ(
AppDomain::AssemblyIterator::Next_Unlocked)と同様に空スロットをスキップするnullチェックのみです。 - テスト結果: linux-x64、osx-arm64、windows-x64で
Microsoft.Diagnostics.DataContractReader.Testsの3098件がすべて成功しました。Loader_1.csをrelease/11.0の版に戻すと、新規テストの4ケースのみがVirtualReadExceptionで失敗し、テストが不具合を検出できることを確認しています。 - 作成者の記載によると、このPRはAI(Anthropic Claude、OpenAI Codexによる確認)の支援で作成され、作成者がレビュー済みです。
#135956 Simplify frozen object heap allocation
- 作成者: @MichalStrehovsky
- 作成日時: 2026年10月16日 13:57:28(UTC)
- マージ日時: 2026年10月20日 01:10:52(UTC)
- ラベル: area-NativeAOT-coreclr
概要
NativeAOT における Frozen Object Heap の割り当て実装を簡素化するPRです。プラットフォーム固有の仮想メモリ操作(reserve/commit/mprotect)を廃止し、共有のゼロ初期化済みネイティブ割り当てに置き換えます。作成者によれば、この機能は CoreCLR VM に比べて使用頻度が低いため、実装を単純化できるとのことです。Copilot の概要では、これにより WASM 上でも NativeAOT の frozen object 割り当てが有効になるとされています。
変更内容
FrozenObjectHeapManager.cs: セグメント割り当てを共有のゼロ初期化済みネイティブ割り当てに書き換え、初期セグメントサイズを小さくしました(+13/-71)。FrozenObjectHeapManager.Unix.cs/FrozenObjectHeapManager.Windows.cs: プラットフォーム固有の仮想メモリヘルパーを削除しました。System.Private.CoreLib.csproj: 上記ファイルのプロジェクト参照(5行)を削除しました。Interop.MProtect.cs: 不要になったマネージド側のMProtectinterop を削除しました。Reflection.cs(SmokeTests): 動的に生成された配列型について、強制 GC をまたいだランタイム型の同一性と rank を検証するテストを追加しました(+32)。
パフォーマンスへの影響
ベンチマーク結果は提供されていません。メモリ確保方式(仮想メモリの reserve/commit からゼロ初期化済みネイティブ割り当てへ)と初期セグメントサイズが変わるため、メモリ使用の挙動に影響する可能性がありますが、具体的な数値は不明です。
関連Issue
なし
その他
- Copilot のレビューで中程度の指摘が1件あります。アロケータの書き換えが、PR の意図とされる WASM 向けの範囲を超えてデスクトップ環境のメモリポリシーも変更しており、デスクトップでの検証が示されていない、という内容です。ゼロ初期化セグメント割り当ての変更を WASM に限定することが提案されています(該当レビューコメント)。
- 本PRは Copilot により「変更推奨(Changes recommended)」と評価されています。
#135952 Resolve WASI SDK for NativeAOT runtime test builds
- 作成者: @MichalStrehovsky
- 作成日時: 2026年10月16日 13:57:25(UTC)
- マージ日時: 2026年10月20日 01:50:54(UTC)
- ラベル: arch-wasm area-NativeAOT-coreclr
概要
NativeAOT の WASI 向けランタイムテストのビルドで、共有の WASI SDK を解決できるようにする変更です。AcquireWasiSdk.targets をインポートし、NativeAOT の OS 固有リンカー設定より前に WASI_SDK_PATH を設定します。グループ化されたテストビルドは別々の MSBuild プロセスで実行され、外側のターゲットで計算されたプロパティを継承しないため、この処理は各テストプロジェクトで行われます。あわせて、Unix 用の rpath リンカー引数から WASM を除外します。
変更内容
src/tests/Directory.Build.targets(+12/-1)- NativeAOT の WASI テストで
AcquireWasiSdk.targetsをインポートし、WASI_SDK_PATHを設定 - テストインフラの Unix rpath リンカー引数から WASM を除外
- NativeAOT の WASI テストで
パフォーマンスへの影響
影響なし(ビルド/テストインフラの変更であり、ランタイムの性能に関する記載はありません)
関連Issue
なし
その他
- 本 PR の検証は、未マージの他の有効化変更を含むローカルの NativeAOT WASI ブリングアップ環境で行われています。
nativeaot\SmokeTests\AttributeTrimming\AttributeTrimming.csprojのビルドに成功しました(テスト成果物の削除後も成功)。Wasmtime 上で終了コード 100 で実行されました。nativeaot wasm wasiの tree ビルドはテストのコンパイル/リンクまで進みましたが、既存のUnitTestsの lowering アサーションで失敗しています。C の数学 ABI 警告も残っています。
- このブランチは
mainから cherry-pick した 1 コミットのみを含み、単独ではビルドされていません。 - 自動実行の統合と Unix ホストでの検証は含まれていません。
#135893 JIT: Gate single-edge root profile trust on hotness or speed preference
- 作成者: @EgorBo
- 作成日時: 2026年10月15日 20:23:24(UTC)
- マージ日時: 2026年10月20日 14:01:28(UTC)
- ラベル: area-CodeGen-coreclr
概要
FullOpts のルートメソッドに対して「単一エッジの合成プロファイル(synthetic profile)を信頼する」処理を、メソッドの hotness またはスピード優先の指定がある場合に限定する JIT の変更です。すべての FullOpts ルートでこのプロファイルを信頼すると、短命な動的メソッドへの過剰なインライン化が起こり、LambdaExpression.Compile() が大幅に遅くなっていたため、これを修正します(#127203 の修正)。
以下のいずれかの条件を満たす場合のみ、既存の合成ルートプロファイルのロジックを維持します。
- メソッドに
[MethodImpl(MethodImplOptions.AggressiveOptimization)]が付いている JIT_FLAG_SPEED_OPTが設定されている(例: NativeAOT を prefer-speed でコンパイルした場合)- Tier0 または ReadyToRun からの昇格後に
JIT_FLAG_TIER1が設定されている
変更内容
src/coreclr/jit/fgprofilesynthesis.cpp(+7/-5): 単一エッジのルートプロファイルを信頼する条件に、上記3つの条件によるゲートを追加
インライン対象(inlinee)の挙動は従来どおりです。実際の PGO、および既存の cctor・サイズ・呼び出し回数による除外条件も変更ありません。
パフォーマンスへの影響
作成者による計測結果です(現行 main(.NET 12-dev)の Release ビルド、Windows x64、Ryzen 7950X、TieredPGO 有効、差分は clrjit.dll のみ)。
| 再現ケース | 修正前 | 修正後 | 改善 |
|---|---|---|---|
EntityGraphQL Compile() |
7.611 ms | 0.352 ms | 21.6倍高速 |
EntityGraphQL Compile(preferInterpretation: true) |
2.578 µs | 2.495 µs | ほぼ変化なし |
| LINQ-stub 再現(クエリあたり) | 5.823 ms | 0.777 ms | 7.5倍高速 |
- EntityGraphQL は元のベンチマークソースを使用し、BenchmarkDotNet の平均値(計測イテレーション8回)を採用しています。
- 未改変の LINQ-stub プログラムは、バージョンごとに2回起動し、ウォーム状態のラウンド(1ラウンド2,000クエリ)の中央値を採用しています。
関連Issue
その他
なし
#135863 corehost: singlefilehost fixes for OpenHarmony
- 作成者: @springmin
- 作成日時: 2026年10月15日 12:54:39(UTC)
- マージ日時: 2026年10月20日 04:57:08(UTC)
- ラベル: area-Host community-contribution
概要
OpenHarmony(OHOS)向けに singlefilehost(静的 apphost)をビルドできるようにするための CMake 修正です。OHOS 上では NATIVE_LIBS_EMBEDDED と System.Net.Security.Native-Static をスキップし、runtimeinfo のリンクを $<LINK_LIBRARY:WHOLE_ARCHIVE> ジェネレーター式ではなく明示的な whole-archive リンカーフラグで行うよう変更しています。作成者によれば、この式は OpenHarmony NDK ツールチェーンでは使用できないためです。
変更内容
src/native/corehost/apphost/static/CMakeLists.txt(+13/-6)- OHOS では
NATIVE_LIBS_EMBEDDEDを扱わない条件分岐を追加 - OHOS では
System.Net.Security.Native-Staticへのリンクをスキップ - OHOS では
runtimeinfoを明示的な whole-archive フラグでリンク
- OHOS では
パフォーマンスへの影響
影響なし(ビルド構成の変更のみで、ベンチマーク結果の記載もありません)。
関連Issue
なし
その他
- 作成者のテスト内容は、
openharmony-arm64向けに静的 apphost をクロスビルドし、シングルファイルアプリを publish するというものです。 - Copilot のレビューでは、以下の指摘がありました。
- 1回目のレビューで、「embedded natives の無効化により圧縮バンドルの展開が壊れる」(High)と、「メタデータ変更時に
runtimeinfoターゲットがホストを再リンクしない」(Medium)という指摘があり、いずれも 2回目のレビュー時点で解決済みとされています。 - 2回目のレビューでは、OpenHarmony の sysroot に GSSAPI がない場合、セキュリティ依存関係の探索ブロックが依然として構成を妨げるという指摘(High)が未解決で残っています。OHOS をこのブロックから除外することが推奨されています。また、クロスビルドと publish の検証は実行されていないとされています。
- 1回目のレビューで、「embedded natives の無効化により圧縮バンドルの展開が壊れる」(High)と、「メタデータ変更時に
#135853 JIT: spill local refs for COMMA-wrapped local stores in impAppendStmt
- 作成者: @EgorBo
- 作成日時: 2026年10月15日 09:45:40(UTC)
- マージ日時: 2026年10月20日 17:40:24(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITのimporterにおいて、クラス初期化ヘルパーのCOMMAでラップされたローカル変数ストアを impAppendStmt が認識できず、スタック上の保留中ローカル参照がspillされないため、構造体のタプルスワップで旧値ではなく新値が読み込まれる不具合を修正します。
ブロック先頭(impLastStmt == nullptr)では、impStoreStruct が構造体ストアをクラス初期化ヘルパーのCOMMAの下に沈めます(例:静的構造体フィールドへの starg)。従来の impAppendStmt は、ステートメントのルートがローカルストアである場合のみをローカルストアとして扱っていました。本修正ではCOMMAを辿って格納先のローカルを特定します。
変更内容
src/coreclr/jit/importer.cpp(+4/-4): ローカル変数ストアの判定でCOMMAを辿り、格納先ローカルを特定するよう変更(Copilotの概要によればgtEffectiveVal()を使用)。src/tests/JIT/Regression_ro_2/Runtime_135809.cs(+36/-0): 静的構造体フィールドとクラス初期化を含むタプルスワップが元の値を保持することを検証する回帰テストを追加。
パフォーマンスへの影響
影響なし(diffsもなし)。
関連Issue
- #135809(本PRで修正)
その他
- Copilotのレビュー概要では、修正自体は妥当に見えるものの、checked runtimeでのTier0およびFullOptsにおける検証は未確認とされています。
- 影響範囲はJITコンパイラの内部実装(importer)であり、公開APIや互換性への影響に関する記載はありません。
#135837 JIT: ignore finally-entry backedges when fixing continuation weights
- 作成者: @EgorBo
- 作成日時: 2026年10月15日 01:54:52(UTC)
- マージ日時: 2026年10月20日 13:55:24(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITの importer.cpp において、finallyハンドラのcontinuation(BBJ_CALLFINALLY とペアになる継続ブロック)の重みを修正する処理で発生していたnull参照を修正します。finallyハンドラには callfinally 以外の通常のバックエッジ(ループなど)を持つ先行ブロックが存在し得ますが、これらがフィルタされないままペアのcontinuationにアクセスしていました。そのため、callfinally 以外の先行ブロックを処理前に除外するようにしています。EH-edgeの構築時のフィルタ方法と揃える形です。
変更内容
src/coreclr/jit/importer.cpp(+5/-0): continuationにアクセスする前に、BBJ_CALLFINALLY以外の先行ブロック(finallyエントリへの通常のバックエッジ)をスキップする処理を追加。src/tests/JIT/Regression_ro_2/Runtime_135819.cs(+33/-0): finallyハンドラ内に無限ループを持つ回帰テストを追加。報告されたクラッシュのシナリオを再現するものです。
パフォーマンスへの影響
影響なし(クラッシュ修正のみ。PR作成者によると diffs も差分なし)。
関連Issue
#135819(本PRで修正)
その他
- Copilotのレビューでは未解決の指摘は0件ですが、プロファイル重み付きコンパイル下での回帰テストの実行が未検証であり、人間による確認が必要とされています。
- 修正はJIT内部の実装に限定され、公開APIや互換性への影響に関する記述はありません。
#135823 JIT: preserve null checks when folding ThrowIfNull in Tier0
- 作成者: @Copilot
- 作成日時: 2026年10月14日 22:29:35(UTC)
- マージ日時: 2026年10月20日 14:02:16(UTC)
- ラベル: area-CodeGen-coreclr
概要
Tier0 において ArgumentNullException.ThrowIfNull(r.Ref) のように CORINFO_HELP_BOX が畳み込まれる際、構造体の読み取りが削除され、null の byref に対して NullReferenceException がスローされなくなる問題の修正です。インポーターで、null の可能性があるソースアドレスに対して GT_NULLCHECK を保持するようにし、paramName の評価より前に null チェックが行われるようにしています。
変更内容
src/coreclr/jit/importercalls.cpp(+8/-3)CORINFO_HELP_BOXの畳み込み時に、null の可能性があるソースアドレスに対してGT_NULLCHECKを保持するよう変更(paramNameの評価より前)。
src/tests/JIT/Regression_ro_2/Runtime_135822.cs(+77/-0)- Tier0 で分離して実行される回帰テスト(theory)を追加。null の byref と有効な byref の両方、さらに引数の評価順序と副作用を検証。
パフォーマンスへの影響
影響なし(提供情報にベンチマーク結果の記載はなく、diffs でも差分なしとされています)。
関連Issue
その他
なし
#135731 Merging internal commits for release/8.0
- 作成者: @dotnet-release-bot[bot]
- 作成日時: 2026年10月13日 23:17:39(UTC)
- マージ日時: 2026年10月20日 17:43:18(UTC)
- ラベル: area-System.Security community-contribution
概要
release/8.0ブランチへ内部コミットをマージするPull Requestです(#135731、作成者: dotnet-release-bot[bot])。
作成者・Copilotによる概要、および変更ファイルの情報が提供されていないため、具体的な変更の目的や技術的内容は判断できません。タイトルからは、リリース用に内部リポジトリのコミットを公開ブランチへ取り込む定型的な作業とみられますが、個別の修正内容(セキュリティ修正の有無など)は記載がなく不明です。
変更内容
変更ファイルの情報が提供されていないため、記載できません。
パフォーマンスへの影響
提供された情報からは判断できません(ベンチマーク結果などの記載なし)。
関連Issue
なし
その他
- 変更ファイル一覧が空のため、ランタイム/コンパイラ/ライブラリのどの部分に影響するか、互換性への影響(破壊的変更など)、CVE番号の有無はいずれも確認できません。
- 詳細は、PR本体のコミット一覧や差分を直接確認する必要があります。
#135727 Merging internal commits for release/8.0
- 作成者: @dotnet-release-bot[bot]
- 作成日時: 2026年10月13日 21:51:52(UTC)
- マージ日時: 2026年10月20日 17:43:01(UTC)
- ラベル: area-System.Security community-contribution
概要
release/8.0 ブランチに対して内部コミットをマージするPull Request(#135727)です。作成者は dotnet-release-bot[bot] で、リリース作業の一環として自動作成されたものと見られます。
提供された情報には、作成者による概要・Copilotによる概要・変更ファイル一覧のいずれも含まれておらず、具体的な変更内容や技術的な詳細は確認できません。
変更内容
変更ファイルの情報が提供されていないため、具体的な変更内容は不明です。タイトルからは、内部コミットを release/8.0 にマージする内容であることのみが読み取れます。
パフォーマンスへの影響
影響なし(提供情報からはパフォーマンスに関する変更は確認できません)
関連Issue
なし
その他
- 本要約はPRタイトルと作成者情報のみに基づいています。
- セキュリティ修正、バグ修正、互換性への影響の有無などは提供情報からは判断できません。
- 変更ファイルの一覧や差分が提供されれば、より具体的な要約が可能です。
#135653 Load CoreCLR browser-WASM PDBs into memory instead of the VFS
- 作成者: @jkoritzinsky
- 作成日時: 2026年10月13日 00:18:23(UTC)
- マージ日時: 2026年10月20日 16:04:01(UTC)
- ラベル: area-Host
概要
CoreCLRのbrowser-WASMホストが、PDBをEmscriptenの仮想ファイルシステム(VFS)ではなく、アセンブリと同様にリニアメモリ上に登録するよう変更されました。これによりJavaScriptのファイルシステムサポートへの依存が不要になり、MonoのbrowserWASMにおけるシンボル読み込み方式とも揃います。
スタックトレースでファイル情報が要求された際、CoreCLRは保持されているCodeViewエントリからポータブルPDBのファイル名を遅延的に特定し、既存の外部アセンブリプローブ経由でホストに問い合わせます。取得したPDBは Module::SetInMemorySymbolStream によってモジュール所有のシンボルストリームとしてキャッシュされます(SetSymbolBytes に伴う動的シンボル通知を回避するため)。
変更内容
src/coreclr/vm/debugdebugger.cpp(+92/-0): スタックトレースのファイル情報要求時に、CodeViewエントリからPDBファイル名を取得し、ホストをプローブしてインメモリのシンボルストリームをキャッシュする処理を追加。WebCILは CodeView 情報を保持するため既存のPDB命名規則(WindowsおよびUnixのビルドパスを含む)で検索。シンボルのないWebCILフレームでは、マネージドPEリーダーへのフォールバックをスキップ(未サポート形式の例外が後続フレームのシンボル検索を中断するのを防ぐため)。src/native/libs/Common/JavaScript/host/assets.ts(+23/-16) およびsrc/native/libs/Common/JavaScript/loader/assets.ts(+1/-1): PDBバイトをVFSではなくリニアメモリに登録し、外部アセンブリプローブから参照できるように変更。src/libraries/System.Diagnostics.StackTrace/tests/StackTraceSymbolsTests.cs(+35/-2): CoreCLR・Mono双方を対象としたブラウザ回帰テストを追加。正確なソースファイル名・行番号、繰り返し検索、VFS上にPDBが存在しないことを検証。既存のファイルロックテストも調整。src/libraries/System.Diagnostics.StackTrace/tests/System.Diagnostics.StackTrace.Tests.csproj(+1/-1): テストプロジェクトから明示的なPDBのVFSステージングを削除。
パフォーマンスへの影響
影響なし(ベンチマーク結果の記載なし)。PDBはスタックトレースでファイル情報が要求された際に遅延的に検索・キャッシュされます。
関連Issue
なし
その他
検証状況:
build.cmd clr+libs -os browser -a wasm -c Debug: 成功(警告・エラーなし)- CoreCLR browser-WASMテスト(NodeJS上で実行、ブラウザUIではない): 136件成功・5件スキップ。
WasmEnableWebcil=falseでも同結果(テスト条件拡張前)。 - 新規回帰テストは、外部PDBプローブを無効化すると失敗し、修正後は成功することを確認。
build.cmd mono+libs -os browser -a wasm -c DebugはpythonがPATHに存在せずgenmintops.py実行時に失敗(終了コード9009)。Monoでのテスト実行は未検証。
#135494 [cDAC][wasm] Keep caller SP for non-R2R callers and restore SoftwareExceptionFrame FP
- 作成者: @lewing
- 作成日時: 2026年10月09日 14:04:04(UTC)
- マージ日時: 2026年10月20日 16:14:03(UTC)
- ラベル: area-Diagnostics-cdac
概要
wasm向けcDAC(R2Rスタックウォーカー)のアンワインダを、ネイティブの WasmUnwindStackFrameCore / UpdateRegDisplay_Impl の挙動に揃える修正です。主な変更は次の3点です。
- 非R2Rの呼び出し元: SPをクリアせず、IPとFPを null にしたうえで呼び出し元のSPを保持するようにしました。従来は、自身のフレーム内にアクティブな
InlinedCallFrameを持つR2Rメソッドが、ウォーカーがそのフレームを越えられないため繰り返し報告されていました。 SoftwareExceptionFrame: IP・SPに加えてFPも復元するようにしました。FP(InterpreterFP)はwasmで唯一のcallee-savedレジスタですが、wasmではCalleeSavedRegistersディスクリプタが空のため、FPが前フレームの値のまま残っていました。- 非アクティブな
InlinedCallFrame: ネイティブと同様に、インタプリタフレームのスタッシュへ書き込む前に return するようにしました。
変更内容
docs/design/datacontracts/StackWalk.md: 上記の挙動に合わせてドキュメントを更新(+24/-2).../StackWalk/Context/Wasm/WasmUnwinder.cs: 非R2R呼び出し元でSPを保持する処理に変更(+7/-10).../StackWalk/Context/WasmContext.cs: コンテキスト関連の小変更(+4/-3).../StackWalk/FrameHandling/WasmFrameHandler.cs:SoftwareExceptionFrameのFP復元と、非アクティブなInlinedCallFrameでの早期 return を追加(+19/-1)src/native/managed/cdac/tests/UnitTests/StackWalkTests.cs: スタックウォークのテストを追加(+165/-0)src/native/managed/cdac/tests/UnitTests/WasmUnwinderTests.cs: アンワインダのテストを追加(+30/-0)
なお、以前の reverse P/Invoke チェックは、#135440 でタグ付きフレームのIDからそれらのルートを識別できると判明したため削除されています。
パフォーマンスへの影響
影響なし
関連Issue
- #135440(reverse P/Invoke のルート識別に関する言及)
- #135147(今回の対象外:ファンクレット内からウォークを開始した場合のリーフFP)
- #134608(#135147 が依存)
その他
今回のPRに含まれないもの:
- wasmでの
IStackWalk.GetRuntimeFramePointer(ネイティブのGetRegdisplayStackMarkにTARGET_WASM実装がなく、揃える対象がないため) - ファンクレット内からウォークを開始した場合のリーフFP対応(#135147、#134608 に依存)
#135146 [wasm] [JIT] Contain Array Data Offsets
- 作成者: @adamperlin
- 作成日時: 2026年10月03日 00:49:30(UTC)
- マージ日時: 2026年10月20日 00:23:24(UTC)
- ラベル: area-CodeGen-coreclr
概要
WebAssembly (Wasm) 向けJITにおいて、配列要素アクセスのアドレス計算を並べ替え、配列データオフセットをload/storeのメモリオペランドに畳み込めるようにする変更です(#134465 を解決)。既存のcontainment(包含)ロジックの制約(アドレスが TYP_REF または TYP_BYREF であること)の範囲内で動作します。作成者によれば、同様の並べ替えはRISC-Vでは既に行われています。
変更内容
src/coreclr/jit/morph.cpp(+3/-0)- Wasm向けに、非構造体の配列でGC型の配列参照に限り、アドレスを
(array + scaledIndex) + dataOffsetの形に再構成する処理を追加。
- Wasm向けに、非構造体の配列でGC型の配列参照に限り、アドレスを
パフォーマンスへの影響
実行時の速度やメモリに関する具体的な数値の記載はありません。作成者はコード生成の差分(Diffs)へのリンクを提示していますが、その内容は提供情報からは確認できません。Copilotのレビュー概要では、Wasmのコードサイズ改善という主張に対する直接的な検証がPR内に不足していると指摘されています。
関連Issue
その他
- 影響範囲はJITのmorph段階のWasm向けコード生成(内部実装)で、公開APIや互換性への影響に関する記載はありません。
- Copilotレビューの指摘事項(Findings)はなしで、変換自体は妥当と評価されています。
#135067 Enable ILLink caching and post-build purging in CI
- 作成者: @sbomer
- 作成日時: 2026年10月01日 22:30:48(UTC)
- マージ日時: 2026年10月20日 23:36:18(UTC)
- ラベル: linkable-framework area-Tools-ILLink
概要
CIのLinux x64 / Windows x64 / macOS arm64 の CoreLib/libraries ジョブで、実験的な ILLink タスクキャッシュを有効化します。Azure Pipelines からジョブ専用のキャッシュを復元し、プラットフォームと構成ごとにスナップショットを分離します。ビルドとポストビルドの完了後、今回のビルドで使われなかったエントリを削除(purge)してから次のスナップショットを保存します。
作成者の報告によると、CIビルド 1642482 でのリンカーキャッシュのヒット数は次のとおりです。
- Linux / macOS: 254/255(99.6%)
- Windows: 252/255(98.8%)
3プラットフォームすべてで、復元・再利用・purge・スナップショット保存が成功したとのことです。
変更内容
eng/pipelines/coreclr/templates/setup-illink-cache.yml(新規): ILLinkキャッシュのスナップショット復元とキャッシュ有効化の設定eng/pipelines/coreclr/templates/purge-illink-cache.yml(新規): ポストビルドで未使用エントリを削除するメンテナンス手順(致命的エラーにしない運用)eng/pipelines/coreclr/templates/setup-build-caches.yml: キャッシュ設定側にILLinkキャッシュ設定を組み込みeng/pipelines/common/global-build-job.yml: ポストビルドステップの後に purge を実行するよう追加eng/pipelines/global-build.yml: 対応する設定の追加docs/tools/illink/illink-tasks.md: 設定とCIでのメンテナンスに関するドキュメント更新docs/design/tools/illink/task-cache.md: 設計ドキュメントの微修正
なお、PR全体(Copilotの概要より)では、ILLinkタスクのキャッシュ実装(ILLinkCache.cs など)、purge用ツール(ILLink.CacheTool)、関連テストの追加も含まれています。ただし本要約で挙げた変更ファイルはCI/ドキュメント関連のみです。
パフォーマンスへの影響
ILLinkの実行結果をキャッシュ再利用することでCIのビルド時間短縮が期待されます。上記ビルドでは98.8〜99.6%のキャッシュヒット率が報告されています。ただし、CIの実行時間の具体的な短縮値は提供情報に含まれていません。Copilotのレビューでは、CI上での実際の効果について人間による検証が必要と指摘されています。
関連Issue
なし
その他
- 機能は「実験的(experimental)」と位置付けられています。
- Copilotレビューの指摘(キャッシュキーへのビルド構成の包含、
NUGET_PACKAGESの設定、purge失敗がキャッシュ保存を妨げる問題)は、最終的にすべて解決済みと記載されています。 - Copilotは、ビルド・パイプラインテストは未実行であり、プラットフォーム間のキャッシュ復元・purge実行・ポストジョブでのスナップショット保存についてCI上での確認が必要としています。
#135066 Support ILLink caching in runtime library builds
- 作成者: @sbomer
- 作成日時: 2026年10月01日 22:30:44(UTC)
- マージ日時: 2026年10月20日 16:46:56(UTC)
- ラベル: linkable-framework area-Tools-ILLink
概要
ランタイムのライブラリビルド(共有フレームワーク、out-of-band、ライブラリ単位のトリミング)で実行される ILLink を、実験的な ILLink キャッシュの対象にする変更です。キャッシュは引き続きオプトインです。既存のタスクパラメータを可能な限り再利用し、リンク属性・置換・アセンブリ検索ディレクトリに必要な範囲の追加引数形式のみをサポートします。アセンブリ解決や独自引数の優先順位は変更せずに、これらの入力をフィンガープリント化します。
変更内容
src/tools/illink/src/ILLink.Tasks/LinkTask.cs: サポート対象の引数を解析し、XML ファイル、アセンブリ候補、サイドカーなどの入力をハッシュ化してフィンガープリントに含める処理を追加。eng/illink.targets: ライブラリ単位のトリミングをキャッシュ対象にし、オプションを既存のタスクパラメータへ移行。src/libraries/oob-trim.proj: 警告抑制をタスクパラメータに変更。src/libraries/sfx-finish.proj: シンボル保持(symbol retention)をタスクパラメータで指定するよう変更。src/tools/illink/test/ILLink.Tasks.Tests/ILLink.Tasks.Tests.cs: 入力変更時のキャッシュ無効化とキャッシュバイパスのテストを追加。docs/design/tools/illink/task-cache.md,docs/tools/illink/illink-tasks.md: フィンガープリントとバイパスのルール、サポートされるキャッシュ入力に関するドキュメントを更新。
パフォーマンスへの影響
Linux x64 のプロトタイプ計測では、キャッシュヒット時の ILLink タスク時間が以下のように短縮されました。
- CoreLib: 4,103 ms → 80 ms
- System.Collections: 1,036 ms → 63 ms
これはタスク単位の計測であり、ビルド全体の高速化ではありません。
関連Issue
なし
その他
- Copilot のレビューでは、以下の 2 点が中程度の指摘として挙げられ、「変更推奨」と判定されています。
- カスタム引数が、先に強制された未解決参照のスキップ設定を上書きしてしまう。
- カスタム引数が、末尾のシンボル書き換え設定を上書きしてしまう。
- いずれもキャッシュ無効時でも動作が変わり得る点が懸念されています。
- ビルドとテストは実行されていないと記載されています。
- 作成者によると、この内容は AI の支援を受けて作成されています。
#134910 [JIT] Rationalize: Re-run pre-order processing on identity shuffle rewrite in PreOrderVisit
- 作成者: @adamperlin
- 作成日時: 2026年09月30日 00:56:59(UTC)
- マージ日時: 2026年10月20日 16:18:47(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITのRationalizeフェーズにおいて、PreOrderVisit中のRewrite*Intrinsicで別ノードに置き換えられた場合、その置換後ノードに対して前処理(pre-order processing)が実行されない問題を修正します(#133787 の解決)。
問題となるIRは、外側のShuffleが恒等シャッフルであり、RewriteHwIntrinsicAsUserCallで畳み込まれて消える一方、置換ノードとなる内側のShiftRightLogical128BitLane(引数が非定数のためGT_CALLへの書き戻しが必要)が処理されないケースです。修正により、Rewrite*Intrinsicが異なるノードを返した場合、その新しいノードに対して処理ロジックを再実行します。
変更内容
src/coreclr/jit/rationalize.cpp: 置換されたノードに対してpre-order処理を再実行するよう変更(+43/-2)src/coreclr/jit/rationalize.h: 変更あり(+28/-28)。内容の詳細は提供情報からは不明src/tests/JIT/Regression_ro_2/Runtime_133787.cs: 回帰テストを追加(+51/-0)
Copilotのレビュー概要によると、ノードが変化しなくなるまでintrinsicの書き換えを繰り返し、ネストされた遅延ハードウェアintrinsicがユーザー呼び出しに変換されるようにしています。
パフォーマンスへの影響
影響なし(提供情報にパフォーマンスに関する記載なし)
関連Issue
その他
- Copilotのレビューでは、Checked-buildで報告された回帰の再発防止のため、非定数の
Vector128.Shuffle即値に対する的を絞ったテストの追加が推奨されています(Medium severity、指摘1件)。 - 本PRでは
Runtime_133787.csが追加されていますが、このレビュー指摘への対応状況は提供情報からは確認できません。
#134819 Update x64 Helix test VMs to Azure Linux 4
- 作成者: @richlander
- 作成日時: 2026年09月28日 21:32:24(UTC)
- マージ日時: 2026年10月20日 21:52:51(UTC)
- ラベル: area-Infrastructure
概要
runtime が所有する x64 Helix のコンテナホストを Azure Linux 3 から Azure Linux 4 (AzureLinux.4.Amd64[.Open]) に移行するPRです。スタンドアロンの Helix テスト VM は引き続き Azure Linux 3 (AzureLinux.3.Amd64[.Open]) のままです。
- Azure Linux 4 はコンテナのホスト専用で使用します。Azure Linux 4 のパッケージリポジトリに現時点で
libmsquicが存在しないため、ベアのテスト VM としては選択していません(Azure Linux 4 用 Helix prerequisite コンテナが、Azure Linux 3 のms-ossフィードからlibmsquicをインストールして対処)。 - Azure Linux 3 / 4 の明示的なコンテナテストのカバレッジは維持され、変わるのは基盤となる Helix ホストのみです。
- Azure Pipelines のビルドエージェントは、ビルドプールに Azure Linux 4 イメージがないため
build.azurelinux.3.amd64[.open]のままです。 - コンテナのタグやダイジェストは変更されておらず、MCR イメージの可用性への影響はありません。
変更内容
Helix キュー設定の YAML 4ファイルを更新しています(計 +30/-30)。
eng/pipelines/coreclr/templates/helix-queues-setup.yml(+4/-4)eng/pipelines/helix-platforms.yml(+12/-12)eng/pipelines/installer/helix-queues-setup.yml(+1/-1)eng/pipelines/libraries/helix-queues-setup.yml(+13/-13)
パフォーマンスへの影響
影響なし(CI インフラの設定変更のみ)。
関連Issue
なし
その他
- 作成者による検証:
git diff --check通過- 変更した4つの YAML を Ruby の
YAML.load_fileでパースして成功 - スタンドアロンの
AzureLinux.4.Amd64[.Open]キュー値が残っていないことを確認 - 残存する Azure Linux 4 参照がすべてコンテナホストの複合マッピングであることを確認
build.azurelinux.4.amd64参照が残っていないことを確認
- カバレッジ: デフォルトの
runtimeパイプラインが主要なコンテナホストのマッピングを、runtime-extra-platformsが Fedora、Debian、openSUSE、Alpine edge を支えるホストの変更をカバーします。 - Azure Linux はこれらのリリースについて固定のサポート終了日を公開していません。
#133533 Convert .data tls IL tests to C++/CLI
- 作成者: @jkoritzinsky
- 作成日時: 2026年09月09日 20:21:44(UTC)
- マージ日時: 2026年10月20日 17:25:03(UTC)
- ラベル: area-ILTools-coreclr
概要
.data tls を使用していた4つのILテストを、C++/CLI(IJW)ベースのテストへ変換するPRです。これらのテストは実際にはC++/CLIのシナリオを検証するものであり、そのシナリオはC++/CLI経由でのみサポートされているため、変換が行われました。ネイティブ側はC++/CLIで実装し、マネージド側のラッパーが UnsafeAccessor / UnsafeAccessorType を使ってネイティブの静的エントリポイントを呼び出します(リフレクションは不使用)。
変換対象:
JIT/Directed/tls/Test-TLSJIT/Directed/tls/MutualRecurThd-TLSJIT/Regression/CLR-x86-JIT/V1.2-M01/b03689JIT/Regression/CLR-x86-EJIT/v1-m10/b07847
ネイティブ側のTLSは、ファイルスコープの __declspec(thread) グローバル変数で実装され、#pragma unmanaged/#pragma managed の配置が使われます。
変更内容
- ビルド基盤
src/tests/Interop/Directory.Build.targetsにあった、IJW向けネイティブランタイム依存(Debug CRT/UCRT)のコピー処理をsrc/tests/Directory.Build.targetsへ移動し、Interopツリー外でも再利用可能にしました。Interop専用のTestLibraryProjectPathの上書きはInterop/Directory.Build.propsに残しています。eng/native/ijw/IJW.cmakeに13行追加されています(変更内容の詳細は提供情報からは不明)。
- 新規追加(各テスト)
- ネイティブC++/CLI実装(
.cpp)とそのCMakeLists.txt - マネージドラッパー(
.cs/.csproj) JIT/Directed/tls配下はcppcli/(TestTLSNative.cpp)とcppcli-mutual/(MutualRecurThd-TLS.cpp)のサブディレクトリを追加し、tls/CMakeLists.txtから参照しています。
- ネイティブC++/CLI実装(
- 削除
- 元の
.ilファイル(MutualRecurThd-TLS.ilは約3,300行)と.ilproj
- 元の
- 参照更新
Directed_ro.csprojのマージテスト参照を.ilprojから.csprojに変更しました。
パフォーマンスへの影響
影響なし(テストコードの変換であり、ランタイム/ライブラリ本体への変更はありません)。
関連Issue
- #133538(Copilotのレビューコメント内で、ネイティブTLSの再現コードの出典として言及されています)
その他
- 本PRはGitHub Copilotの支援を受けて作成されています。
- Copilotのレビュー経過:
- 初回: 4つの
.csprojにIJW固有フラグが不足している点が指摘され、その後解決済みとされています。 - 2回目:
TestTLSNative.cppで#pragma unmanaged/managedの分離がPR説明と一致していない点が指摘されました。 - 最新: 「Needs a closer look」で、直近の新規指摘は0件です。ただし以下は「Previously missed」として残っています。
- 4つのネイティブ
.cppに#pragma unmanaged/managedの境界がなく、IJWのTLSコードパスを確実に検証できない可能性があります。 - 4つの
.csprojにCrossGenTest=falseの指定が必要です(既存のIJWテストは混在モードがcrossgen2と非互換のため無効化している)。
- 4つのネイティブ
- 初回: 4つの
- 古い指摘として、IJWテストをChecked buildでゲートすべきというものもありましたが、その解消状況は提供情報からは不明です。
#131428 Ensure that x64 disassembly names operands at the size actually encoded
- 作成者: @tannergooding
- 作成日時: 2026年07月27日 17:22:50(UTC)
- マージ日時: 2026年10月20日 16:55:59(UTC)
- ラベル: area-CodeGen-coreclr
概要
x64 JITの逆アセンブリ表示(emitDispIns とその補助関数)において、実際にエンコードされたバイト列と一致しないオペランドサイズが表示される問題を修正します。表示のみの変更であり、コード生成は変わりません。
movzxのデスティネーションが64bitと表示されていた- GC型のレジスタ自己ゼロ化
xorが64bitと表示されていた v{extract,insert}{f,i}32x4のimm8レーンセレクタが表示されなかったmovmskps/movmskpdのデスティネーションが64bit GPRと表示されていたcvtsi2*/vcvtusi2*/vmovdのGPRオペランド名がベクトルサイズ基準になっていた- 縮小変換(narrowing convert)のメモリ形式でデスティネーションが元サイズで表示されていた
- ブロードキャスト命令のソースがデスティネーション幅で表示されていた
修正例(同一バイト列でも表示が変わる):
before after
C4E27D78C0 vpbroadcastb ymm0, ymm0 vpbroadcastb ymm0, xmm0
62F2FD4819C0 vbroadcastsd zmm0, zmm0 vbroadcastsd zmm0, xmm0
変更内容
src/coreclr/jit/emitxarch.cpp(+159/-29)emitDispConstant:INS_FLAGS_HasPseudoNameによる早期リターンの例外として、{vextract,vinsert}{f,i}32x4ではimm8を表示emitDispIns:movzxをmovsxと分離し、デスティネーションを32bit表示に(ARD/SRD/RRD/MRDの4箇所)。movsxは実際にREX.Wが付くため従来どおり64bitxor reg, regがidOpSize(EA_4BYTE)に縮退された場合に合わせて表示を修正movmskps/movmskpdをpmovmskbと同様に32bit GPR表示にcvtsi2*/vcvtusi2*/vmovdのGPRオペランド名をGetInputSizeInBytes(Input_32Bit/Input_64Bitフラグ)から決定- ベクトルソースのブロードキャストでソースをxmm(下位要素)として表示
GetNarrowedDstAttrを新設し、レジスタ形式とARD/SRD/MRDのメモリ形式で共有(/213件、/43件の手動リスト)
パフォーマンスへの影響
影響なし。表示のみの変更で、コード生成は不変です。
- System.Private.CoreLib の75,012メソッドを(ニーモニック, エンコード長)で比較し、差分は4件のみ。これはP/Invokeインラインフレーム呼び出しのヘルパーターゲットがASLRにより
rel32範囲内外に移動するためで、同一JITを2回実行した対照実験でも再現を確認済み
検証結果(CoreLibのバイト精度PMIコーパス、1,134,687命令を確認、幅の不一致は0件):
| base | this PR | |
|---|---|---|
64bit dstの movzx |
19,815 | 0 |
64bit表示の自己ゼロ化 xor |
13,256 | 0 |
64bit dstの v?movmskp[sd] |
211 | 0 |
ymm<-ymm/zmm<-zmm 表示のブロードキャスト |
89 | 0 |
セレクタ表示ありの vextract/vinsert*32x4 |
0 | 52 |
関連Issue
なし
その他
- 既知の未対応事項:
JitDump時にemitDispIGから呼ばれるemitDispInsは、xorの縮小がまだ行われていない出力前の段階で呼ばれるため、そのパスでは従来の広い名前が表示されます。EA_SIZE(EA_GCREF) == idOpSize()となり新条件が単に偽になるだけで、誤表示にはなりません GetNarrowedDstAttrはメタデータのみでは縮小変換を判別できない(cvtpd2psとvaddpsが同じ比率になる)ため、手動メンテナンスのリストです。静的監査では漏れ・不要エントリはなしとのことです- CoreLibはブロードキャストのレジスタ形式を出力しないため、ターゲットを絞ったリプロで8命令の修正を確認しています
- 作者によればGitHub Copilotを用いて作成されています
#129510 [release/10.0] Fix MemoryCache negative _cacheSize drift that permanently latches a size-limited cache
- 作成者: @github-actions[bot]
- 作成日時: 2026年06月17日 10:36:28(UTC)
- マージ日時: 2026年10月20日 08:33:34(UTC)
- ラベル: Servicing-approved blocked area-Extensions-Caching
概要
MemoryCache(SizeLimit 設定時)で、内部のサイズカウンター _cacheSize が並行処理下で負の値にドリフトし、キャッシュが永続的に使用不能になる不具合の修正を release/10.0 にバックポートするPRです(元PR: #129215)。
報告されている影響: SizeLimit を設定した環境で _cacheSize が負の状態になると、以降のすべての Set が例外やログなしに黙って破棄され、自己回復せず再起動まで復旧しません。通常の並行負荷下で複数クラスターにて一貫して発生しているとのことです。この問題は .NET 9 の #103931 によるリグレッションです。
変更内容
src/libraries/Microsoft.Extensions.Caching.Memory/src/MemoryCache.cs(+30/-12): サイズ会計(_cacheSizeの加減算)処理の修正src/libraries/Microsoft.Extensions.Caching.Memory/tests/MemoryCacheConcurrentSizeTrackingTests.cs(+121/-0): 並行時のサイズ追跡を検証するテスト(ストレステストを含む)を新規追加
※ 修正の具体的な実装内容は、提供された情報(変更ファイルの行数のみ)からは判断できません。
パフォーマンスへの影響
影響なし(記載された情報の範囲では、パフォーマンスに関する言及やベンチマーク結果はありません)。
関連Issue
その他
- リスク評価は Medium: 並行処理に敏感なサイズ会計コードの変更であるため、ストレステストが追加されています。
- 顧客報告による修正であり、レプリケーションロジックの駆動にキャッシュを使用している環境で深刻な影響が出ていました。