2026年10月のダイジェスト

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

← アーカイブ一覧へ戻る

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

622
PR 数(Total)
499
PR 数(Community)
42
PR 数(AI Agent)
81
PR 数(Bot)
89
ラベルタイプ数
22
更新日数

日別 Pull Request 数

日付をクリックするとその日のセクションへ移動します。

ラベル別 Pull Request 数(上位10)

ラベル別 Pull Request 数の上位10 上位10件の合計599件を100%とした内訳です。各スライスの番号は凡例の番号に対応します。ラベルごとの件数は凡例を参照してください。 1. community-contribution — 114 PRs (19.0%) 2. Servicing-approved — 111 PRs (18.5%) 3. area-CodeGen-coreclr — 110 PRs (18.4%) 4. arch-wasm — 75 PRs (12.5%) 5. area-NativeAOT-coreclr — 47 PRs (7.8%) 6. area-VM-coreclr — 34 PRs (5.7%) 7. area-codeflow — 30 PRs (5.0%) 8. area-Infrastructure — 28 PRs (4.7%) 9. area-ReadyToRun — 28 PRs (4.7%) 10. area-System.Security — 22 PRs (3.7%)
  1. community-contribution114 PRs19.0%
  2. Servicing-approved111 PRs18.5%
  3. area-CodeGen-coreclr110 PRs18.4%
  4. arch-wasm75 PRs12.5%
  5. area-NativeAOT-coreclr47 PRs7.8%
  6. area-VM-coreclr34 PRs5.7%
  7. area-codeflow30 PRs5.0%
  8. area-Infrastructure28 PRs4.7%
  9. area-ReadyToRun28 PRs4.7%
  10. area-System.Security22 PRs3.7%
上位10件で全1007件中599件(59.5%)を占めます。ラベルは1つの Pull Request に複数付くため、比率は PR 数ではなくラベル付与の延べ数に対するものです。

各 Pull Request の概要

この月にマージされた 622 件を新しい日から順に並べています。タイトルをクリックするとその日のページの該当箇所へ移動します。Bot が作成した 81 件はタイトルのみにして、各日の最後にまとめています。

2026年10月22日 (29 PRs)うち Bot 2 件 この日のページ →

#136301 Ignore empty Alt-Svc values instead of throwing NullReferenceException

@Tomius・GitHub・area-System.Net.Httpcommunity-contribution

Alt-Svc ヘッダーが空、または区切り文字のみ(Alt-Svc: や Alt-Svc: ,)の場合、AltSvcHeaderParser は null のパース結果を返します。#114528 以降、HandleAltSvc はその値が non-null であることを assert した上で参照するため、Release ビルドでは HTTP/3 サポートが有効(既定)な状態で、該当ヘッダーを持つ HTTPS レスポンスを受け取ると NullReferenceException が発生していました。これは HTTP/1.1 や HTTP/2 のリクエストでも発生します。

本PRでは AltSvcHeaderValue にパースされない値をスキップするようにし、.NET 9 の挙動を復元します。

#136297 [RISC-V] Fix 64-bit constant truncation on LLP64 hosts

@glomdom・GitHub・area-CodeGen-coreclrcommunity-contributionarch-riscv

RISC-V64向けJITの emitLoadImmediate において、64ビット定数をデータセクションから ld でロードするフォールバック経路で、スロットのサイズ算出に sizeof(long) を使用していたバグを修正します。LLP64ホスト(Windows)では long が4バイトのため、Windows上で動作するクロスJIT(riscv64ターゲット)が定数の下位4バイトしか出力していませんでした。サイズ算出を sizeof(originalImm) に変更し、定数全体(8バイト)が出力されるようになります。

PRの記載によると、Issueの再現例(ulong / 10)での __managedcode の ld ターゲットは以下のように変化します。

修正前:

0030 cdcccccc 00000000 00000000 00000000

修正後:

0030 cdcccccc cccccccc 00000000 00000000

#136290 [cDAC] Use hierarchical Directory.Build.props import

@max-charlamb・GitHub・area-Diagnostics-cdac

cDACサブツリー内の Directory.Build.props が、親ディレクトリの Directory.Build.props を取り込む方法を、標準の階層的な探索(hierarchical lookup)を使うように変更したPRです。これにより、プロダクションソースが別のリポジトリ構成にミラーされた場合でもサブツリーを再配置(relocatable)できます。ミラー先にアダプターをソースツリー内に用意する必要もなくなります。

#136276 Disable ilasm round-tripping for TLS test

@Copilot・GitHub・area-ILTools-coreclr

TestTLSWithLoadedDlls テストを、ilasm ラウンドトリップ(IL の逆アセンブル→再アセンブル)の対象から除外する変更です。このテストが依存する IJW(C++/CLI)アセンブリにはネイティブコードが含まれており、ilasm によるラウンドトリップと互換性がないためです。

#136269 Link wasi-emulated-getpid on native AOT

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

WASI向けNative AOTのビルドで、wasi-emulated-getpid をリンクするように変更するPRです。ランタイムのソースをビルドする際(src/coreclr/CMakeLists.txt)に既にこのエミュレーションが定義されており、リンク時にも同じライブラリを指定する形に揃える修正です。

作成者によると、Native AOTでこれを同梱し続けるかどうかは未確定で、今後サイズを検討する段階で見直す可能性があります。

#136265 Initialize NativeAOT library GS cookie before first managed call

@MichalStrehovsky・GitHub・area-NativeAOT-coreclr

NativeAOTのUnix向け共有ライブラリで、最初のマネージドコード呼び出し(エクスポート関数の初回呼び出し)時にスタック保護用のGSクッキーが未初期化のまま使われ、abortする問題(#136201)を修正するPRです。遅延ランタイム初期化コールバックを登録する前にライブラリ用クッキーを初期化するようにし、ページサイズの取得もGC初期化から切り離しています。stackallocバッファを使う初回エクスポート呼び出しのテストも追加されています。

#136260 JIT: Clear GC poll flags when converting unreachable blocks to throws

@EgorBo・GitHub・area-CodeGen-coreclr

JITのfgRemoveUnreachableBlocksが、到達不能な BBF_DONT_REMOVE ブロックを空にして BBJ_THROW に変換する際、BBF_NEEDS_GCPOLL フラグが残ったままになる問題を修正します。

作成者の説明によると、このフラグはインライン化された Thread.FastPollGC() に由来し、クローンされた try エントリブロックに圧縮された後、RBO によって到達不能になったものです。空の throw ブロックに対して fgInsertGCPolls がインラインの GC ポールを挿入しようとし、fgCreateGCPoll が「最後のステートメント」を下位ブロックへ移動する際に null のステートメントを参照していました。修正として、ブロックのコードを削除する時点で GC ポール関連フラグをクリアします。

#136250 [wasi] Fix EINVAL from UDP Socket.ReceiveAsync

@lewing・GitHub・arch-wasmarea-System.Net.Socketsos-wasi

WASIには recvmsg が存在しないため、SystemNative_ReceiveMessage は recvfrom にフォールバックします。このフォールバックでは、アドレスバッファが NULL の場合でも addrlen に非 NULL のポインタを渡しており、wasi-libc はこの組み合わせを EINVAL で拒否していました。その結果、アドレスなしで ReceiveMessage を経由する UDP の Socket.ReceiveAsync が常に "Invalid argument" で失敗していました。本PRはアドレスバッファが無い場合に addrlen を NULL にして渡すよう修正します。変更が影響するのは CMSG_SPACE を持たない唯一のターゲットである WASI のパスのみです。

#136249 Treat path-shaped assembly-name strings as unresolved in ILLink

@sbomer・GitHub・linkable-frameworkarea-Tools-ILLink

ILLink(trimmer)で、パス形式のアセンブリ名文字列(例: 親ディレクトリを指すパスなど)を、アセンブリ名参照の構築やロード済みキャッシュの参照より前に「未解決」として扱うようにする変更です。これにより、名前ベースの検索が親ディレクトリなどのパスを探索してしまうことを防ぎます。各呼び出し元の既存の未解決時の診断と、寛容なリフレクション探索の挙動は維持されます。明示的な参照ファイルパスや、作成済みのアセンブリ名参照の挙動は変更されません。

#136243 [wasi] Accept explicit return in WASI R2R host constant exports

@lewing・GitHub・arch-wasmarea-ReadyToRunos-wasi

WASIホストのDebugビルドでは wasi_r2r_* アクセサが i32.const N; return; end にコンパイルされます(Releaseは i32.const N; end)。WasmModuleInfoReader がこの形式を拒否していたため、Debug CoreCLRのWASI ReadyToRun publishが The host does not export constant i32 function 'wasi_r2r_image_base' で失敗していました。本PRでは end の前にオプションの return を許容するようにリーダーを修正しています。

#136241 Replace CheapUnfairReaderWriterLock with ReaderWriterLockSlim

@asylkhan-azat・GitHub・area-System.Transactionscommunity-contribution

System.Transactions.Local のトランザクションテーブルで使用していた独自実装の CheapUnfairReaderWriterLock を削除し、標準の ReaderWriterLockSlim に置き換える変更です。あわせて、トランザクションのハッシュ値の生成を、ロール管理とは独立したカウンターで行うようにしています。

#136238 Seed innerloop build caches from main

@sbomer・GitHub・area-Infrastructure

main ブランチへのバッチ化された push ビルドで、既存のキャッシュ付き Release の analyzers / linker ジョブを Linux x64、Windows x64、macOS arm64 で実行するようにしました。これにより、新規 PR はコールドな初回実行で自前のキャッシュを作る必要がなく、ILLink とコンパイラのキャッシュスナップショットを共有ベースラインとして復元できます。

push による自動実行では、キャッシュ生成と無関係な developer-workflow 系ジョブをスキップします。PR 実行・手動実行の既存動作は維持され、キャッシュ対象ジョブとキャッシュキーは変更されていません。

#136221 Use extension-member polyfills across libraries

@eiriktsarpalis・GitHub・area-System.Text.Jsonlinkable-framework

src/libraries 全体に散在していたフレームワーク互換コード(ダウンレベル向けの条件分岐やローカルヘルパー)を、C# の extension-member polyfill(拡張メンバー)に集約するリファクタリングです(#136156 の続き)。呼び出し側はフレームワーク標準のAPI名で記述し、ダウンレベル実装は内部の polyfill コンテナに置かれます。対象ターゲットが元からそのメンバーを持つ場合は、引き続きフレームワーク実装にバインドされます。公開APIの変更と新規テストの追加はありません。

#136209 Clear Zstandard prefixes and restore dictionaries on reset

@rzikm・GitHub・area-System.IO.Compression

Zstandardのセッション単位のリセット(session-only reset)では、未使用のプレフィックスが保持されます。一方、マネージド側のエンコーダー/デコーダーはリセット時にピン留めしたメモリを解放するため、ネイティブコンテキストが「もうピン留めされていないメモリ」を参照し続ける問題がありました。また、プレフィックスを設定するとコンストラクターで渡した辞書が置き換えられますが、リセットしても辞書が復元されませんでした。

このPRでは、エンコーダー/デコーダー双方のリセット処理を修正しています。ピン留めメモリを解放する前に、元の辞書を復元するか、辞書が指定されていない場合はネイティブ側のプレフィックスを明示的にクリアします。あわせて、プレフィックスによる辞書の上書きと、リセット時の辞書復元の挙動をドキュメント化しています。

#136208 Fix NativeAOT WASM math helper calling conventions

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOT の WASM ビルドで発生していた、数学関数(sin など)のシグネチャ不一致によるリンカ警告(wasm-ld: function signature mismatch: sin)を修正する PR です。x86 と WASM では数学関数呼び出しを専用のランタイムラッパー(浮動小数点の剰余ヘルパーを含む)経由にし、それ以外のアーキテクチャでは従来どおり libc を直接インポートします。

作成者によると、x86 では /alternatename によるリンカの仕組みで C ライブラリの関数名を維持していましたが、WASM は x86 Windows のシンボル名装飾を行わず sin がそのまま sin になるため、同じ方法は使えないとのことです。

#136203 Fix virtual vtable call lowering without fixed registers

@MichalStrehovsky・GitHub・arch-wasmarea-CodeGen-coreclr

JITの仮想vtable呼び出しのlowering処理を修正し、固定レジスタを持たないターゲットでも正しく動作するようにしました。作成者によると、StackTraces+TestLineNumbers:MethodWithMetadata のMinOptsコンパイル中に Assertion failed 'thisArgNode->OperIs(GT_PUTARG_REG)' が発生していたとのことです。作成者は、ReadyToRunではこのような仮想呼び出しを行わないのではないかと推測しており、Native AOTでもMinOptsでのみこの問題に遭遇するとしています。

#136185 OpenHarmony: NativeAOT and pack integration

@springmin・GitHub・linkable-frameworkcommunity-contributionarea-NativeAOT-coreclr

OpenHarmony(openharmony-* RID)をNativeAOT、crossgen2、パック生成、ILLinkのビルド経路に組み込むPRです。共有のターゲットOSパーサーでopenharmonyをLinuxにマップし、NDKのlldとohos ABIを使用します。CoreLibとランタイムパックは他のUnixターゲットと同様にReadyToRunのままとし、NTLMはマネージド実装を選択します。

#136160 Root String constructor factories in ReadyToRun compilation

@radekdoulik・GitHub・area-ReadyToRun

ReadyToRun(R2R)のビジビリティベースのコンパイルにおいて、System.String.Ctor という private static のファクトリメソッドをルートとして扱うように変更しました。

string の public コンストラクタは InternalCall であり、ネイティブの FCall マッピングを介してこれらのマネージドファクトリにつながっています。このマッピングは通常の IL 上の呼び出しエッジではないため、他のルートプロバイダーが供給しない限り、ビジビリティベースのルート化では private な実装がスキップされていました。この変更により、これらのファクトリのコンパイルが埋め込み記述子(embedded descriptor)の処理に依存しなくなります。

変更は static な System.String.Ctor メソッドに限定されています。既存のコンパイル可否チェックは維持され、ネイティブのディスパッチ方法や他の private メソッドのルート化には影響しません。

#135970 JIT: treat throwing trees as GC safe points

@lewing・GitHub・area-CodeGen-coreclr

optRemoveRedundantZeroInits は、最初のストアより前にGCセーフポイントがないGCローカルについて、プロローグでのゼロ初期化を省略します。しかし IsPotentialGCSafePoint は例外をスローしうるツリー(GTF_EXCEPT)を無視していました。これらはthrowヘルパーを呼び出す可能性があり、throwヘルパーはGCセーフポイントです。その結果、未初期化のGCスロットがGCに報告されることがありました。

  • Wasm: フレーム上の全GCローカルが untracked として報告されます。Object.GetType では、GC一時変数への格納前に this のnullチェックが ThrowNullReferenceException を呼び、そこで発生したGCが古いスタック内容を報告し、TypeIntrinsics_r が pMT->Validate() でアサート失敗していました。
  • 他ターゲット: 境界チェックの後にストアされる untracked(例: アドレス公開された)GCローカルで同様の問題が発生していました。

本PRは、全ターゲットで GTF_EXCEPT を持つツリーに対して IsPotentialGCSafePoint が true を返すようにします。

#135839 native: use the C90 qsort workaround for zstd on OpenHarmony

@springmin・GitHub・area-System.IO.Compressioncommunity-contribution

OpenHarmony のsysrootには qsort_r が存在せず、zstd の自動検出もこれを扱えないため、Android 向けに使われている ZSTD_USE_C90_QSORT の回避策を OpenHarmony でも再利用する変更です。作成者によると、openharmony-arm64 向けにネイティブライブラリをクロスビルドして確認したとのことです。

#135342 Mitigate macOS FSEvents race in TokensFiredForNewDirectoryContentsOnRename

@svick・GitHub・area-Extensions-FileSystem

macOSで不安定だった PhysicalFileProviderTests.TokensFiredForNewDirectoryContentsOnRename テストの修正です。macOSの fseventsd はウォッチャー開始前の操作に由来する古いイベントを配信することがあり、「まだ発火していないはず」というアサーションが散発的に失敗していました。本PRはテスト側のみを修正しており、FileSystemWatcher / PhysicalFilesWatcher の実装は変更しません。

テストで fileSystemWatcher.Filter に、ランダム生成(GUID名)のテスト用エントリには一致しないパターンを設定してからウォッチを開始します。これにより、実際のネイティブイベント(fseventsd による事前作成イベントの遅延再送を含む)は抑制されます。一方、テストが明示的に注入する fileSystemWatcher.CallOnRenamed(...) は Filter によるマッチングを行わないため影響を受けません。この方式により、人工的な遅延や動的スキップを使わずに、リネーム前のアサーションをすべてのプラットフォームで決定的に有効なまま維持できます。

(PR本文では Filter を設定するコードの具体例は示されていないため、サンプルコードは省略します。)

#135312 Managed ilasm: record sequence points as instructions are emitted, on the lines of the .il source when no .line directive is in effect

@pcshrosbree・GitHub・area-ILTools-coreclrcommunity-contribution

マネージド版 ilasm(src/tools/ilasm)が、.line ディレクティブのない .il ファイルに対してシーケンスポイントを一切出力せず、ステップ実行できない問題を修正します。ネイティブ ilasm と同様に、命令を emit する時点でその命令の .il ソース上の行(列 1〜2)にシーケンスポイントを記録し、.line / #include の扱いもネイティブに近づけます。

  • -DEBUG または -PDB 指定時、.line の対象外の命令ごとに、その .il 上の行へ暗黙のポイントを記録(同一行の命令は 1 つのポイントを共有。.line 直後の最初の命令は常にポイントを持つ)
  • メソッド末尾の命令の後の .line は、そのメソッドにはポイントを作らず次の命令に適用
  • クラス/トップレベルの .line は、次のメソッドの最初の命令に適用
  • #include されたファイルは独自の行・ドキュメント(フルパス)を持ち、.line 状態はインクルードをまたいで漏れない
  • 不正なオペランドの命令はポイントを記録しない。同一オフセットのポイントは置換され、ポイント blob に同一オフセットが 2 つ入らない

#135122 Optimize System.Numerics.Tensors dense and strided operations

@tannergooding・GitHub・area-System.Numerics.Tensors

System.Numerics.Tensors の dense(連続レイアウト)および strided(ストライド付き)テンソル操作に対する高速パスを拡張するPRです。テンソルの形状・オーバーラップ・走査順序・論理要素のセマンティクスは維持されます。dotnet/runtime#134914 と #135060 の修正・連続操作の最適化を土台にしています。公開APIシグネチャの変更はありません。

主な内容:

  • strided なソースを dense な宛先へ ResizeTo する場合はスパンのクリアを使用(非 dense な宛先では論理クリアを維持)
  • 大きな dense テンソルを int サイズのチャンク単位で処理し、連続ランやスライスを再利用(コピー、反転、リダクション、述語、等価比較、乱数フィル、連結、スタック)
  • rank 1 向けのリニアオフセット高速パスを追加
  • 数GB規模のテストに利用可能メモリの事前チェックと余裕を追加し、リモートプロセスでアロケーションを隔離、想定内のOOMはスキップ

#134908 Update Fedora Helix coverage to 45

@richlander・GitHub・area-Infrastructure

Linux x64 の Helix カバレッジのうち、Fedora のバージョンを 44 から 45 に更新するPRです。Fedora 44 は 2027年6月2日までサポートされます。Fedora 45 の固定 EOL 日は未公開で、2027年11月頃になる見込みと記載されています。fedora-45-helix-amd64 コンテナタグは MCR レジストリで確認済みで、sha256:256fcd76faa9078632f0b8c68374f2e9ee45242b9ee7f68bda5f0a51fc28bc90 に固定されています。

対象 スロット 変更前 変更後
Linux x64 Helix Latest Fedora 44 Fedora 45

#128981 System.Net.Mail Validation improvements

@Copilot・GitHub・area-System.Net

ContentType.Name / ContentDisposition.FileName のシリアライズ時に、値が RFC 2047 のエンコード済みワードで始まるだけで「エンコード済み」と見なされ、引用符内にそのまま追記されていたため、" を含む値で MIME パラメータ(例: filename)をヘッダーに注入できる問題への対策です。エンコード済みワード判定の厳格化と、非該当値を GetTokenOrQuotedString(引用符のエスケープ処理あり)へ回す方針が中心です。

var ct = new ContentType("application/octet-stream");
ct.Name = "=?utf-8?Q?foo?=?evil\"; filename=\"foo.txt";
// 修正前: application/octet-stream; name="=?utf-8?Q?foo?=?evil"; filename="foo.txt"
// (攻撃者が制御する filename パラメータが注入される)

2026年10月21日 (35 PRs)うち Bot 7 件 この日のページ →

#136252 Clarify guidance for historical implementation context

@jkoritzinsky・GitHub・area-Infrastructure

Copilot向けの指示ファイル(conventions.instructions.md)のコメントに関するガイダンスを修正するPRです。過去の実装に関する履歴的な説明は、ソースコードのコメントではなく annotate_diff_line ツールを使って記載するよう明確化しています。ツールが利用できない場合は、ソースコメントとして残さず、その説明自体を省略するよう指示しています。

これにより、CopilotがPRに履歴的な説明コメントを追加してしまうことを避けつつ、Copilotを操作している人間のコーディネーターには見える形を維持する狙いです。

#136235 [release/10.0] Update build and packaging Pkcs dependency to 9.0.21

@ViveliDuCh・GitHub・Servicing-approvedarea-Infrastructure-libraries

release/10.0 ブランチのビルド・パッケージングで使用される System.Security.Cryptography.Pkcs の依存バージョンを 9.0.21 に更新するPRです。これらのプロジェクトは NuGet.Packaging/7.0.3-rc.46203 経由で Pkcs 9.0.6 を推移的に解決しており、公開済みの脆弱性アドバイザリ(GHSA-846f-f764-76mx、GHSA-2fmv-rv2c-59x7)により NU1902/NU1903 が発生し、warnings-as-errors ポリシーのためWindows/Linuxのビルドが失敗していました。直接の PackageReference でパッチ済みバージョンを選択することで、NuGetツールセットの変更や脆弱性監査の抑制をせずに解消しています。

#136233 [release/10.0] Update MsQuic to 2.5.12

@ViveliDuCh・GitHub・Servicing-approvedarea-Infrastructure-libraries

Microsoft.Native.Quic.MsQuic.Schannel のバージョンを定義するプロパティ MicrosoftNativeQuicMsQuicSchannelVersion を 2.5.11 から 2.5.12 に更新する release/10.0 向けのバックポートです(main の #135749 に対応)。2.5.11 には GHSA-2mxg-prvg-9jfg(CVE-2026-85790)が報告されており、この脆弱性の影響で NuGet の監査警告 NU1902 が警告をエラーとして扱う設定下で restore を失敗させていました。2.5.12 は修正済みのバージョンです。マネージドコードの変更はありません。

#136202 Enable native AOT WASI testing in CI (build only)

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

CIにおいて、native AOT WASI向けのテストをビルドのみ有効化するPull Requestです。作成者によると、UnitTestsにruntime asyncへの参照が含まれていることに加え、別の箇所でJITに関するアサートが発生するため、UnitTestsはビルドできない状態です。そのため、暫定対応として一部を除外しています(「This is just for now」とのこと)。

#136188 Remove managed-only ilasm round-trip exclusions

@jkoritzinsky・GitHub・area-ILTools-coreclr

IL ラウンドトリップテスト向けの「managed-only ilasm」除外の仕組み(プロパティ、マーカー処理、ラッパー内のチェック、関連ドキュメント)を削除するPRです。あわせて、gentype テストは意図的に無効なメタデータを生成するため、IL ラウンドトリップ非対応として明示的にマークしています。

#136183 Support IJW native TLS static field access

@jkoritzinsky・GitHub・os-windowsarea-VM-coreclr

IJW(C++/CLI)のネイティブTLS(スレッドローカルストレージ)静的フィールドへのアクセスをサポートするための変更です。関連Issue(#133538、#42187)を修正する対応で、CoreCLRのJITヘルパー関連のコードに追加が行われています。提供された情報からは、実装の詳細な動作までは確認できません。

#136176 ILVerify: allow family access through implemented interfaces

@pcshrosbree・GitHub・area-Tools-ILVerificationcommunity-contribution

ILVerify が、インターフェイスを実装した型から、そのインターフェイスの protected(family)メンバーを呼び出すコードを MethodAccess エラーとして拒否していた問題を修正します。ランタイム(ClassLoader::CanAccessFamily)はこの呼び出しを許可しているため、ILVerify のアクセスチェックをランタイムの挙動に揃えます。

AccessVerificationHelpers.cs の CanAccessFamily は、対象の型定義を現在の型の基底型の中からしか探していませんでした。対象がインターフェイスの場合は、現在の型の RuntimeInterfaces の中から型定義で比較するように変更しています。これにより、ジェネリックインターフェイスの別のインスタンス化でも許可されます。RuntimeInterfaces には基底クラスや他のインターフェイスから継承したインターフェイスも含まれ、入れ子型は既存の外側の型へのループでカバーされます。

#136167 [release/8.0] Reset October OOB package generation for November servicing

@ViveliDuCh・GitHub・Servicing-approvedarea-System.Security

release/8.0 ブランチにおいて、10月のOOB(Out-of-Band)パッケージ生成設定をリセットし、11月のサービシングに備える定例のパッケージ作成クリーンアップです。すでに公開済みのOOBパッケージが後続のビルドで不要に再生成されることを防ぐため、3つのライブラリプロジェクトの GeneratePackageOnBuild を true から false に変更します。

#136156 Use Volatile.ReadBarrier in JsonArray/JsonObject.GetUnderlyingReprese…

@asylkhan-azat・GitHub・area-System.Text.Jsoncommunity-contribution

System.Text.Json の JsonArray / JsonObject の GetUnderlyingRepresentation で使用していたメモリバリアを、Interlocked.MemoryBarrier から Volatile.ReadBarrier に置き換える変更です(.NET 10+ 向け)。読み取り側に必要な最小限のバリアへ切り替えることが意図と考えられます。

なお、提供された情報にはサンプルコードや詳細な変更差分は含まれていません。

#136151 [browser] Restore HotReload functional test execution in CI

@vitek-karas・GitHub・area-Build-mono

Windowsのbrowserライブラリテスト用CIジョブで、WebAssembly.Browser.HotReload.Test.zip がビルドされているにもかかわらず、Helixに投入されずHotReloadの機能テストが実行されていなかった問題を修正します。継承された機能テスト用プロパティによりZIPが runonly ディレクトリに配置されており、Helixは同ディレクトリ内の .Sample.zip のみを対象とするため選択されていませんでした。HotReloadプロジェクト側でアーカイブ関連プロパティを上書きし、ZIPの出力先を browseronly に変更することで、既存のbrowser用セレクタが対象に含めるようになります。テストランナー、期待される終了コード、非Windows CIでの除外設定は変更していません。

#136140 Fix #136137-COM IDispatch property setter dropping BINDER_IgnoreReturn flag

@Psyk0loge・GitHub・area-Interop-coreclrcommunity-contribution

Preview 4 でリグレッションしていた COM IDispatch プロパティセッターの動作を修正する PR です。LateBoundCLRToCOM_ILStub​State::GetInfoFromMetadata(#126330 で導入)の msSetter ケースで、binderFlags = BINDER_SetProperty; と代入していたため、先に設定されていた BINDER_IgnoreReturn フラグが上書きされていました。これを binderFlags |= BINDER_SetProperty; に変更し、フラグを保持するようにしています。

BINDER_IgnoreReturn が失われると、InvokeDispMethod が COM の戻り値を System.Void に変換しようとして OleAutBinder.ChangeType で COMException (0x80020005): Type mismatch が発生していました。

// Before (broken):
binderFlags = BINDER_SetProperty;

// After (fixed):
binderFlags |= BINDER_SetProperty;

#136133 ILVerify: continue checking methods that use calli, mkrefany, refanyval and refanytype instead of aborting them

@pcshrosbree・GitHub・area-VM-coreclrcommunity-contribution

ILVerify が calli、mkrefany、refanyval、refanytype に到達した時点でメソッドの検証を中断していた問題を修正し、これらの命令に対する検証ロジックを追加して検証を継続するようにします。calli は(ランタイムが関数ポインタの寿命を追跡しないため)常に Unverifiable として報告されますが、呼び出し箇所の引数不一致などのエラーは引き続き報告されます。arglist は変更しておらず、ImportArgList は従来どおり "RuntimeArgumentHandle not supported in .NET Core" を throw します。

#136126 Fix NativeAOT MethodInvoker span argument-count validation

@Copilot・GitHub・area-NativeAOT-coreclr

NativeAOTの MethodInvoker.Invoke(object?, Span<object?>) は、オープンジェネリックメソッドに対して引数の数が誤っている場合に InvalidOperationException をスローしていました。これはCoreCLRや固定アリティのオーバーロードの挙動と異なります。本PRでは、ディスパッチ前に引数の数を検証し、既存のスローヘルパーを使って TargetParameterCountException をスローするよう修正します。引数の数が正しい場合は従来どおり InvalidOperationException が維持されます。

#136100 JIT: Devirtualize calls before probing them in optimized instrumented code

@JulieLeeMSFT・GitHub・area-CodeGen-coreclr

最適化+インストルメント済みコンパイル(OSR+PGO、TieredPGO_InstrumentedTierAlwaysOptimized、JitInstrumentIfOptimizing など)において、プローブ対象の呼び出しが devirtualize されない問題を修正します。これにより JIT/opt/GuardedDevirtualization/badinlinee が rolling jitstress パイプラインで Test allocated 24000 bytes と失敗していた件(#135557)を解消します。作成者によれば原因は3つ独立して存在し、本PRは (1) JIT の修正、(2) JitStress 下でのテストのスキップ、(3) テストの壁時計依存の解消、の3点でそれぞれ対処しています。

  • 従来は impConsiderCallProbe を devirtualize の前に呼び、プローブ対象にした呼び出しは impDevirtualizeCall をスキップしていました。そのため this が型情報のない一時変数に退避され、後段の devirtualization やインライン化が失敗し、new Base().M() のアロケーションが残っていました。
  • 修正後は先に devirtualize を試み、それでも仮想呼び出しのまま残るものだけをプローブ対象にします。

#135990 [NativeAOT] Recognize recursive tail-call epilogues on Unix x64

@agocke・GitHub・area-NativeAOT-coreclr

Unix x64 の NativeAOT において、現在のプロシージャのエントリへの直接ジャンプ(再帰的な fast tail call)を tail-call epilogue として認識するよう修正します。

従来の TrailingEpilogueInstructionsCount はプロシージャのアドレス範囲外への直接ジャンプのみを認識し、自身のエントリへのジャンプを除外していました。再帰的 fast tail call ではフレームを復元してからエントリへジャンプするため、この epilogue を通常のメソッド本体のコードとして扱うと、return address hijacking が部分的に解体されたフレームに対して本体の unwind 情報を使用し、誤ったスタックスロットを選択する可能性がありました。

下限の比較を < から <= に変更することで、既存のコメントおよび Windows x64 の unwinder における自己エントリへのジャンプの扱いと整合させています。これにより既存の epilogue 経路が、現在のスタックポインタと残りの pop から return address スロットを特定できるようになります。

#135955 Add dedicated NativeAOT WASM build integration for WASI

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOT向けに、専用のWASMリンカーバックエンド(初期サポートはWASI)をビルド統合として追加するPRです。WASI SDKのClangとllvm-ar、移植可能なランタイムアーカイブ、必要なネイティブ依存を使い、wasm32-wasip2をターゲットとする.wasmコンポーネントを生成します。アーキテクチャ選択はWASI用ツールチェーン設定とは分離されており、すべてのWASMをWASIとして扱うものでも、ブラウザ向けリンクを追加するものでもありません。SDKの場所はWASI_SDK_PATHで指定します。

#135928 [Android] Avoid eager trust-anchor enumeration in certificate-chain builds

@simonrozsival・GitHub・area-System.Net.Securityos-android

Android上での証明書チェーン構築時、AndroidCAStore 全体を列挙して全トラストアンカーを実体化する処理を避け、渡された証明書から特定できるシステムのトラストアンカーのみで PKIXBuilderParameters を構築するよう変更しています。調査対象の Samsung A16 では、この全件列挙のセットアップに約123msかかり、その後のパス構築より大幅に重い処理でした。公開APIの変更はありません。

#135847 Flatten NativeAOT reflection metadata namespaces

@MichalStrehovsky・GitHub・area-NativeAOT-coreclr

NativeAOT のリフレクションメタデータにおける名前空間の保持方法を変更するPRです。名前空間を . 区切りのパーツごとのツリー構造で保持する方式をやめ、完全な文字列としてフラットに保持します。あわせて、TypeDefinition / TypeForward をハッシュテーブルに格納することで、型検索のパフォーマンス低下を避ける設計になっています(作成者によると、ハッシュテーブルはパーツ単位の名前空間表現よりも検索で優位になるとのことです)。

#135776 Allow non-metadata JSON property names with a leading dollar sign

@eiriktsarpalis・GitHub・area-System.Text.Json

System.Text.Jsonは、参照保持(reference preservation)またはポリモーフィックデシリアライズが有効な場合、メタデータと競合しない名前も含めて$で始まるすべてのプロパティ名を拒否していました。本PRでは既存の「完全一致のメタデータ判定」を利用するよう変更し、認識されたメタデータプロパティ($id、$ref、$values、$typeなど)は従来どおり検証し、無関係な$始まりの名前は通常のプロパティとして処理します。また、カスタムの型識別子名が設定されている場合、$typeはメタデータではなく通常のプロパティとして扱われます。

#135763 Support for interface dispatch on native AOT/WASM

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOT/WASM において、インターフェイスメソッド呼び出しを任意シグネチャの RhpInterfaceDispatch スタブ経由ではなく、インターフェイスターゲットを解決したうえで実際のメソッドシグネチャで間接呼び出しする方式に変更します。Console.WriteLine の hello world を WASI/NativeAOT でコンパイル・リンク・実行可能にするための一連の PR の一部です。

  • ILC が CORINFO_VIRTUALCALL_LDVIRTFTN を報告し、具象/ジェネリックのディスパッチセル参照を保持し、null インスタンスチェックを要求します。
  • RyuJIT はレシーバーとセルを CORINFO_HELP_INTERFACELOOKUP_FOR_SLOT に渡します。Wasm ではこれを未対応の高速ヘルパーではなく、既存の固定シグネチャ RhpResolveInterfaceMethod にマップします。
  • 既存のジェネリック仮想メソッドのパスは維持されます。
  • クラス仮想メソッドの ldvirtftn(クラス仮想メソッドにバインドされたデリゲートなど)でも、NativeAOT Wasm の既存の ReadyToRun リゾルバーを有効化します。
  • 非 Wasm の NativeAOT のスタブ選択と CoreCLR Wasm のフォールバックは維持されます。

#135638 JIT: make sure the block a catch returns to generates an instruction

@pcshrosbree・GitHub・area-CodeGen-coreclrcommunity-contribution

catchブロックの終了時にスレッド中断(ThreadAbort)が保留されている場合、ランタイムはcatchの戻り先アドレスから中断を再送出し、そのアドレスに対応するハンドラを検索します。JITはこの戻り先ブロックを関連するEH領域内に配置していますが、そのブロックがコード生成上で命令を1つも出力しない場合、戻り先アドレスが後続コードに属してしまい、abortが誤った位置から発生したものとして扱われます。

この問題は、未最適化コード(tier 0、JITMinOpts、デバッグ可能コード)と、一部の最適化コード(GC.KeepAliveのみのブロック、try領域の先頭ブロック、xarchでのemitRemoveJumpToNextInstによるジャンプ除去など)で発生します。その結果、finallyが実行されない、外側のcatchがabortを受け取れない、catch直後のtryが誤って捕捉する、といった誤動作が起きます。

本PRは genEmitEndBlock で、catchの戻り先となる BBJ_ALWAYS ブロックが命令を出力していない場合、次ブロックへのジャンプが省略されるなら nop を出力し、そうでなければジャンプを削除可能としてマークしないようにします。判定は次ブロックのEH領域には依存しません。

#135543 [wasm] Regalloc: Allow Non-exposed GC Ref Locals to Live in Wasm Locals

@adamperlin・GitHub・arch-wasmarea-CodeGen-coreclr

WebAssembly (Wasm) 向けJITのレジスタ割り当てにおいて、GCセーフポイントをまたいで生存しない(GCから見える必要のない)追跡対象のGC参照ローカル変数を、固定されたスタックスロットではなくWasmの local に割り当て可能にする変更です。セーフポイントでライブなGC参照ローカルは従来どおり固定スタックホームを使用します。そのために、GC参照ローカルの生存解析を行う独立したフェーズ(WasmGCLiveness)を新設し、後続の2つのフェーズがその結果を利用します。

#135438 [mono][aot] Fix recursive struct wrapper normalization

@pavelsavara・GitHub・area-Codegen-AOT-mono

Mono AOT(mono-aot-cross)が gsharedvt ラッパーのシグネチャを構築する際、値型フィールドやジェネリック型引数を再帰的に正規化します。get_wrapper_shared_vtype() と get_wrapper_shared_type_full() が相互に呼び合い、自己再帰的なジェネリック値型でネイティブスタックオーバーフローが発生する問題を修正します。#135029 を #135371 でリバートした後の再導入で、回帰テストを修正しています。

問題となる有効な型の例:

struct GenericFieldBox<T>
{
    public object Value;
}

struct SelfRecursive
{
    public GenericFieldBox<SelfRecursive> Value;
}

修正では、正規化中の値型をスタック上のチェーンとして保持します。同じ型への再入、または各レベルで形状が成長するジェネリックで深さ上限に達した場合は、既存の「元の型を維持する」フォールバックを使います。

#135296 [wasm] [spmi] Collect SPMI contexts from libraries via crossgen2

@adamperlin・GitHub・area-CodeGen-coreclr

WASM向けのSuperPMIコレクションを、従来のCoreLibのみから、ライブラリアセンブリ全体のcomposite crossgen2コンパイルへ拡張するPRです。#132538(@AndyAyersMS)の継続で、主な変更はレビュー指摘への対応とのことです。これによりWasm向けのメソッドコンテキスト数を大幅に増やすことを狙っています。JIT-EEのGUIDを更新し、旧corelibコレクションではなく新しいコレクションが使われるようにしています。

#135291 [wasm][R2R] Skip methods with explicit tail calls in crossgen2

@lewing・GitHub・arch-wasmarea-ReadyToRun

WebAssembly (wasm) の R2R コードでは、明示的な tail. 呼び出しが return_call になります。しかし R2R とインタプリタ間の遷移は通常の呼び出しを使うため、フレームが蓄積され、これらをまたぐ深い末尾再帰でスタックオーバーフローが発生します。

この PR では、crossgen2 が明示的な tail call を含む wasm メソッドを拒否するようにしました。reportTailCallDecision から RequiresRuntimeJitException を送出します(R2R のみ)。該当メソッドは、tail call を扱えるインタプリタに任されます。

#130935 Remove target and target-dependent ifdefs from dbi

@rcj1・GitHub・area-Diagnostics-coreclr

DBI(Debugger Interface)に残っていた TARGET_* ifdef を除去する変更です。ifdef は次の4種類に分類されています。

  • 本来はホスト側の条件であるもの:HOST_* に変更
  • 実際にターゲット情報を表すもの:新規 DacDbi API GetTargetInfo で実行時に取得
  • ライブデバッグ(ホストとターゲットが同一):HOST_* に変更
  • レジスタ/コンテキスト関連:別PR #130367 で対応

IDacDbiInterface::GetTargetInfo(アーキテクチャ・OS・ポインタサイズ)を IDL/ヘッダ/DAC 実装/cDAC Legacy のマネージド実装に追加し、RS/shim 側でこれを使って分岐するようになります。

#130717 JIT: Materialize partially-constant Vector.Create as CNS_VEC + inserts

@tannergooding・GitHub・area-CodeGen-coreclrPriority:2

JITのlowering(LowerHWIntrinsicCreate)において、一部の要素のみが定数である Vector*.Create(...) を、従来の「CreateScalarUnsafe から始まる insert の連鎖」ではなく、CNS_VEC(定数ベクタ)+非定数要素の WithElement 挿入として具体化するよう変更しています。 例えば Vector128.Create(1, 2, 3, x) は、従来は4回の insert でしたが、変更後は CNS_VEC と x 用の WithElement 1回になります。

// 変更後: 定数部分は CNS_VEC、x のみ WithElement で挿入される
Vector128<int> v = Vector128.Create(1, 2, 3, x);

2026年10月20日 (50 PRs)うち Bot 5 件 この日のページ →

#136172 [clr-interp] Preserve byref-like locals when an await does not suspend

@radekdoulik・GitHub・area-CodeGen-Interpreter-coreclr

インタープリターの継続ハンドラー(通常/ジェネリックの両継続opcodeが共有)で、await が同期的に完了して中断しない場合に、初期化済みのローカル(byref-like ローカルを含む)が誤ってゼロクリアされる問題の修正です。「継続なし」の高速パスを、ローカルのゼロクリアより前に移動しました。実際に中断する場合は、従来どおり継続処理の前にゼロクリアします。Resolves dotnet/runtime#136171。

#136168 Reuse handle-based unwind lookup for WebAssembly

@rcj1・GitHub・area-Diagnostics-cdac

WebAssembly (WASM) の R2R アンウィンドデータ検索を、専用の「制御PCのみ」の検索経路から、既存の ExecutionManager のハンドルベース API を再利用する形に統一する変更です。他アーキテクチャと同じ検索パターンに揃え、IExecutionManager.TryGetUnwindInfo とその実装を削除します。

#136159 ILVerify: fix crashes on non-array element operands and on ldelem.ref of null

@pcshrosbree・GitHub・area-Tools-ILVerificationcommunity-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
}

#136149 JIT: Preserve volatile static reads when folding readonly fields

@EgorBo・GitHub・area-CodeGen-coreclr

NativeAOTが「書き込まれない static フィールドは readonly である」と推論した場合に、そのフィールドの volatile 読み取りまで定数畳み込みされ、acquire セマンティクスが失われる問題を修正します。これにより、後続のロードがスピンループの外へホイスト(巻き上げ)される回帰が発生していました(#135724 のコメントで報告)。修正として、volatile アクセスの場合は readonly フィールドの畳み込みをスキップします。

#136147 Cleanup unused cmake configs

@am11・GitHub・area-PAL-coreclrcommunity-contribution

ネイティブライブラリ、CoreCLR PAL、GCのビルド構成から、使用されていないCMakeの機能検出(プローブ)と設定値を削除するクリーンアップです。生成ヘッダーの対応する定義や、クロスコンパイル用のキャッシュエントリも併せて整理されています。ランタイムの公開API・動作に関わる変更ではなく、ビルドシステム内部の整理です。

#136135 ILVerification.Tests: reject unknown error names

@pcshrosbree・GitHub・area-Tools-ILVerificationcommunity-contribution

ILVerification.Tests のテストローダー(TestDataLoader)が、_Invalid_ メソッド名に含まれる期待エラー名を Enum.TryParse で解析し、VerifierError に該当しない名前を黙って無視していた問題を修正します。無視されると、テストが名前に書かれたより少ないエラーしか期待せず、スペルミスなどでテストが弱体化してしまうためです。本PRはテストのみの変更で、不明なエラー名があればテスト名と不明な名前を含むメッセージで例外を投げるようにします。

出力例:

System.ArgumentException : Test 'StoreLocUninit' expects 'StackUninit', which is not a VerifierError.

#136131 coreclr: default EnableWriteXorExecute to 0 on OpenHarmony

@springmin・GitHub・area-VM-coreclrcommunity-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 を要求できます。

#136128 Home DIM instantiating thunks on System.Object

@MichalStrehovsky・GitHub・area-NativeAOT-coreclr

NativeAOTにおけるデフォルトインターフェイスメソッド(DIM)のinstantiating thunkの配置先を、ジェネリックなインターフェイス自身ではなく、非ジェネリックな System.Object に変更する修正です。thunkがジェネリック型上にあると「instantiating argumentが必要かどうか」の判定で問題が生じ(実際には不要)、それを打ち消すための特殊処理が多数必要になるため、これを回避する局所的な修正として行われています。Issue #136073 を修正します。

作成者によると、この方法は複数オブジェクトファイル(multi-obj)モードでは機能せず、これらのthunkがすべてCoreLib.objにコンパイルされるように見える制限がありますが、他の事情を考慮すれば許容できるとされています。

#136125 Reject NativeAOT closed static delegates over non-reference first parameters

@Copilot・GitHub・area-NativeAOT-coreclr

NativeAOT では、第1引数が参照型以外(値型など)の closed static delegate が受け入れられ、メソッドが値を期待する箇所にオブジェクト参照が渡されていました。CoreCLR ではこのバインドは拒否されます。本PRは NativeAOT の動作を CoreCLR に揃え、該当するバインドを拒否します。

  • 第1引数が値型・byref・ポインター・関数ポインターの場合は、null ターゲットも含めて拒否されます。
  • 例外をスローするオーバーロードは ArgumentException を報告します。
  • throwOnBindFailure: false の場合は null を返します。

#136120 Correct x86 instruction metadata

@tannergooding・GitHub・area-CodeGen-coreclr

JITが使用するx86命令メタデータを修正するPRです。対象は、メモリサイズ、EVEX圧縮ディスプレースメント(compressed displacement)、マスキング、オペランドマッピングです。

特に VPMULDQ / VPMULUDQ は64ビットのブロードキャストメモリオペランドを使うため、JITは圧縮ディスプレースメントを8バイト単位でスケールする必要があります。この修正に合わせて、隣接フィールドのケースを検証する AVX-512 向けの符号付き・符号なし回帰テストを追加しています。あわせて関連する命令メタデータを修正し、EVEXのサイズ計算とLoweringのために quarter-width tuple(1/4幅タプル)の扱いを追加しています。

#136119 Guard EncryptedXml_DecryptDocument_MaxCount_Default with RemoteExecutor.IsSupported

@lewing・GitHub・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))]

#136116 Require threads for ControlledExecutionTests.CancelInTryAndExitCatchNormally

@pcshrosbree・GitHub・area-System.Numericscommunity-contribution

ControlledExecutionTests.CancelInTryAndExitCatchNormally に IsMultithreadingSupported の条件を付け、スレッドが使えない環境(シングルスレッドのbrowser-wasm)ではテストをスキップするようにする1行の修正です。#135939 のマージ以降、browser-wasm CIの System.Runtime.Tests がタイムアウトしており、その原因と推測される問題への対応です。PR自体のブラウザCI実行で、タイムアウトが解消するかどうかが確認されます。

#136114 [CI] Report compiler cache statistics after runtime test builds

@agocke・GitHub・area-Infrastructure-coreclr

CIパイプラインにおいて、Roslynコンパイラキャッシュの統計レポートが、ランタイムテストのビルド前に出力されていたため、テストのコンパイル分が集計から漏れていました。このPRは、統計レポートのステップをランタイムテストのビルド後へ移動します。キャッシュの設定やビルドの挙動自体は変更されません。

#136112 Add ilverify --list-errors to list the names --ignore-error matches

@pcshrosbree・GitHub・area-Tools-ILVerificationcommunity-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.

#136109 [Bugfix] Clear removed elements in ImmutableArray<T>.Builder

@equmagg・GitHub・area-System.Collectionscommunity-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 で再現が確認されており、以前から存在する問題とのことです。

#136089 [cDAC] Fix incorrect filtering of stack-interior references

@SwapnilGaikwad・GitHub・area-VM-coreclrcommunity-contribution

ランタイムの一部の経路では、PromoteCarefully を経由せずにスタック内部参照(stack-interior references)を報告するため、cDAC側とランタイム側でフィルタリングが非対称になっていました。比較前に両方の結果からこれらの参照を除外することで、cDAC ストレステストの誤検知(false failure)を防ぎます。作成者によれば、#135959 で失敗していたCIパイプラインへの対処であり、本PRはcodexの支援で作成されています。

#136072 Restart HttpListener authentication when protection policy changes

@rzikm・GitHub・area-System.Net.Http

HttpListener の拡張保護(extended protection)セレクタがNTLMハンドシェイクの途中でポリシーを変更した場合、従来は400を返していました。Windows Server 2019 (RS5) では、古いコンテキストが破棄され、その継続トークンが新しいコンテキストに渡されて InvalidToken が返り、マネージド側のクライアント障害マッピングが400を選択していたためです。

本PRでは、進行中の同一パッケージのコンテキストがポリシー非互換になった場合に、401と新しいチャレンジで認証を再開するよう変更しています。古いコンテキストは、弱いポリシーのまま再利用せず、切り離して破棄します。新規の不正トークンに対する既存のマッピング(400)は変更されません。

#136063 Make whole-list ImmutableList<T>.Reverse() O(n)

@Copilot・GitHub・area-System.Collectionstenet-performance

ImmutableList<T>(およびそのBuilder)の全体反転 Reverse() が、これまでO(n log n)のインデックス指定スワップで実装されていた点を、ツリーをミラーリングする方式に変更し、各ノードを1回だけ訪問するO(n)にしています。AVLバランスは維持されます。部分範囲の反転は従来のまま変更されていません。

実装は次の方針です。

  • コピーオンライトで、frozen(凍結)済みの内部ノードはクローンし、リーフは再利用する
  • 未凍結のBuilderノードはその場で反転する
  • 全範囲を対象とするオーバーロードのみ、この経路を通す

#136050 [wasm][R2R] Fix calls through MethodImpl-redirected slots on portable entrypoints

@lewing・GitHub・arch-wasmarea-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していました(既存の問題)。修正後は、そのコードを所有するメソッドとして実行します。

#136040 JIT: inline box Nullable<T> in ReadyToRun

@lewing・GitHub・area-CodeGen-coreclr

ReadyToRun(R2R)コードで CORINFO_HELP_BOX_NULLABLE のインライン展開を有効化する変更です。クラスハンドルを直接埋め込む代わりに、box T と同じ経路(基底型のトークン経由)でアロケーションを行います。これにより、既存のエスケープ解析が対象となるヒープ割り当てを除去できるようになります。

作成者によると、box int? は browser-wasm および tiering なしのネイティブ R2R でおよそ 30 倍高速化されたとのことです。ios 系ターゲットは CoreCLR を composite R2R として公開するため同じコード生成になりますが、実機での計測は行われていません。

#136021 JIT: keep lea esp, [ebp] in x86 epilogs

@pcshrosbree・GitHub・area-CodeGen-coreclrcommunity-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)。

#136006 [wasi] Set RUNTIME_IDENTIFIER and ENTRY_ASSEMBLY_NAME in wasihost

@lewing・GitHub・arch-wasmarea-Hostos-wasi

CoreCLR の WASI ホスト(wasihost)が RUNTIME_IDENTIFIER を設定していなかったため、RuntimeInformation.RuntimeIdentifier が "unknown" を返していた問題を修正します。ホストが wasi-wasm(Mono の WASI ドライバーと同じ値)を設定するようになり、あわせて ENTRY_ASSEMBLY_NAME も corerun や hostpolicy と同様に get_runtime_property から提供されます。また、#134964 で追加された runtimeconfig.bin リーダーを堅牢化しています。

#135991 [wasm] Fix single-register struct call result stores (narrow stores, GC write barrier)

@lewing・GitHub・arch-wasmarea-CodeGen-coreclr

Wasmにおいて、単一レジスタで返される構造体の呼び出し結果ストア(LowerStoreSingleRegCallStruct)が、構造体のWasm ABI型(4バイト未満の構造体やオブジェクト参照をラップする構造体では i32)に型を変更していた問題の修正です。

この問題により、Half や1バイト構造体のストアが4バイト書き込みとなって隣接領域を破壊していました(インプレースの TensorPrimitives.Tan<Half> で次の入力がゼロになる)。また、オブジェクト参照のストアではGC write barrierが失われていました(Wasmのオブジェクトは現状gen0に留まるため、現時点では実害なし)。

修正は LoongArch64/RISC-V64 と同じルールを採用し、構造体自身のレジスタ型を維持しつつ、float戻り値の場合のみ呼び出しの型を採用します。

#135983 [browser] Make SystemJS_GetLocaleInfo argument order consistent

@lewing・GitHub・arch-wasmarea-System.Globalizationos-browser

SystemJS_GetLocaleInfo は C およびマネージド interop 側では (locale, culture, ...)(記述対象のロケール、次に表示言語)と宣言されていますが、TypeScript 実装と CoreLib の呼び出し側は (culture, locale, ...) の順で使っていました。リポジトリ内では両者の入れ替わりが打ち消し合って動作していましたが、宣言どおりに呼び出すと結果が誤っていました(例:fr-FR を en-US で記述すると anglais##États-Unis が返る)。

本PRは TypeScript 側のパラメータ順を宣言に合わせ、JSGetLocaleInfo / JSGetNativeDisplayName とその呼び出し元を更新します。リポジトリ内の動作は変わりません。

#135968 [release/11.0] cDAC: skip empty assembly-list slots in Loader_1.GetModuleHandles

@pcshrosbree・GitHub・Servicing-approvedcommunity-contributionarea-Diagnostics-cdac

release/11.0 に #135519 をバックポートするPRです。cDACの Loader_1.GetModuleHandles は、コレクティブルなアセンブリがアンロードされた際にAppDomainのアセンブリリストへ残る空スロットで例外をスローしていました。本PRはネイティブDACと同様に、このような空スロットをスキップするよう修正します。プロダクトコードの変更はnullチェックのみです。

#135956 Simplify frozen object heap allocation

@MichalStrehovsky・GitHub・area-NativeAOT-coreclr

NativeAOT における Frozen Object Heap の割り当て実装を簡素化するPRです。プラットフォーム固有の仮想メモリ操作(reserve/commit/mprotect)を廃止し、共有のゼロ初期化済みネイティブ割り当てに置き換えます。作成者によれば、この機能は CoreCLR VM に比べて使用頻度が低いため、実装を単純化できるとのことです。Copilot の概要では、これにより WASM 上でも NativeAOT の frozen object 割り当てが有効になるとされています。

#135952 Resolve WASI SDK for NativeAOT runtime test builds

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOT の WASI 向けランタイムテストのビルドで、共有の WASI SDK を解決できるようにする変更です。AcquireWasiSdk.targets をインポートし、NativeAOT の OS 固有リンカー設定より前に WASI_SDK_PATH を設定します。グループ化されたテストビルドは別々の MSBuild プロセスで実行され、外側のターゲットで計算されたプロパティを継承しないため、この処理は各テストプロジェクトで行われます。あわせて、Unix 用の rpath リンカー引数から WASM を除外します。

#135893 JIT: Gate single-edge root profile trust on hotness or speed preference

@EgorBo・GitHub・area-CodeGen-coreclr

FullOpts のルートメソッドに対して「単一エッジの合成プロファイル(synthetic profile)を信頼する」処理を、メソッドの hotness またはスピード優先の指定がある場合に限定する JIT の変更です。すべての FullOpts ルートでこのプロファイルを信頼すると、短命な動的メソッドへの過剰なインライン化が起こり、LambdaExpression.Compile() が大幅に遅くなっていたため、これを修正します(#127203 の修正)。

以下のいずれかの条件を満たす場合のみ、既存の合成ルートプロファイルのロジックを維持します。

  1. メソッドに [MethodImpl(MethodImplOptions.AggressiveOptimization)] が付いている
  2. JIT_FLAG_SPEED_OPT が設定されている(例: NativeAOT を prefer-speed でコンパイルした場合)
  3. Tier0 または ReadyToRun からの昇格後に JIT_FLAG_TIER1 が設定されている

#135863 corehost: singlefilehost fixes for OpenHarmony

@springmin・GitHub・area-Hostcommunity-contribution

OpenHarmony(OHOS)向けに singlefilehost(静的 apphost)をビルドできるようにするための CMake 修正です。OHOS 上では NATIVE_LIBS_EMBEDDED と System.Net.Security.Native-Static をスキップし、runtimeinfo のリンクを $<LINK_LIBRARY:WHOLE_ARCHIVE> ジェネレーター式ではなく明示的な whole-archive リンカーフラグで行うよう変更しています。作成者によれば、この式は OpenHarmony NDK ツールチェーンでは使用できないためです。

#135853 JIT: spill local refs for COMMA-wrapped local stores in impAppendStmt

@EgorBo・GitHub・area-CodeGen-coreclr

JITのimporterにおいて、クラス初期化ヘルパーのCOMMAでラップされたローカル変数ストアを impAppendStmt が認識できず、スタック上の保留中ローカル参照がspillされないため、構造体のタプルスワップで旧値ではなく新値が読み込まれる不具合を修正します。

ブロック先頭(impLastStmt == nullptr)では、impStoreStruct が構造体ストアをクラス初期化ヘルパーのCOMMAの下に沈めます(例:静的構造体フィールドへの starg)。従来の impAppendStmt は、ステートメントのルートがローカルストアである場合のみをローカルストアとして扱っていました。本修正ではCOMMAを辿って格納先のローカルを特定します。

#135837 JIT: ignore finally-entry backedges when fixing continuation weights

@EgorBo・GitHub・area-CodeGen-coreclr

JITの importer.cpp において、finallyハンドラのcontinuation(BBJ_CALLFINALLY とペアになる継続ブロック)の重みを修正する処理で発生していたnull参照を修正します。finallyハンドラには callfinally 以外の通常のバックエッジ(ループなど)を持つ先行ブロックが存在し得ますが、これらがフィルタされないままペアのcontinuationにアクセスしていました。そのため、callfinally 以外の先行ブロックを処理前に除外するようにしています。EH-edgeの構築時のフィルタ方法と揃える形です。

#135823 JIT: preserve null checks when folding ThrowIfNull in Tier0

@Copilot・GitHub・area-CodeGen-coreclr

Tier0 において ArgumentNullException.ThrowIfNull(r.Ref) のように CORINFO_HELP_BOX が畳み込まれる際、構造体の読み取りが削除され、null の byref に対して NullReferenceException がスローされなくなる問題の修正です。インポーターで、null の可能性があるソースアドレスに対して GT_NULLCHECK を保持するようにし、paramName の評価より前に null チェックが行われるようにしています。

#135653 Load CoreCLR browser-WASM PDBs into memory instead of the VFS

@jkoritzinsky・GitHub・area-Host

CoreCLRのbrowser-WASMホストが、PDBをEmscriptenの仮想ファイルシステム(VFS)ではなく、アセンブリと同様にリニアメモリ上に登録するよう変更されました。これによりJavaScriptのファイルシステムサポートへの依存が不要になり、MonoのbrowserWASMにおけるシンボル読み込み方式とも揃います。

スタックトレースでファイル情報が要求された際、CoreCLRは保持されているCodeViewエントリからポータブルPDBのファイル名を遅延的に特定し、既存の外部アセンブリプローブ経由でホストに問い合わせます。取得したPDBは Module::SetInMemorySymbolStream によってモジュール所有のシンボルストリームとしてキャッシュされます(SetSymbolBytes に伴う動的シンボル通知を回避するため)。

#135494 [cDAC][wasm] Keep caller SP for non-R2R callers and restore SoftwareExceptionFrame FP

@lewing・GitHub・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 するようにしました。

#135146 [wasm] [JIT] Contain Array Data Offsets

@adamperlin・GitHub・area-CodeGen-coreclr

WebAssembly (Wasm) 向けJITにおいて、配列要素アクセスのアドレス計算を並べ替え、配列データオフセットをload/storeのメモリオペランドに畳み込めるようにする変更です(#134465 を解決)。既存のcontainment(包含)ロジックの制約(アドレスが TYP_REF または TYP_BYREF であること)の範囲内で動作します。作成者によれば、同様の並べ替えはRISC-Vでは既に行われています。

#135067 Enable ILLink caching and post-build purging in CI

@sbomer・GitHub・linkable-frameworkarea-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・スナップショット保存が成功したとのことです。

#135066 Support ILLink caching in runtime library builds

@sbomer・GitHub・linkable-frameworkarea-Tools-ILLink

ランタイムのライブラリビルド(共有フレームワーク、out-of-band、ライブラリ単位のトリミング)で実行される ILLink を、実験的な ILLink キャッシュの対象にする変更です。キャッシュは引き続きオプトインです。既存のタスクパラメータを可能な限り再利用し、リンク属性・置換・アセンブリ検索ディレクトリに必要な範囲の追加引数形式のみをサポートします。アセンブリ解決や独自引数の優先順位は変更せずに、これらの入力をフィンガープリント化します。

#134910 [JIT] Rationalize: Re-run pre-order processing on identity shuffle rewrite in PreOrderVisit

@adamperlin・GitHub・area-CodeGen-coreclr

JITのRationalizeフェーズにおいて、PreOrderVisit中のRewrite*Intrinsicで別ノードに置き換えられた場合、その置換後ノードに対して前処理(pre-order processing)が実行されない問題を修正します(#133787 の解決)。

問題となるIRは、外側のShuffleが恒等シャッフルであり、RewriteHwIntrinsicAsUserCallで畳み込まれて消える一方、置換ノードとなる内側のShiftRightLogical128BitLane(引数が非定数のためGT_CALLへの書き戻しが必要)が処理されないケースです。修正により、Rewrite*Intrinsicが異なるノードを返した場合、その新しいノードに対して処理ロジックを再実行します。

#134819 Update x64 Helix test VMs to Azure Linux 4

@richlander・GitHub・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 イメージの可用性への影響はありません。

#133533 Convert .data tls IL tests to C++/CLI

@jkoritzinsky・GitHub・area-ILTools-coreclr

.data tls を使用していた4つのILテストを、C++/CLI(IJW)ベースのテストへ変換するPRです。これらのテストは実際にはC++/CLIのシナリオを検証するものであり、そのシナリオはC++/CLI経由でのみサポートされているため、変換が行われました。ネイティブ側はC++/CLIで実装し、マネージド側のラッパーが UnsafeAccessor / UnsafeAccessorType を使ってネイティブの静的エントリポイントを呼び出します(リフレクションは不使用)。

変換対象:

  • JIT/Directed/tls/Test-TLS
  • JIT/Directed/tls/MutualRecurThd-TLS
  • JIT/Regression/CLR-x86-JIT/V1.2-M01/b03689
  • JIT/Regression/CLR-x86-EJIT/v1-m10/b07847

ネイティブ側のTLSは、ファイルスコープの __declspec(thread) グローバル変数で実装され、#pragma unmanaged/#pragma managed の配置が使われます。

#131428 Ensure that x64 disassembly names operands at the size actually encoded

@tannergooding・GitHub・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

2026年10月19日 (48 PRs)うち Bot 5 件 この日のページ →

#136094 Prevent unsafe folding of method-specific self imports in Wasm R2R

@radekdoulik・GitHub・area-ReadyToRun

ブラウザ/CoreCLR 向け Wasm ReadyToRun (R2R) のメソッド本体の重複排除(folding)で、メソッド固有のインポートセルを選択する自己リロケーションが正規化され、誤ったメソッドに処理が振り向けられる問題を修正します。WASM_MEMORY_ADDR_REL_LEB は、delegate 構築ヘルパーや仮想呼び出しのインポートセルをイメージ相対でロードする際に使われるため、異なる自己ターゲットを正規化すると不正な折りたたみが起きます。このリロケーションを、すでに保護されている符号付き形式と同様に「同一性を露出するもの(identity-exposing)」として分類するようにしました。

#136085 JIT: Exclude byref-like structs from async continuation capture

@EgorBo・GitHub・area-CodeGen-coreclrruntime-async

JITのasync continuation capture(async関数のサスペンドポイントをまたぐローカル変数の退避)において、byrefを含まないbyref-like struct(ref struct)も退避対象から除外するよう修正しています。これらの構造体を退避すると、レイアウトがスタック専用とみなされているためwrite barriersなしでヒープへのストアが生成され、continuationの再利用時にGC corruptionを引き起こす問題(#136000)を修正します。

runtime-asyncの仕様には「Byref-like structs will also not be hoisted across suspension points and will have their default value after a suspension point.」と明記されており、この修正は仕様に沿ったものです。

#136084 Fix InsertScalarFromVectorDisasm in no-intrinsics runs

@Copilot・GitHub・area-Infrastructure

jitstress_isas_nohwintrinsic 構成下で InsertScalarFromVectorDisasm テストが失敗する問題の修正です。この構成ではintrinsic認識が無効化されるため、テストが期待する insertps のソースレーン畳み込みが行われませんでした。そこで、テスト専用の設定として DOTNET_EnableHWIntrinsic=1 を指定し、厳密な逆アセンブリ検証をそのまま維持します。

#136083 [release/11.0] Preserve ARM64 flags dependencies during indirection reordering

@EgorBo・GitHub・Servicing-approvedarea-CodeGen-coreclr

release/11.0 向けのバックポート(main の #135575)です。ARM64 で間接参照(indirection)やストアの並べ替え、およびポストインデックス・アドレッシングを行う際に、暗黙のフラグ依存関係が保持されず、アロケーション後に符号付き剰余の結果が誤って計算される問題(Issue #135521)を修正します。例として、非負の奇数値に対する k % 2 が -1 を返すケースがあります。

#136082 [release/11.0] Report byref-like struct arguments to the GC in helper-based tail calls

@EgorBo・GitHub・Servicing-approvedarea-CodeGen-coreclr

release/11.0 への #136019(main)のバックポートです。ヘルパーベースの tail call で引数をバッファリングする際、byref-like 構造体(例: Span<T>)を GC 記述子に含めるよう修正します。 修正前は、Span<T> を引数に取るヘルパーベース tail call の最中に GC が基になる配列を移動すると、メモリ破損・誤った結果・ハング・致命的クラッシュが起こり得ました(F# / Windows x64 で報告)。

#136080 [release/11.0] JIT: Make GenTree::Compare more conservative around several node types

@EgorBo・GitHub・Servicing-approvedarea-CodeGen-coreclr

GenTree::Compare を、複数のノード種別に対してより保守的に比較するよう変更し、head/tail merging が誤って異なるツリーを同一と見なさないようにします。main の #135363 の release/11.0 へのバックポートです。

修正前は、JIT が同一オフセットにある別々のフィールドへのアクセスをマージし、その結果として型チェックを誤って除去することがありました。これにより Microsoft.CodeAnalysis を用いたコンパイル emit 中に、断続的な NullReferenceException が発生していました(顧客報告。.NET 10.0.12 で報告されており、.NET 11 固有の回帰ではありません)。

#136079 [release/11.0] JIT: Use local's GC type when unspilling a register candidate

@EgorBo・GitHub・Servicing-approvedarea-CodeGen-coreclr

release/11.0 への #135381 のバックポートです。JIT のコード生成で、レジスタ候補のローカル変数を unspill する際に、そのローカル自身の GC 型を使うよう修正します。あわせて、アンマネージ呼び出しの時点でコールee-saved レジスタが GC-live になっていないことを assert で検証します。

報告されている症状は、アンマネージ関数ポインタを使う COM 相互運用コード (Paint.NET のテストハーネスで確認) で、断続的に致命的な GC クラッシュが発生するというものです。

#136077 [release/11.0] Filter leading GC polling frames from EventPipe stacks.

@lateralusX・GitHub・Servicing-approvedarea-Tracing-coreclr

EventPipeのサンプリング(スレッド中断)時に、スレッドがマネージドのGCポーリングヘルパー(PollGC / PollGCWorker)内に入ることがあり、これがキャプチャされたスタックの先頭に現れて実際のワークロードを覆い隠す問題を修正するバックポート(release/11.0向け)です。PollGCWorkerをバインダーから参照可能にしてランタイム起動時にバインドし、EventPipeのスタックウォーカーが、メソッドのロードを行わずに先頭のGCポーリングフレームのみを除外できるようにします。呼び出し元フレーム、サンプル、サンプル分類は保持されます。main側のPR(#135219)を手動で調整したバックポートで、.NET 11向けのThread.CoreCLR.csとフィーチャーガードを使用しています。

#136043 JIT: clear BBF_DONT_REMOVE on the new preheader in loop inversion

@lewing・GitHub・area-CodeGen-coreclr

JITのループ反転(loop inversion)で fgSplitBlockAtEnd により preheader を分割すると、新しい preheader が BBF_DONT_REMOVE フラグを継承してしまいます。旧 preheader が catch ハンドラのエントリであり、かつループ条件が後に false へ畳み込まれる場合、新ブロックは到達不能になりますが削除できません。

その結果、Wasm では古い bbPreorderNum が原因で fgWasmControlFlow の block order disagrees with preorder num に引っかかります。他のターゲットでは不要な int3/brk が出力されます。

本PRでは新しい preheader から BBF_DONT_REMOVE を明示的にクリアします。旧 preheader が EH エントリのまま残るため、この対応で問題ありません。fgopt.cpp の OSR エントリ処理と同様の方針です。

#136029 Fix ILVerify endfinally check for nested regions

@pcshrosbree・GitHub・area-Tools-ILVerificationcommunity-contribution

ILVerify が endfinally/endfault の発生位置を検証する際、最も内側の「ハンドラ」しか確認しておらず、finally/fault ハンドラの内側にネストされた try ブロックや filter 内にある endfinally/endfault を誤って有効と判定していた問題を修正します。ECMA-335 I.12.4.2.8.2.6 では「最も内側を囲む保護ブロック・filter・ハンドラが finally または fault ハンドラであること」と規定されています。

修正前は、以下のような IL が検証エラーなしで通っていました(endfinally の直近を囲むのは try ブロックであり、ハンドラではない)。

.finally
{
    .try
    {
        endfinally    // 最も内側を囲むのはこの try
    }
    catch [System.Runtime]System.Exception
    {
        pop
        leave HandlerEnd
    }
HandlerEnd:
    endfinally
}

endfault や、ネストした filter 内の命令でも同様でした。

#136022 Queue RevocationResponder work items to the global thread pool queue

@pcshrosbree・GitHub・area-System.Net.Securitycommunity-contribution

テスト用のループバックOCSP/CRLサーバーである RevocationResponder が、スレッドプールが高負荷の状態でリクエストに応答しなくなる問題の修正です。原因は、ThreadPool.QueueUserWorkItem の preferLocal: true により、リクエストハンドラがワーカースレッドのローカルキューに積まれる点にあります。そのスレッドは直後に HttpListener.GetContext() でブロックするため、他のワーカーがスティールしない限りハンドラが実行されません。グローバルキューが忙しい間は応答が返らず、チェーンエンジンのフェッチがタイムアウトして RevocationStatusUnknown となり、ConnectWithRevocation_WithCallback(checkRevocation: True) が期待する Revoked を得られず失敗していました。

修正は、アクセプトループとリクエストハンドラのキュー投入を preferLocal: false に変更するものです(ThreadPool.QueueUserWorkItem(state => HandleRequest(state), context, false) の形)。テスト専用の変更です。

#136002 ILC: make IsAsyncCall instantiation-invariant

@wpscott・GitHub・community-contributionarea-NativeAOT-coreclrruntime-async

NativeAOT(ILC)で OptimizationPreference=Size の場合に、Task<ValueTask> / Task<ValueTask<int>> を await すると NullReferenceException が発生する問題の修正です。原因は MethodExtensions.IsAsyncCall がインスタンス化後のシグネチャで Task/ValueTask の戻り値判定を行っており、AsyncHelpers.TransparentAwait<T> では T = ValueTask 等のときに判定結果が反転していたことです。ランタイム(vm/class.cpp)は AsyncMethodFlags をジェネリックメソッド定義から一度だけ算出するため、インスタンス化に依存しない判定に揃えました。

var tcs = new TaskCompletionSource<ValueTask>();
tcs.SetResult(ValueTask.CompletedTask);
ValueTask inner = await tcs.Task.ConfigureAwait(false);
await inner.ConfigureAwait(false);

#135999 fold more redundant nullchecks

@EgorBo・GitHub・area-CodeGen-coreclr

CoreCLR JITにおいて、Value Number(VN)・アサーション・SSAを活用して、より多くの冗長なnullチェックを除去する変更です(作成者によるとドラフト状態で、EH(例外処理)のPHI入力の扱いは要レビュー)。

作成者が示した例では、holder.Item == null を確認済みのフィールドに対する呼び出しで、x64のコードサイズが37バイトから35バイトに縮小しています。

[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.AggressiveOptimization)]
public static int Test_FieldGuardCall(Holder holder, int value) {
    if (holder.Item == null) return -1;
    return holder.Item.Touch(value);
}
 G_M21527_IG03:
-       cmp      dword ptr [rcx], ecx
        call     [Box:Touch(int):int:this]

#135989 Document ILVerify.Verifier thread safety, PEReader lifetime and the rest of the public API

@pcshrosbree・GitHub・area-Tools-ILVerificationcommunity-contribution

ILVerify.Verifier と IResolver の既存の振る舞い(スレッドセーフ性、検証の実行タイミング、PEReader の寿命、リゾルバが同一の PEReader インスタンスを返すべき理由)を XML ドキュメントコメントとして明文化する PR です。src/coreclr/tools/ILVerification で公開されている残りの API(VerificationResult、ErrorArgument、VerifierOptions、VerifierError、Verifier のコンストラクタ/メソッド)にもドキュメントを追加しています。動作の変更はありません。

ドキュメント化された主な事実(コード根拠に基づく):

  • ILVerifyTypeSystemContext は PEReader ごとに EcmaModule を Dictionary にキャッシュし、ロックなしで追加・削除は行わないため、1つの Verifier を複数スレッドで共有するとスレッドセーフではありません。
  • Verify メソッドはイテレータを返すため、検証とリゾルバ呼び出しは列挙時に実行されます(SetSystemModuleName はシステムモジュールを即時に解決)。
  • EcmaModule は PEReader と MetadataReader を保持し、ILVerification 側では PEReader を破棄しないため、呼び出し側は PEReader を使用可能な状態に保つ必要があります。
  • モジュールは PEReader インスタンスをキーにするため、同一アセンブリに別インスタンスを返すリゾルバは、型が別物の複数モジュールを生成します。

#135987 [release/11.0] Allow uncontended synchronous waits on single-threaded runtimes

@lewing・GitHub・Servicing-approvedarch-wasmarea-System.Threadingos-browser

シングルスレッドランタイム(browser、WASI)で、SemaphoreSlim.Wait、ManualResetEventSlim.Wait、Monitor.Wait/Condition、Task.Wait などの同期待機が、実際にはブロックしない場合でも PlatformNotSupportedException をスローしていた問題を修正します。本変更により、競合のない(uncontended)待機は成功し、実際にブロックが必要になる場合にのみ例外をスローします。マルチスレッドランタイムの動作は変更されません。

これは .NET 10 からのリグレッション(dotnet/runtime#123329 が原因)で、Roslyn workspaces のように SemaphoreSlim を使うBrowser/WASIアプリやライブラリに影響していました。本PRは main の dotnet/runtime#135413 の release/11.0 へのバックポートです。

#135972 Keep corerun host-runtime contract state alive for the process lifetime

@MihaZupan・GitHub・area-Host

corerun が run() / main の終了後もランタイムの別スレッドから呼ばれ得る host_runtime_contract コールバック(resolve_assembly_to_path / get_runtime_property)で、破棄済みのスタック上の状態を参照して SIGSEGV するクラッシュを修正します。#132861 で TPA が プロパティ文字列から host_runtime_contract のコールバックへ移行された影響で、run() 内のスタックローカルだった contract とそのコンテキスト(assembly パスの unordered_map を保持)が、終了処理中に別スレッドから参照されていました。

  • 修正内容:contract とコンテキストをヒープ確保し、意図的に解放しない(プロセス終了まで必要なため)。
  • 併せて、コンテキストが main の(コピー不可の)configuration を指すのをやめ、get_runtime_property が必要とするフィールドをコピーして保持するようにしています。
  • 本件は hostpolicy に対する #135908 の corerun 版です。

#135954 Preserve NativeAOT WASI numeric exit codes

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOT の WASI アプリケーションで、マネージドのエントリポイントが返す数値の終了コードを保持するようにする変更です。

WASI Preview 2 の libc の通常の起動処理は main を呼び出し、r != 0 を CLI run インターフェイス経由で返します。そのため、テストが 100 を返しても、Wasmtime の exit-with-code オプションを使ってもホストの終了コードは 1 になります(libc の時点で数値が破棄されているため)。

WASI では exit(__managed__Main(...)) を呼び出すことで、libc が数値の exit-with-code インターフェイスを使えるようにします。他プラットフォームのブートストラップ経路は変更されません。なお、Wasmtime 側でこのインターフェイスを有効にするには -S cli-exit-with-code=y が引き続き必要です。

#135949 Require matching WASM function types when folding method bodies

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOT コンパイラ(WASM ターゲット)で、メソッド本体を重複排除(folding)する際に、WASM の関数型(lowered function type)が一致していることを要求するようにする変更です。命令バイト列が同一でも、未使用パラメータの違いなどにより WASM のシグネチャが異なる場合があります。アドレスが取得されたメソッドの forwarding stub は、パラメータを folding 先のターゲットへ渡すため、ターゲットの関数型が異なるとモジュールが不正になる問題がありました。これを防ぐため、隠し ABI パラメータを含む lowered 関数型の比較を、WASM におけるメソッド本体の等価判定に追加しています。既存の本体/リロケーション比較および非 WASM の挙動は変更されません。

#135941 Serialize HTTP/2 loopback writes and join reader before disposal

@rzikm・GitHub・area-System.Net.Http

HTTP/2のループバックテストにおいて、同一接続上で複数の書き込みが同時に発行され、SslStream が NotSupportedException: This method may not be called when another write operation is pending. をスローする問題を修正するテスト側の変更です。保留中の ReadFrameAsync が透過的にPING ACKを送信するのと同時に、テストがレスポンスHEADERSを送信する場合があります。また、keepalive用のリーダーがクライアントのEOFを検知して切断用GOAWAYを送信している最中に、最終レスポンスのDATAが書き込まれる場合もあります。プロダクトコードの変更や共有ヘルパー実装の変更はなく、プロトコルのアサーションも変わりません。

#135940 Synchronize WebSocket keep-alive timeout test with heartbeat completion

@rzikm・GitHub・area-System.Net

WebSocket_NoPongResponseWithinTimeout_Aborted テストの同期不良を修正するPRです。従来は固定の2.2秒待機で「最初のping送信」と「そのタイムアウトによるハートビート処理」の両方が完了すると仮定していましたが、ThreadPoolのスケジューリング遅延下では、ping期限切れ前またはハートビート配信前に Open が観測され、アサーションが失敗し得ました。修正では、最初のpingを読み取って検証した後、タイムアウト駆動のストリーム破棄による相手側のEOFを待ってから Aborted を検証するようにしています。いずれの待機も既存の全体キャンセルトークンで制限されます。製品コードの変更はなく、テストのみの修正です。

#135939 [Interpreter] Raise a pending thread abort again at the resume point after a catch

@pcshrosbree・GitHub・community-contributionarea-CodeGen-Interpreter-coreclr

インタープリターで catch ブロックを抜けた後、保留中のスレッド中断(thread abort)を再開ポイントで再度発生させるよう修正するPRです。コンパイル済みコードの EECodeManager::ResumeAfterCatch と同様の挙動を InterpExecMethod に持たせています。あわせて、catch の leave island への遷移を INTOP_LEAVE_CATCH に統一しました。これにより、再開ポイントが catch の try 領域を囲むすべての try 領域の内側に入り、#135871 で外側の catch が abort を取りこぼす問題が解消されます。

#135932 Managed ilasm: keep invalid LocalScope/LocalVariable rows and report them as errors

@pcshrosbree・GitHub・area-ILTools-coreclrcommunity-contribution

マネージド版 ilasm が、Portable PDB 仕様上無効な LocalScope / LocalVariable 行を黙って捨てていた挙動(#135311)を改め、行は宣言どおり出力したうえで、ソース上の該当箇所にエラーとして報告するようにする変更です。--error 指定時はエラーがあっても行を宣言どおりに書き出し、「Output file contains errors」を表示します。--error なしでは ***** FAILURE ***** を出力し、何も書き出しません。

追加された診断:

  • ILA0058: 命令のないスコープ(最初の名前付きローカルの位置で報告)
  • ILA0059: スコープ内で既に宣言済みのローカル名
  • ILA0060: スコープ内で他の名前付きローカルが使用済みのスロット

PDB が要求された場合のみスコープを記録するため、PDB なしのビルドには影響しません。

#135921 Validate pcMap, not pcClauses, in CordbReJitILCode::GetInstrumentedILMap

@pcshrosbree・GitHub・area-Diagnostics-coreclrcommunity-contribution

CordbReJitILCode::GetInstrumentedILMap(src/coreclr/debug/di/module.cpp)で、自身のパラメータではなく、直前の GetEHClauses のパラメータである pcClauses を検証していた誤りを修正します。pcClauses を GetInstrumentedILMap 自身の out パラメータ pcMap に置き換えています。

従来コードがコンパイルできていたのは、VALIDATE_POINTER_TO_OBJECT_OR_NULL マクロが何も展開されないためです(src/coreclr/debug/inc/common.h)。このため引数は破棄されており、挙動は変わりません。作成者は linux-x64 Release で libmscordbi.so を変更の前後でビルドし、2つのファイルがバイト単位で同一であることを確認しています。

#135915 Do not adjust wasm virtual IPs in the thread abort stack walk

@pcshrosbree・GitHub・arch-wasmarea-VM-coreclrcommunity-contribution

wasm上のReadyToRunフレームのcontrol PCは戻りアドレスではなく仮想IP(fgWasmVirtualIP)であるため、スレッドアボートのスタックウォーク(TAStackCrawlCallBackWorker)で行っている「非アクティブフレームのオフセットを1戻す」補正が誤動作していました。これにより、ハンドラ(finally/catch)の最初のリージョンでの呼び出しがハンドラ外と判定され、そのハンドラ内で再度アボートが発生していました。本PRでは仮想IPに対してこの補正をスキップするよう修正します(SfiInit/SfiNextでは既にスキップ済み)。

結果として、デフォルトのReadyToRun CoreLibで ControlledExecution.Run が OperationCanceledException ではなく ThreadAbortException をスローする問題が解消されます。

#135906 crossgen2: allow struct/unmanaged-constrained generics over primitives in the version bubble

@lewing・GitHub・area-ReadyToRun

crossgen2が、CoreLibのプリミティブ型(char、int など)を型引数とする where T : struct / where T : unmanaged 制約付きジェネリックを、CoreLibのバージョンバブル外のコードからインスタンス化した場合に、プリコンパイルもインライン化もしなかった問題の修正です。

原因は ComputeInstantiationVersionsWithCode が、型制約が1つでもあるとプリミティブ型引数をバージョンバブルの一部と見なさなかった点です。C#は struct / unmanaged 制約を System.ValueType の型制約としてメタデータに出力するため、制約リストが空でなくなり、VersionsWithMethodBody が false を返していました。その結果、定義モジュールへのコンパイルがされず、CanInline も false となり、JITが「cannot get method info」と報告していました。

修正では、型引数がプリミティブの場合に System.ValueType 制約を無視します。インターフェイスやクラスなど他の制約は従来どおり不適格のままです。ランタイム側の変更は不要です。

#135862 [QUIC] Remove buffer-size payload

@ManickaP・GitHub・area-System.Net.Quic

QUICのテストが不安定になる原因として、接続のクローズ処理がストリームデータの受信より先に処理されるタイミング問題が疑われています。これを受け、テスト内でバッファサイズ分のペイロードを送る処理を取り除き、この競合が起きる確率を下げる変更です。ライブラリ本体の実装変更ではなく、テストコードのみの修正です。

#135820 [CI] Prune Roslyn caches before saving snapshots

@agocke・GitHub・area-Infrastructure

Azure Pipelinesがキャッシュスナップショットを保存する前に、Roslynのコンパイルキャッシュを削除(プルーニング)するCI変更です。VBCSCompiler -purgecache:<job-start-time> を使い、そのジョブで使われなかったエントリを破棄し、再利用されたエントリと新規作成されたエントリは保持します。

背景として、Linux Debugのキャッシュ保存がアーカイブ作成時の No space left on device で失敗しており、新しいスナップショットを公開できていませんでした。サンプルのLinux Releaseキャッシュでは、未使用エントリが11,430件、再利用エントリが288件、新規保存エントリが881件でした(バイト数ではなくエントリ数)。

#135806 Eagerly resolve intrinsic ReadyToRun type handles and arrays

@davidwrighton・GitHub・area-ReadyToRun

crossgen2 の ReadyToRun コンパイルで、CorElementType により直接エンコードされる組み込み型(string、object、TypedReference など)の具象 TYPE_HANDLE インポートを、メソッドごとのフィクスアップではなく モジュール eager インポートセクションに配置するよう変更します。同ルールはこれらの型の配列(多次元配列・ネスト配列を含む)にも適用されます。enum、その他トークン依存の型、ポインター、byref は従来の扱いのままです。

  • 最終的な依存関係トラバーサルで到達したインポートのみが出力され、定義済みの型一覧をルート化するものではありません。
  • eager セルはモジュールロード時に解決され、メソッドごとのフィクスアップリストには現れなくなります。
  • Wasm 専用ではなく、crossgen2 共通のインポート選択ロジックの変更です。
  • 元の変更(#135553)から独立部分を main に切り出したもので、二段階コンパイル、直接呼び出し、prolog/フレーム ID の変更は含みません。

#135804 Treat Wasm Vector<T> layout as fixed

@davidwrighton・GitHub・area-ReadyToRun

Wasm32 では System.Numerics.Vector<T> の幅が 128 ビットに固定されているため、そのレイアウトを固定として扱うように変更します。これにより、このターゲットでは実行時依存のベクターレイアウトチェック(ReadyToRun のフィックスアップ)が不要になります。含有型も、残りのレイアウトが version bubble 内で固定されていれば固定レイアウトになり得ます。他のターゲットでは従来どおり実行時依存のチェックを維持し、含有型に対する通常の version bubble 制限も維持されます。

#135801 Recognize static field intrinsics before Wasm static helpers

@davidwrighton・GitHub・area-ReadyToRun

Wasm向けReadyToRunコンパイルで、静的ベースヘルパーを選択する前に、既存の静的フィールドintrinsicを認識するよう修正します。IntPtr.Zero、UIntPtr.Zero、BitConverter.IsLittleEndian の読み取りは定数として、String.Empty は文字列ハンドルとして扱えるようになります。アドレス取得、書き込み、通常の静的フィールドアクセスは従来の処理を維持します(mainの IsThreadStaticForTarget(field) によるスレッド静的判定も保持)。これは dotnet/runtime#135553 から独立した修正だけを切り出したもので、two-phase compilation、direct call、prolog/frame-identity の変更は含みません。

#135797 Fix background GC zeroing of arrays larger than 4 GiB

@janvorli・GitHub・area-GC-coreclr

バックグラウンドGC(BGC)中に割り当てられた4 GiBを超える配列が、ゼロ初期化されない問題を修正するPRです。

UOH(LOH/POH)の割り当てがBGCと重なる場合、make_unused_array が割り当て領域を一時的にフリーオブジェクトとして表現します。4 GiBを超える割り当てでは複数のピースが必要になることがあります。新規メモリ上でヘッダーだけをクリアすると、後続ピースに PREV_EMPTY フリーリストマーカーが残り、ゼロ初期化の保証が破られていました。

修正では、UnsetFree にオブジェクトサイズを渡し、ピースがフリーリストの前方ポインタを格納できる大きさであれば、そのポインタもクリアします。clear_unused_array はすでにすべての一時ピースを走査しているため、割り当てが返される前に各ピースのメタデータがクリアされます。

#135790 Return generated GUIDs by value

@AaronRobinsonMSFT・GitHub・area-VM-coreclr

CoreCLR内部のGUID生成ヘルパーについて、出力ポインタ経由で結果を書き込む方式をやめ、GUIDを値渡し(戻り値)で返すように変更するリファクタリングです。あわせて、呼び出し元を更新し、GuidFromName を static にしています。GUID生成の挙動そのものは維持される旨がCopilotの概要に記載されています(ビルド・テストは未実施とのことです)。

#135768 Absolute/global addressing changes for native AOT/WASM

@MichalStrehovsky・GitHub・arch-wasmarea-CodeGen-coreclr

NativeAOT/WASI向けに、CoreCLRのイメージベース相対アドレッシングではなく、リンカーが再配置する絶対アドレスを使用するよう変更します。「Console.WriteLine の hello world を WASI/NativeAOT でコンパイル・リンク・実行する」ための一連のPRの一部です。

主な内容:

  • 絶対アドレス(符号付き)定数とJITデータアドレスを、イメージベースのグローバル加算なしで出力
  • スカラーのグローバル load/store を、アドレスオペランドをゼロとした絶対memarg再配置に畳み込み
  • 関数ポインタの実体化を維持するため、関数を対象とする WASM_MEMORY_ADDR_SLEB 再配置をテーブルインデックス再配置にマッピング

emitImageBase() はR2R専用のままで、CoreCLRのイメージ相対パスは変更されません。WASI SDK clangの非PICグローバルアクセスモデルに合わせた設計です。

#135749 Update MsQuic to version 2.5.12

@rzikm・GitHub・area-System.Net.Security

MsQuicのバージョンを2.5.12に更新するPull Requestです。あわせて System.Net.Security の TlsSession に変更が入り、TlsSessionTests.cs に107行のテストが追加されています。

提供された情報には、MsQuic更新の目的や TlsSession.cs の変更の詳細は含まれていないため、それらについての記述は控えます。

#135748 Improve tar symlink validation during extraction

@rzikm・GitHub・area-System.Formats.Tar

System.Formats.Tar のアーカイブ展開時に行うシンボリックリンクの検証を改善するPRです。親ディレクトリ参照(..)を含むシンボリックリンクの追跡を、アーカイブ内で実際にそのようなシンボリックリンクに遭遇した場合のみに限定し、オーバーヘッドを削減します。あわせて、既存のシンボリックリンクを辿らなくなっていたリグレッションを修正します。

#135734 Make TryGetSymbol cross-os

@rcj1・GitHub・area-Diagnostics-coreclr

TryGetSymbol が、ホストのアーキテクチャ・OSに依存せず、すべてのアーキテクチャ/OS向けのモジュールに対して動作するようにするための変更です。作成者の説明によれば、これがこのPRの目的です。

主な変更は dbgutil 配下に集中しており、ELF/Mach-O のシンボル解決処理(elfreader、machoreader)の見直しと、新規ファイル symbol.cpp の追加が含まれます。

#135700 Fix TlsSession's ClientHello peek failure message

@caraioniurie47・GitHub・area-System.Net.Securitycommunity-contribution

Linux上でサーバー側の TlsSocketSession がソケットから ClientHello を読み取れなかった場合(クライアントが完全なTLSレコード到着前に切断/リセットした場合、またはレコードヘッダが読み取りバッファより大きいサイズを示した場合)に出る例外メッセージを修正します。

従来は SR.Format を通さず IOException(SR.net_ssl_read_bio_failed_error) を投げていたため、メッセージが SSL Read BIO failed with OpenSSL error - {0}. とプレースホルダーのまま表示されていました。また、CryptoNative_BioPeekTlsFrame は入口でOpenSSLのエラーキューをクリアし、-1 を返す経路でもエラーをプッシュしないため、フォーマットしても名前を示せるOpenSSLエラーが存在しません。そのためプレースホルダーを持たない新しいリソース文字列 net_ssl_read_client_hello_failed("The TLS ClientHello could not be read from the socket.")を使い、同じ IOException を投げるように変更しました。

#135626 Fix GNU sparse 1.0 maps spanning multiple TAR records

@rzikm・GitHub・area-System.Formats.Tar

GNU sparse 1.0 形式のPAXエントリで、埋め込まれたスパースマップが約1 KiBを超えると、有効なデータにもかかわらず InvalidDataException がスローされる問題の修正です。リフィル(再読み込み)時の容量チェックが、次回のコンパクション時に破棄される「消費済みバイト」まで含めて計算していたことが原因です。修正後は未読バイトのみで容量を計算します。固定1 KiBバッファ、1,000,000セグメントの割り当て上限、数値行の境界チェック、レコード境界に揃ったパックデータの位置決めは維持されます。

#135449 Zero-initialize the return-value range in the Leave2 slow path

@pcshrosbree・GitHub・area-Diagnostics-coreclrcommunity-contribution

プロファイラAPIの ProfileLeave における Leave2 スローパスで、COR_PRF_FUNCTION_ARGUMENT_RANGE argumentRange が未初期化のまま ProfilingGetFunctionLeave3Info に渡され、そのポインタがプロファイラの FunctionLeave2 フックに渡されていました。この変更でゼロ初期化し、フックには空のレンジが渡されるようにします。

問題の経緯(PR記述より):

  • スローパスは COR_PRF_ENABLE_FRAME_INFO、COR_PRF_ENABLE_STACK_SNAPSHOT、COR_PRF_ENABLE_FUNCTION_RETVAL のいずれかで有効になる
  • しかしクエリがレンジを書き込むのは COR_PRF_ENABLE_FUNCTION_RETVAL が設定されている場合のみ
  • イテレータの割り当てに失敗した場合は、何も書き込まずに E_UNEXPECTED を返す
  • これらのケースでは、フックにスタック上の不定値が渡されていた

#135219 Filter leading GC polling frames from EventPipe stacks.

@lateralusX・GitHub・area-VM-coreclr

EventPipeのスタックウォークにおいて、スタック先頭に現れるGCポーリング用フレーム(PollGC / PollGCWorker)を除外する変更です。非インライン化された PollGCWorker ヘルパーをバインダから参照可能にし、マネージドコード実行前にバインドしておくことで、サスペンド中にメソッドをロードすることなくスタックウォーク側がポーリングヘルパーを認識できるようにします。除外対象は先頭の PollGC と PollGCWorker フレームのみで、呼び出し元フレーム、サンプル、分類は維持されます。

#135167 Enable Unix domain sockets on iOS and tvOS

@shatanov・GitHub・area-System.Net.Socketsos-tvoscommunity-contribution

iOS/tvOSでUnixDomainSocketEndPointがPlatformNotSupportedExceptionをスローしていた問題を修正し、Unixドメインソケットを有効化します。SocketProtocolSupportPalがiOS/tvOSでAF_UNIXを無条件に未サポートとして扱っていた除外を削除し、既存のネイティブプローブを使用するようにしました。WASIの明示的な除外は維持されます。

#134987 Check the RESOLVE_UPDATE_METADATA_1 result hr in CordbModule::RefreshMetaData

@pcshrosbree・GitHub・area-Diagnostics-coreclrcommunity-contribution

CordbModule::RefreshMetaData(デバッガ側 DBI)が、ランタイムからの DB_IPCE_RESOLVE_UPDATE_METADATA_1 応答に含まれる失敗 hr を無視していた問題の修正です。メタデータのシリアライズに失敗してもバッファ無しのまま処理が続行され、ランタイムの本来のエラーが E_INVALIDARG やアドレス0の読み取り失敗といった二次的な失敗に隠れていました。本PRでは、応答のバッファ関連フィールドを使用する前に応答の hr を確認し、失敗時はそのエラーを返すようにします。

#125304 Use ICollection<T> check instead of IList<T> in TryCopyTo

@prozolic・GitHub・area-System.Collectionscommunity-contribution

System.Collections.Immutable 内部の ImmutableExtensions.TryCopyTo において、型チェックを IList<T> から ICollection<T> に変更しました。これにより、IList<T> を実装せず ICollection<T> のみを実装するコレクション(例: Dictionary<K,V>.Keys / Values)でも ICollection<T>.CopyTo が呼び出されるようになり、要素ごとの列挙によるフォールバックを避けられます。

2026年10月18日 (10 PRs)うち Bot 1 件 この日のページ →

#136019 Report byref-like struct arguments to the GC in helper-based tail calls

@EgorBo・GitHub・area-VM-coreclr

ヘルパーベースの末尾呼び出し(tail call)で、Span<T> のような byref-like 構造体の引数が GC に報告されない問題を修正します。

TailCallHelp::GenerateGCDescriptor は GC シリーズを持たない値型をスキップしていましたが、Span<T> などの byref-like 構造体は GC シリーズを持たないものの内部ポインタ(interior pointer)を含みます。そのため、tail call の引数バッファに格納されている間は GC に報告されず、IL_STUB_StoreTailCallArgs と IL_STUB_CallTailCallTarget の間で GC が発生すると、呼び出し先が配列の旧位置を指す古いポインタを受け取る可能性がありました。

修正では、GC ディスクリプタ構築時に byref-like 構造体を GC ポインタを持つ構造体と同様に扱います。getClassGClayoutStatic はすでに byref フィールドを TYPE_GC_BYREF として報告するため、それを利用できます。

#136018 Fix malformed XML doc comments under src/coreclr/tools

@pcshrosbree・GitHub・area-ReadyToRuncommunity-contribution

src/coreclr/tools 配下の7ファイルにある、XMLドキュメントコメント9箇所の不正なXMLや無効な参照を修正するクリーンアップPRです(コメントのみの変更で、コード変更はありません)。これらのプロジェクトは GenerateDocumentationFile を有効にしていないため現在は無視されますが、有効化すると警告となり、警告をエラー扱いにしている場合はビルドが失敗します。作成者はドラフトの任意クリーンアップとしており、不要であればクローズしてよいとしています。

#136013 Use memory.copy for the memmove QCall on browser-wasm

@lewing・GitHub・arch-wasmarea-VM-coreclros-browser

browser-wasm 向け CoreCLR で、memmove の QCall を emscripten libc (musl) の memmove 直結から、__builtin_memmove を呼ぶ小さなラッパーに切り替える変更です。

  • 従来の emscripten libc (6.0.2) の memmove は、非オーバーラップ時は memcpy(n >= 512 で memory.copy)に転送しますが、オーバーラップ時は -mbulk-memory の有無にかかわらず常にスカラーループで処理していました。
  • SpanHelpers.Memmove はオーバーラップするバッファを memmove QCall に渡すため、CoreCLR wasm 上の Span<T>.CopyTo / Array.Copy のオーバーラップ時が Mono インタープリター(jiterpreter が memory.copy を出力)より大幅に遅くなっていました(Mono interpreter と CoreCLR composite R2R の比較で Span<Char>.CopyToOverlap(Size: 3000) が約20倍、Span<Byte>.CopyToOverlap(Size: 3000) が約13.6倍遅い)。
  • __builtin_memmove は -mbulk-memory 有効時に memory.copy へ lowering されます。
  • ブラウザ専用の変更で、wasi-sdk 34.0 は memmove に既に memory.copy のパスがあるため影響を受けません。

#135993 Managed ilasm: do not refer to native ilasm in comments

@pcshrosbree・GitHub・area-ILTools-coreclrcommunity-contribution

managed ilasm(src/tools/ilasm)のコメントから、ネイティブ ilasm への言及を取り除く変更です。#135932 のレビューで @jkotas が「コメントはネイティブ ilasm を参照せず、それ単体で理解できるようにすべき(互換性のために残している不自然な挙動を除く)」と指摘したことを受け、#135311、#135297、#135289 で追加したコメントに適用しています。 ネイティブ ilasm との比較で説明していたコメントは、コードが従うルールそのものを記述する形に書き換え、単なる補足(「As in native ilasm, ...」など)だった記述は削除しています。互換性維持のための挙動を説明していたコメントは対象に含まれていません。

#135974 Use geometric body buffer growth in HTTP loopback servers

@agocke・GitHub・area-System.Net.Http

HTTP/1.1のチャンク形式リクエストおよびHTTP/2のDATAフレームのボディ受信バッファを、チャンク/フレームごとに正確なサイズで再確保する方式から、容量を幾何級数的に拡大する方式へ変更しています。従来は固定サイズの断片を受信するたびに蓄積済みボディ全体をコピーしていたため、2次関数的なコピーコストが発生していました。この変更により、ループバックサーバーで大きなペイロードを扱う一部のテストが、作成者の環境で「数分から数秒」に短縮されたとのことです。

#135943 [NativeAOT] Hash relocations in method body folding keys

@andrew-kulikov・GitHub・community-contributionarea-NativeAOT-coreclr

NativeAOT (ILCompiler) のメソッド本体フォールディング(重複排除)において、MethodInternKey のハッシュにリロケーション(再配置情報)を含めるよう変更しました。従来はコードバイト・GC情報・フレーム情報・EHバイトのみをハッシュしていたため、リロケーション先だけが異なるメソッド本体が同一ハッシュ値となり、同じ HashSet バケットに集中して AreSame の比較が O(n²) になっていました。特に最適化済みコードでは、async メソッドごとに生成されるステートマシン構造体のため、AsyncStateMachineBox<TResult, TSM>.MoveNext や AsyncMethodBuilderCore.Start<TSM> などがバイト列同一のコピーとして大量に発生し、この問題が顕著になります。

2026年10月17日 (8 PRs) この日のページ →

#135992 Re-enable BFloat16 Int128/UInt128 conversion tests on WASI ReadyToRun

@lewing・GitHub・arch-wasmarea-System.Numerics

WASI ReadyToRun向けに無効化されていた BFloat16Tests.ExplicitConversion_FromInt128 と ExplicitConversion_FromUInt128 のテストを再有効化します。#134813で追加された ActiveIssue 属性を削除する変更です。

原因はBFloat16の変換バグではなく、Int128/UInt128 を含むauto layout構造体のアラインメント不一致でした。ランタイムは8バイト、crossgen2は16バイトでアラインしていたため、R2Rコードとランタイムでレイアウトが食い違い、Int128 の入力値が破損していました(例: (0, BFloat16.Zero) の行が i: 336347874021343232, expected: 0 となる)。この問題は #135481([wasm] Keep larger field alignment for Align8 auto-layout structs)で修正済みです。

#135975 Fix Android HTTP certificate validation tests

@MihaZupan・GitHub・area-System.Net.Http

Android上のHTTP証明書検証テストの失敗(dotnet/runtime#123572、#135618以降に報告)と、新しいOpenSSLバージョンでの残存失敗を修正するテスト専用の変更です。プロダクションコードの変更はありません。

主な原因と対応は次のとおりです。

  • Androidのトラストアンカー: Androidはトラストアンカーの有効期限を検査しないため、期限切れの自己署名サーバー証明書を信頼すると検証が成功してしまい、サーバーが応答せずに閉じてクライアントの再試行と100秒タイムアウトが発生していました。期限切れ/ホスト名不一致のリーフ証明書は、別の有効なCAから発行する方式に変更されました。
  • Androidのチェーン構築: 空のカスタムトラストストアは未サポートのため、自己署名で未信頼のケースでは空でない無関係なトラストストアを使用します。期限切れ/未信頼の証明書を経由するパスをAndroidが構築できない場合は PartialChain を期待します。
  • OpenSSLのBasic Constraints: 自己署名サーバー証明書が KeyCertSign なしのCAとしてマークされていたため、厳格なOpenSSLでは期待値の UntrustedRoot ではなく UntrustedRoot | InvalidBasicConstraints が報告されていました。サーバー証明書は常にエンドエンティティとなり、CA用ヘルパーはCA制約と署名用途を保持します。
  • 失敗の決定性: 証明書検証が想定外に成功した場合にも応答を返すため、アイドル状態のリスナーに対するタイムアウトではなく、アサーションが直接失敗します。

ポリシーエラーの厳密なアサーションは維持されています。

#135951 Fix NativeAOT test layout's CoreCLR runtime dependency

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOTテストレイアウト(Core_Root)生成が、意図せずCoreCLRランタイムのファイルに依存していた問題を修正します。これまでNativeAOT WASIのテストビルドでは、NativeAOT SDKとコンパイラが利用可能でも、Core_Root生成時に「The 'coreclr' subset must be built before building this project」というエラーで失敗していました。

原因は、デスクトップ向けNativeAOTビルドでは sharedFramework にターゲットJITが配置されるため、このチェックを偶然満たしていた点です。WASMのクロスJITは別の場所にあるため、この条件を満たせませんでした。

#135947 [QUIC] Disable the test on JitStress

@ManickaP・GitHub・area-System.Net.Quic

System.Net.Quic の機能テストを JitStress 環境で無効化する変更です。JitStress では、オブジェクトのルート解除・解放を確認するテストにおいて、20回のイテレーションでは GC によるクリーンアップが間に合わないことがあり、不安定になっていました(dotnet/runtime#134828 の修正)。

作成者によると、ActiveIssue を付けて Issue を開いたままにする案もありましたが、他のシナリオではテストが成功しオブジェクトが正しく解放されることが確認できているため、テスト無効化により Issue をクローズする方針を選んだとのことです。

#135898 Fix Unix mutex directory validation and default-scope test expectations

@Copilot・GitHub・area-System.IO

Unixにおける名前付きMutex(共有メモリ)のディレクトリ検証を緩和し、named-mutexのスコープ変更後もテストの期待値が旧仕様(グローバルスコープ)のまま残っていた不整合を修正するPRです。既存の共有メモリ用ディレクトリのうち、実際には利用可能なものが所有者・権限チェックで拒否されてしまう問題に対応しています。内部実装(System.Private.CoreLibのUnix共有メモリ管理)とテストの変更で、公開APIの変更はありません。

#135897 [browser][coreclr] Stage composite R2R image for library tests

@lewing・GitHub・arch-wasmarea-Infrastructure-librariesos-browser

Browser CoreCLR のライブラリテストで PublishReadyToRunComposite=true を指定すると、起動時に Assembly not found: 'System.Memory.Tests.r2r.wasm' で失敗する問題の修正です。

原因は、ライブラリテストが入れ子の publish 内で crossgen を実行する一方、実際には build 出力(bin/)を配信している点にあります。build 時の webcil ステージングは obj/R2R を読むためコンポーネントスタブは配置されます。しかし、コンポジットのオーナー(<entry>.r2r.wasm)はアセンブリではなく、WebAssembly SDK では ProcessPublishFilesForWasm 内で publish 用の静的 Web アセットとしてのみ定義されます。この処理がここでは実行されないため、オーナーが wwwroot/_framework にコピーされず、build 用のブート設定にも列挙されていませんでした。

修正は、入れ子の publish がコンポジットイメージを出力として返し、外側の build が静的 Web アセットとして定義する方式です(WasmNativeAsset や WasmAssembliesFinal が外側へ戻る流れと同様)。

#135890 Fix double GC relocation of overlapping byrefs

@jkoritzinsky・GitHub・area-VM-coreclr

明示的レイアウト(StructLayout(LayoutKind.Explicit))の byref-like 値型(ref struct)をGCがスキャンする際、フィールドが重なっていると同じ byref スロットが複数回報告され、コンパクションGCが既に再配置済みの内部ポインタを再度再配置してしまう問題の修正です。各物理 byref スロットを一度だけ報告するようにします。デバッガー固有の問題ではなく、通常の値渡しの ref struct 引数でも Windows x86 + DOTNET_GCStress=1 で破損が再現するとされています(#133659 のレビューで依頼されたスタンドアロンの GC 修正)。

#135881 Change more IndexOf == -1 checks into Contains

@MihaZupan・GitHub・area-Meta

IndexOf(...) == -1(および < 0 など)形式の判定を Contains(...) 呼び出しへ置き換えるリファクタリングです。既存の同種変更の続きとして、ライブラリ全体の該当箇所を追加で変換しています。提供された情報からは、公開APIの変更や動作変更の記載は確認できません。

// 変更イメージ(一般的なパターン)
// 変更前
if (span.IndexOf(value) == -1) { ... }
// 変更後
if (!span.Contains(value)) { ... }

2026年10月16日 (33 PRs) この日のページ →

#135976 Fix R2RDump path casing in HalfEstimateR2R test

@jtschuster・GitHub・area-ReadyToRun

HalfEstimateR2R.GetDisassembly が参照する R2RDump のパスを、小文字の r2rdump/r2rdump.dll から R2RDump/R2RDump.dll に修正するテスト専用の1行変更です。Core_Root のレイアウトおよび既存の Unix 向け Crossgen2 テストハーネスと表記を一致させています。小文字のパスは大文字小文字を区別しない Windows ファイルシステムでは動作しますが、Linux では ReadyToRun の逆アセンブリを検査する前に失敗します(Linux x64 Checked で The application to execute does not exist: '.../r2rdump/r2rdump.dll' が報告されていました)。

#135957 Avoid tagged shared dynamic-interface vtable entries on WASM

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOT の WASM ターゲットで、sealed vtable に「タグ付きの shared な IDynamicInterfaceCastable メソッドポインタ」を出力しないようにする修正です。

instantiating thunk のフラグは関数ポインタ relocation の addend として符号化されています。WASM の関数ポインタはテーブルインデックスであり、オブジェクトライタは 0 以外の関数 addend を funclet の序数として解釈します。その結果、存在しない funclet への参照となり、コンパイルがクラッシュしていました。

WASM では shared な dynamic-interface 実装のエントリを null にし、未サポートであることを示す TODO を残しています。これはコンパイル時の bringup 用の修正であり、shared な dynamic-interface ディスパッチのランタイムサポートではありません。サポートにはジェネリックコンテキストを渡す、シグネチャ的に正しい方法が必要で、ポインタのエンコーディング変更だけでは不十分とされています。

#135953 Provide NativeAOT WASM interface dispatch resolver

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOT の WASM 向けに、固定シグネチャの RhpDispatchResolve エクスポートを提供する変更です。ジェネリック仮想メソッド(GVM)のヘルパーパスはこのリゾルバーを参照しますが、WASM には対応するネイティブアセンブリ実装がありませんでした。そこで WASM 専用のマネージド実装をエクスポートし、既存の RhpResolveInterfaceMethod のキャッシュ/ワーカーパスへ委譲します。

  • レシーバーが null の場合は明示的に例外をスローし、ディスパッチヘルパーの従来の挙動を維持します。下位のリゾルバーは他のコンテキストでは意図的に null に対して 0 を返すため、この挙動はそちらでは提供できないとされています。
  • このヘルパーはターゲットポインターを解決して返すだけで、任意シグネチャの転送トランポリンではありません。新しい呼び出し規約は導入されていません。

#135950 Exclude unsupported NativeAOT WASM native-library tests

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOT WASM(WASI/browser)で現状サポートされていない4つのテスト構成を、CLRTestTargetUnsupported でマークして除外するPRです。除外条件は TargetsWasm に基づいており、デスクトップ向けのテストカバレッジには影響しません。

除外の理由(PR説明より):

  • AggregateLibrary、CustomMainWithStubExe、SharedLibrary: 共有ライブラリのサポートが必要だが、NativeAOT WASMは現状これを提供していない
  • CustomMain: ネイティブアーカイブが必要だが、既存のWASMネイティブテスト用CMakeトラバーサルでビルドされない

#135948 Align NativeAOT Vector<T> to 16 bytes on WASM

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOTのSystem.Numerics.Vector<T>に、WASMのv128 ABIが要求する16バイトアラインメントを与える修正です。

メタデータ上のレイアウトはulongフィールド2つで構成されるためアラインメントが8になります。NativeAOTはターゲットに合わせてベクターのサイズは調整していましたが、アラインメントはメタデータ由来の値のままでした。その結果、共有されているWASM ABIのロワリング処理で「16バイトのベクターは16バイトアラインでなければならない」というアサーションが失敗していました。

本PRではWASMの場合に限りフィールドのアラインメントを上書きします。ABIのアサーションは維持され、他のアーキテクチャのレイアウトには影響しません。これは、crossgen2/VM側で先に行われた補正(dotnet/runtime#131328)がNativeAOT独自のレイアウトアルゴリズムには反映されていなかったことへの対応です。

#135946 JIT: Don't assert when printing open generic method names in disasm

@EgorBo・GitHub・area-CodeGen-coreclr

Checked JITが、オープンジェネリックメソッド(例: ジェネリックメソッド定義の ldtoken)のdisasmコメントを出力する際にassertで失敗する問題の修正です。このメソッドのシグネチャには CORINFO_TYPE_UNDEF 型が含まれるため、assertが発生していました。この問題により、FSharp.Core.dll に対する jit-diff --pmi が失敗していました。

eePrintMethod と eeGetMethodFullName が CORINFO_TYPE_UNDEF を許容し、<UNDEF> として出力するようになりました。

#135934 Validate ZstandardStream constructor arguments and prevent ArrayPool buffer leak on failure

@austinaviv・GitHub・area-System.IO.Compressioncommunity-contribution

ZstandardStream のコンストラクタにおける引数検証の不備と、失敗時に ArrayPool から借りた内部バッファが返却されない(リークする)問題を修正するPRです。

  • ZstandardCompressionOptions に null を渡した場合に ArgumentNullException を送出するようにしました。
  • 不正な CompressionLevel 列挙値は、バッファを借りる前に ArgumentOutOfRangeException を送出するようにしました。
  • ネイティブのエンコーダー/デコーダーのコンテキスト確保・設定が失敗した場合に、内部バッファ(_buffer)を破棄するようにしました。

#135931 [manual] Merge release/8.0-staging into release/8.0 to unblock MSRC internal-to-public builds

@ViveliDuCh・GitHub・NO-SQUASHServicing-approvedarea-System.Net.Quic

release/8.0-staging を release/8.0 にマージし、MSRC の internal-to-public ビルドが失敗している問題を解消するための手動マージ PR です。現在の release/8.0 に対する internal-to-public マージでは、複数の Windows ビルドレッグで同じ警告(エラー扱い)が発生して失敗しています。

  • 原因: System.Net.Quic が依存する Microsoft.Native.Quic.MsQuic.Schannel (>= 2.5.11-ci.159417053) が見つからず、NU1603(Warning As Error)となる
  • 2.5.11-ci.159417053 は MSRC の調整済みサービシング作業で内部的に使われるプライベート MsQuic パッケージであり、パブリックビルドでは意図的に利用できない
  • 対応する公開サービシングパッケージ 2.5.12 が利用可能になったため、#135883 で release/8.0-staging を同バージョンに更新済み。本 PR はその変更を release/8.0 に反映する

#135917 Add the missing SwitchTests.ilproj to ILVerification.Tests

@pcshrosbree・GitHub・area-Tools-ILVerificationcommunity-contribution

ILVerification.Tests は ILTests\*.ilproj を使ってILテストケースをアセンブルしますが、ILTests/SwitchTests.il だけ対応する .ilproj が存在せず、10個のswitchテストメソッドがアセンブルも実行もされていませんでした。本PRは欠落していた SwitchTests.ilproj を追加し、これらのテストが実行されるようにします。テスト基盤のみの変更で、ランタイム/ライブラリの実装や公開APIへの影響はありません。

#135909 Split NativeAOT thread startup by multithreading support

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOTのスレッド起動処理を、マルチスレッドサポートの有無で分割するPRです。CoreCLRのmultithreading/single-threadingのpartialパターンに倣い、マルチスレッドが無効な場合はスレッド生成用ヘルパーとブートストラップのスレッドエントリスロットを除外し、シングルスレッド用のThreadプリミティブを提供します。

#135908 Keep hostpolicy context alive for the lifetime of the process after coreclr has been loaded

@elinor-fung・GitHub・area-Host

hostpolicy コンテキストの寿命を変更するPRです。ホスト・ランタイム間のコントラクトで提供されるコールバックや値はプロセスの生存期間中ずっと有効であるべきため、CoreCLR のロード後は、hostpolicy コンテキストをプロセス終了まで保持するようになります。CoreCLR のロード前に解放されるコンテキストは、従来どおり削除されます。

#135907 [manual] Merge release/9.0-staging into release/9.0 to unblock MSRC internal-to-public builds

@ViveliDuCh・GitHub・NO-SQUASHServicing-approvedarea-System.Net.Quic

release/9.0 への internal-to-public マージが、Windows の複数のビルドレッグで NU1603(警告のエラー扱い)により失敗している問題の解消が目的です。原因は、MSRC の協調サービシング中に内部でのみ使われる非公開の MsQuic パッケージ 2.5.11-ci.159417053 を参照していることで、公開ビルドからは入手できません。release/9.0-staging では対応する公開サービシングパッケージ 2.5.12 が利用可能になっており(#135884)、これを release/9.0 に取り込むためのマージです。作成者によると、System.Net.Quic を対象にした restore はローカルで NU1603 なしに通っています。この変更が release/9.0 に入り、internal-to-public マージが更新されれば、公開 CI で依存関係を通常どおり restore できる見込みです。

#135899 Keep negative cast results in R2R when they can't change across versions

@lewing・GitHub・arch-wasmarea-ReadyToRunos-iosos-tvosos-maccatalystos-wasios-browser

crossgen2 の compareTypesForCast(CorInfoImpl.cs)は、R2R では「後の版で依存アセンブリが更新されるとキャストが成功しうる」ため、MustNot を常に May として JIT に返していました。その結果、box T; isinst X のパターンが定数畳み込みされず、R2R コードの否定的キャストではボックス割り当てとキャストヘルパー呼び出しが残っていました(例: MemoryExtensions.IndexOfAnyInRange<char> で 48 B/呼び出しの割り当て)。

本 PR では、バージョン間で結果が変わりえない場合に限り MustNot を維持します(COM 型等価を使わない型が対象)。判定は CorInfoImpl.ReadyToRun.cs の IsNegativeCastResultVersionResilient に実装されています。

  • 値型ルール: fromType が値型で、toType がインターフェースでも System.Enum でもない場合
  • バージョンバブルルール: toType、fromType の基底型チェーンの全型、および fromType が実装する全インターフェースがバージョンバブル内にある場合(配列、バリアンスを持つジェネリックインターフェース/デリゲート、COM クラスは除外)

#135883 [release/8.0-staging] Update MsQuic to 2.5.12

@ViveliDuCh・GitHub・Servicing-approvedarea-Infrastructure-libraries

release/8.0-staging ブランチで使用する MsQuic を、非公開の 2.5.11-ci.159417053 から公開パッケージの 2.5.12 に更新します。非公開の MSRC 向けパッケージを参照したままだと、公開 CI で restore が NU1603 で失敗してビルドが通らなくなる問題への対応です。マネージドコードの変更はなく、パッチバージョンの依存関係更新(1行)のみです。

#135877 Fix missing ILVerify messages for LdftnCtor and TailStackEmpty

@pcshrosbree・GitHub・area-Tools-ILVerificationcommunity-contribution

ILVerify が LdftnCtor と TailStackEmpty のエラーメッセージを表示できず、エラー名がそのままメッセージとして出力される問題を修正します。

Verifier は IL インポーターが報告するエラーのメッセージを、エラー名をキーに Strings.resx から検索します。エントリが存在しない、または空の場合はエラー名がそのまま使われます。LdftnCtor のエントリは LdftnConstructor という名前だったため一致せず、TailStackEmpty にはエントリ自体がありませんでした。

修正前後の CLI 出力(PR 作成者の報告より):

# 修正前
[IL]: Error [LdftnCtor]: ... LdftnCtor
[IL]: Error [TailStackEmpty]: ... TailStackEmpty

# 修正後
[IL]: Error [LdftnCtor]: ... ldftn/ldvirtftn not allowed on .ctor.
[IL]: Error [TailStackEmpty]: ... Stack not empty after tail call.

#135869 Add CompExactlyDependsOn to some methods so that they are compiled on wasm

@BrzVlad・GitHub・arch-wasmarea-ReadyToRun

CompExactlyDependsOn 属性を一部のメソッドに追加し、WebAssembly (wasm) 向けにコンパイルされるようにする変更です。複数の CompExactlyDependsOn が付いたメソッドは、指定された命令セットのうち少なくとも1つがサポートされている場合にのみコンパイルされます(すべてのISAが実行時に決定的にサポート/非サポートであることも前提)。対象メソッドはすでに PackedSimd に依存する他のメソッドの文脈で使われているため、不足していた属性を追加するだけでコンパイルが有効になります。

#135865 [QUIC] Disable QUIC test on OSX with mono runtime

@ManickaP・GitHub・area-System.Net.Quic

OSX 上の mono runtime(MiniJIT)で発生する QUIC テストのタイムアウト対策として、該当テストを mono 環境で無効化する変更です。mono MiniJIT 専用のプラットフォーム検出が存在しないため、絞り込まず mono 全般でスキップする方針が取られています(絞り込むには yaml から msbuild 経由でテストプロセスへ環境変数を渡す必要があり、過剰と判断されています)。#133373 に関連します。

#135861 [QUIC] Remove timeout

@ManickaP・GitHub・area-System.Net.Quic

QUICのテストにおける不安定さの修正です。WaitAsync に設定されていた3秒のタイムアウトが、キャンセル処理が完了する前に切れてしまうことがありました。その場合、クライアントストリームが破棄(graceful close)され、abortではなく例外が発生しない結果になっていました。このタイムアウトを削除しています。

なお、テスト自体は RunClientServer によるタイムアウトを既に持っているため、個別のタイムアウトがなくてもテストのハングは防止されます。

#135857 Swallow ObjectDisposedException when restoring blocking mode after connect async

@rzikm・GitHub・area-System.Net.Sockets

ConnectAsync 完了後にソケットのブロッキングモードを元に戻す処理で、並行して Dispose が呼ばれると、すでに破棄された SafeHandle を使用して ObjectDisposedException が発生しうる問題を修正します。ブロッキングモードの復元はベストエフォートの最適化にすぎないため、並行 Dispose に起因する ObjectDisposedException は握りつぶす(無視する)ようにしています。

#135851 JIT: Propagate rejectNegativeConst through lcl + cns in monotonicity check

@EgorBo・GitHub・area-CodeGen-coreclr

JITのレンジチェック最適化における「単調増加(monotonically increasing)判定」のバグ修正です。lcl + lcl の判定では両オペランドの初期値(seed)が非負であること(rejectNegativeConst)を要求しますが、オペランド自体が lcl + cns の場合、再帰呼び出しで rejectNegativeConst = false が渡されていました。その結果、i += k; k = m + 2 のようなパターンで m の負のseed(-4)が許容され、i が単調増加と誤判定されて i < -2 が false に畳み込まれていました。

修正として、lcl + cns のケースでも呼び出し元の rejectNegativeConst をそのまま引き継ぐようにしました。

#135850 JIT: Treat stores to EH-live locals as visible when hoisting

@EgorBo・GitHub・area-CodeGen-coreclr

JITのループ不変コード移動(hoisting)において、例外ハンドラ内で参照されるローカル変数へのストアが「外部から可視」と扱われていなかったため、後続のthrowしうる式(a / b)がプリヘッダへ誤ってhoistされ、catchハンドラが古い値を観測してしまう問題を修正します。

HoistVisitor はローカルがアドレス公開(address-exposed)されている場合のみストアをグローバルに可視と見なしていたため、state = i + 1 の後も m_canHoistSideEffects が true のままでした。本修正では、ブロックがハンドラへ例外をスローしうる場合に、ハンドラへlive-in/outなローカル、または untracked なローカルへのストアも可視として扱います。

#135798 ILVerify error cleanup

@jkotas・GitHub・area-Tools-ILVerification

ILVerifyのエラー整理に関するPRです。unaligned. プレフィックスのアライメントオペランドが現状では検証されていなかったため、そのチェックを追加し、回帰テストを加えています。あわせて、既存の検証器が別のエラーコードでカバー済みの旧診断コメントアウト項目を削除しています。Closes #37393。

#135789 Wait for the OOB byte in IOControl_SIOCATMARK_Unix_Success

@caraioniurie47・GitHub・area-System.Netcommunity-contribution

IOControl_SIOCATMARK_Unix_Success テストの不安定さ(flaky)を修正するテスト専用の変更です。Unix では SIOCATMARK はデータ到着前から 0 であるため、既存のスピン待機が即座に終了してしまいます。その状態でクライアントが帯域内(in-band)バイトを先に読むと、帯域外(OOB)バイトがまだ届いておらずマークが存在しません。結果として SIOCATMARK == 1 を期待するアサートが 0 で失敗していました(OSSupport.cs:151)。

修正として、2 回の送信の後に Socket.Select(クライアントを error リストに指定、タイムアウト 10 秒)で OOB バイトの到着を待機し、クライアントがリストに残っていることをアサートします。既存のアサートはすべて維持されています。

#135724 JIT: Keep volatile loads when folding full-range relational comparisons

@EgorBo・GitHub・area-CodeGen-coreclr

JITのfgOptimizeRelationalComparisonWithFullRangeConstが、volatileByte >= 0のようなフルレンジ比較を定数に置き換える際、副作用チェックにGTF_SIDE_EFFECTのみを使っていたため、非フォールトのvolatileロード(GTF_ORDER_SIDEEFFのみ保持)が捨てられ、acquireセマンティクスが失われる問題を修正します。その結果、後続のロードがスピンループの外へホイストされる可能性がありました。判定をGTF_OBS_EFFECTに変更することで、volatileロードが保持されるようになります。

#135650 Fix concurrent CCW vtable and IID publication

@Copilot・GitHub・area-Interop-coreclr

CCW(COM Callable Wrapper)の vtable とディスクリプタの初期化・公開が並行クエリ間で競合し、準備完了フラグが初期化完了前に観測される問題を修正するPRです。また、レイアウトフラグや遅延IIDフラグの競合更新でビットが失われ、使用中の vtable が再構築されうる問題も修正します。

#135519 cDAC: skip empty assembly-list slots in Loader_1.GetModuleHandles

@pcshrosbree・GitHub・community-contributionarea-Diagnostics-cdac

cDAC の Loader_1.GetModuleHandles が、collectible アセンブリのアンロード後に AppDomain のアセンブリリスト内に残る空スロット(NULL)を読み込んで例外を投げる問題を修正します(Fixes #135518)。AppDomain::RemoveAssembly はアンロード時にスロットを NULL にしますが、ネイティブの AppDomain::AssemblyIterator::Next_Unlocked はこれをスキップします。Loader_1 も同様に null エントリをスキップするようにし、残りのモジュールを返せるようにしました。

#135471 [cDAC] Handle GettingReJITParameters state

@pcshrosbree・GitHub・community-contributionarea-Diagnostics-cdac

ReJIT のパラメータ設定中に IL コードバージョンが取る状態 RejitFlags::kStateGettingReJITParameters (1)(例: プロファイラの GetReJITParameters コールバック実行中)を、cDAC の ReJIT コントラクトが扱えず InvalidOperationException を投げていた問題を修正します。ダンプ取得やライブアタッチがこの状態のメソッドを捕捉すると、SOS/DBI のクエリが失敗していました。

修正後は、Requested/Active 以外の未知の状態値(状態 1 を含む)を新設の RejitState.Unknown にマップし、例外を投げずにレガシー DAC と同様の挙動にします。

#135413 [browser][wasi] Allow uncontended synchronous waits and un-gate Roslyn workspace tests

@lewing・GitHub・arch-wasmarea-System.Threadingos-wasios-browser

マルチスレッド非対応ランタイム(Browser/WASI)で、#123329 により一律に PlatformNotSupportedException(PNSE)になっていた同期待機を見直し、「待機が即座に完了できる場合」は正常に完了させるようにする変更です(#135335 の3コミットを Pavel 氏の authorship のまま含み、さらに Roslyn ワークスペース系テストのゲートを解除)。実際にブロックする場合のみ PNSE を投げるため、#123329 のイベントループのデッドロック防止は維持されます。代表的な影響先は Workspace.SetCurrentSolution 内の競合のない SemaphoreSlim.Wait です。

  • セマフォのカウント/タスク完了/イベントのセット状態がすでに利用可能な場合は待機が成功する
  • タイムアウト0の待機で条件未成立の場合は、PNSE ではなく通常の結果(false など)を返す
  • SemaphoreSlim、ManualResetEventSlim、Task、Monitor に一貫して適用
  • Thread.Sleep と WaitHandle の挙動は変更なし
  • マルチスレッド対象では、元の Task 待機のセットアップと継続パスを維持
  • API は Browser 向けの unsupported 注釈を維持(ブロックするかどうかは実行時状態に依存するため)

#135311 Managed ilasm: honour explicit local slots, scope local names lexically, and emit LocalScope/LocalVariable rows

@pcshrosbree・GitHub・area-ILTools-coreclrcommunity-contribution

マネージド版ilasm(src/tools/ilasm)をネイティブilasmの代替とするための一環として、ローカル変数の扱いにある3つの欠陥を修正するPRです。これにより、PortablePdbテスト(src/tests/ilasm/PortablePdb)のTestPortablePdbLocalScope4ケースが通るようになります(修正前は10ケース中6ケースのみ成功、修正後は全ケース成功)。

  1. LocalScope/LocalVariableの行が未出力だった問題: PDB要求時、名前付きローカルを宣言する字句スコープごとに、{から}のオフセット範囲でLocalScope行を出力し、各名前付きローカルにLocalVariable行(Index=スロット、属性0)を出力します。メソッド本体全体、.try/catch/filter/finally/faultの各本体もスコープとして扱われます。行は開始オフセット順、同一開始なら長い範囲が先にソートされます。
  2. 明示スロットが無視されていた問題: .locals init ([3] int32 x)の[n]がスロットnとして扱われ(テーブルはパディング)、[n]なしのローカルは最大スロットの次を使用します。スコープを閉じて解放されたスロットは同じ型で再宣言可能です。ネイティブ同様の診断("Local var slot n is in use"警告、"type conflict"/"Undefined type of local var slot"エラー)を出力します。.locals内の...センチネルはスロットを消費しなくなりました。
  3. ネストしたブロックで名前がスコープされない問題: ブロックごとに名前スコープを持ち、最内側から検索します。同スコープ内では最初の宣言が優先され、名前は大文字小文字を区別します。

#135276 Fix suspend of CLR initialization thread when started from dispatch queue on apple

@BrzVlad・GitHub・area-VM-coreclr

Apple プラットフォームで、dispatch_async 経由で起動されたスレッド上から CoreCLR を初期化した場合、GC サスペンドに使うシグナル(INJECT_ACTIVATION_SIGNAL)がマスクされたままになり、そのスレッドが GC で停止せずアプリがハングし得る問題を修正します。

従来、外部スレッドをランタイムにアタッチする AllocatePalThread 経路ではシグナルのマスク解除が行われていましたが、CoreCLR 初期化スレッド自体には行われていませんでした。本 PR でこの初期スレッドにも同様のマスク解除を行います。作成者によれば、macios は CoreCLR をこのようなワーカースレッドから初期化しないため、モバイルのテストランナーなど主にテスト用途向けの修正です。

#134978 [wasi] Enable EventPipe (FEATURE_PERFTRACING) for CoreCLR WASI

@lewing・GitHub・arch-wasmarea-Tracing-coreclros-wasi

CoreCLR の WASI ビルドで EventPipe(FEATURE_PERFTRACING)を有効化する PR です。従来は無効だったため、EventPipe 経由の機能が動作せず、特に EventSource.CurrentThreadActivityId が常に Guid.Empty を返していました。browser CoreCLR と同様に、スレッドレス EventPipe(FEATURE_PERFTRACING_DISABLE_THREADS)を使って有効化します。

#134082 Handle parameterized ILTrim interop types

@jtschuster・GitHub・linkable-frameworkarea-Tools-ILLink

ILTrimにおいて、PInvokeメソッドのシグネチャに含まれるパラメータ化された型(配列・ポインター・byref など)を再帰的に要素型へ正規化してから、フィールドおよびアロケーションの保持処理を適用するようにする変更です。これにより、パラメータ化型を経由して渡されるinterop型のフィールドが正しく保持されることを狙っています。

2026年10月15日 (35 PRs) この日のページ →

#135885 Fix PEM parsing resumption for empty labels

@vcsjones・GitHub・area-System.Security

PEMパース処理において、ラベルが空(-----BEGIN -----)の場合に、パース再開位置が進みすぎて有効なPEMを検出できなくなる問題を修正するPRです。#133137 で導入された「失敗が確定している内容の再パースを避ける」ための再開位置の最適化が、空ラベルという限定的なケースで先に進みすぎていました。

例えば次のようなPEMで問題が発生していました。

-----BEGIN -----BEGIN TEST-----\nZm9v\n-----END TEST-----
  • 最初に -----BEGIN -----(空ラベルの有効なPreEB)が見つかるが、直後の BEGIN TEST----- が不正なBase64として扱われる。
  • 修正前は BEGIN TEST-----\n... からパースを再開していたため一致せず、有効なPEMを見逃していた。
  • 2つのPreEBは境界を共有しているため、空ラベルが最初に見つかった位置から再開する必要がある。
  • 同様の修正が終端(EndEB)の探索側にも適用されています。

#135884 [release/9.0-staging] Update MsQuic to 2.5.12

@ViveliDuCh・GitHub・Servicing-approvedarea-Infrastructure-libraries

release/9.0-staging ブランチで使用する MsQuic パッケージを、非公開の 2.5.11-ci.159417053 から公開パッケージの 2.5.12 に更新します。非公開(private)から公開(public)へのセキュリティ修正のハンドオフを完了させる目的で、internal-to-public マージ後も非公開バージョンの識別子が残らないようにします。これにより、公開 CI が非公開パッケージを復元できずに NU1603 で restore が失敗する問題を解消します。

#135878 Fix helperildll build race in Crossgen2 determinism test

@Copilot・GitHub・area-Infrastructure

Crossgen2 determinismテストで発生していた helperildll.dll のビルド競合を修正するPRです。従来は crossgen2smoke をグローバルな OutputPath 上書き付きの独自MSBuild呼び出しで再ビルドしており、別々のMSBuildインスタンスが中間ファイルを共有していました。その結果、helperildll.dll への同時書き込みが発生し、参照側が不完全なメタデータを読み込む可能性がありました。カスタムのMSBuild呼び出しを標準の ProjectReference に置き換え、ビルドを共有するようにしています。

#135875 Exclude mobile targets from Helix dump-doc generation

@steveisok・GitHub・area-Infrastructure-libraries

モバイルターゲット(TargetsMobile が true)の場合、Helixの gen-debug-dump-docs.py ポストコマンドをスキップするよう変更するPRです。このスクリプトはデスクトップ用のtesthostレイアウトを前提としたホスト側ダンプのデバッグ手順を生成するもので、モバイルのクラッシュ診断には適用できません。モバイルジョブで実行すると、Windowsホストでは未展開のシェル変数エラー、Unixホストではスクリプト不在エラーが発生していました。

#135867 Fix HighNumberedFd_NotLeakedAfterLoweringRLimit on 32-bit musl

@pcshrosbree・GitHub・area-System.Diagnostics.Processcommunity-contribution

PR #135753 で追加されたテスト HighNumberedFd_NotLeakedAfterLoweringRLimit が、32-bit musl(Alpine.324.Arm32)で setrlimit が -1 を返して失敗する問題の修正です。

原因は、テストが独自に宣言した nuint 2フィールドの RLimit 構造体を libc の getrlimit/setrlimit に P/Invoke していた点です。この構造体は arm32 で 8 バイトですが、musl は全アーキテクチャで rlim_t を unsigned long long と定義しており、struct rlimit は 16 バイトになります。このため getrlimit が構造体の範囲外に書き込み、setrlimit は newLimit の後続 8 バイトからハードリミットを読んで失敗することがありました。glibc の arm32 では rlim_t が 32-bit のため一致していました。

修正は、System.IO.FileSystem 等のテストと同様に、System.Native の Interop.Sys.GetRLimit/SetRLimit を使う形に変更するものです。System.Native が2つの ulong の RLimit をプラットフォームの struct rlimit に変換します。

#135858 Fix ILVerify crash on a branch target outside the method

@pcshrosbree・GitHub・area-Tools-ILVerificationcommunity-contribution

ILVerify において、メソッドの IL 範囲外を指す分岐ターゲットがあると、記録された BadBranch 診断を返す代わりに IndexOutOfRangeException をスローして CLI がそのメソッドで停止する問題を修正します。ReportInvalidBranchTarget で BadBranch を報告した後にそのメソッドの検証を中断するようにしました。これは ReportInvalidExceptionRegion や ReportMethodEndInsideInstruction と同じ扱いです。

原因は、共有コードの FindJumpTargets が範囲外ターゲットに対して ReportInvalidBranchTarget を呼ぶものの、ILVerify 側の実装は BadBranch を記録して戻るだけで、その後の InitialPass / インポートパスがターゲットで _basicBlocks にインデックスアクセスしていたことです。

再現例:

.method public hidebysig static void BranchOutOfIlSpace() cil managed
{
    // IL_0000: br.s +0x10 (target IL_0012; the method is 3 bytes long)
    br.s 0x10
    ret
}

#135838 coreclr: PAL build fixes for OpenHarmony

@springmin・GitHub・area-PAL-coreclrcommunity-contribution

OpenHarmony (OHOS) 向けのcoreclr PALのビルド修正です。Androidと同様に、OHOSでは gcc_s、pthread、rt のリンクをスキップするようにしました。これらはOpenHarmonyツールチェーンがsysrootを通じて提供するためです。

作成者によるテスト方法は、openharmony-arm64 向けにCLRをクロスビルドし、coreclrpal がリンクできることの確認です。

#135835 JIT: preserve GTF_IND_INITCLASS when inlining BOX of Nullable<T>

@EgorBo・GitHub・area-CodeGen-coreclr

JITが Nullable<T> の BOX をインライン展開する際、GTF_IND_INITCLASS フラグが失われていたバグの修正です。impImportAndPushBoxForNullable は impGetNodeAddr から被ボックス値の間接参照フラグを取得(クラス初期化ヘルパーは別ステートメントに分離)していましたが、分解後の hasValue / value のロードにフラグを適用していませんでした。その結果、ループ不変コード移動(ループホイスティング)により、static な Nullable<T> フィールドのロードが静的コンストラクタのチェックより前に移動される可能性がありました。修正では、両方のロードにフラグを渡すようにしています。

#135834 JIT: spill pending side effects before signed Log2 expansion

@EgorBo・GitHub・area-CodeGen-coreclr

JITが符号付き整数の Log2(負数の場合に ArgumentOutOfRangeException をスローするフォールバックを持つQMARK展開)を行う際、IL評価スタックに残っている副作用を持つ式(呼び出しや先行オペランドの境界チェックなど)が、スローの後に評価されてしまう問題を修正します。展開結果を一時変数へ格納する際のスピル指定を CHECK_SPILL_NONE から CHECK_SPILL_ALL に変更し、保留中の副作用を先にスピルすることで評価順序を保証します。

#135833 JIT: sign-extend folded 32-bit RotateLeft/RotateRight constants

@EgorBo・GitHub・area-CodeGen-coreclr

JITの impRotateHelper が、定数に対する32ビットの RotateLeft/RotateRight を畳み込む際、結果を uint32_t のまま gtNewIconNode に渡していたため、64ビットホストでゼロ拡張されてしまう問題を修正します。TYP_INT 定数は符号拡張されている必要があり、31ビット目が立つ結果(例: int.RotateLeft(1, 31))が +2^31 として扱われ、その値との比較が誤って畳み込まれていました。結果を int32_t にキャストすることで修正しています。

#135829 Fix ILVerify crash when a method ends with a conditional branch or switch

@pcshrosbree・GitHub・area-Tools-ILVerificationcommunity-contribution

メソッドの最後の命令が条件分岐または switch である場合に、ILVerify が IndexOutOfRangeException(CreateBasicBlock 由来)でクラッシュする問題を修正します。fall-through ブロックの作成を、分岐の後に命令が存在する場合のみに限定し、存在しない場合は ReportFallthroughAtEndOfMethod を呼び出すようにしました。

#135827 JIT: check for a conditional branch that falls off the end of the method before linking its false edge

@pcshrosbree・GitHub・area-CodeGen-coreclrcommunity-contribution

JITのfgLinkBasicBlocksにおいて、メソッド末尾の条件分岐(BBJ_COND)が最終ブロックだった場合(制御がメソッド末尾から抜け落ちる不正なIL)に、本来発生すべきBADCODE("Fall thru the end of a method")チェックが到達不能になっていた問題を修正します。#95773以降、BBJ_CONDケースではcurBBdesc->IsLast()の判定より前にcurBBdesc->Next()(最終ブロックではnull)へのfalseエッジ追加が行われており、Checked JITではblock != nullptrのアサート失敗、Release JITではnull参照によるSIGSEGVが発生していました。IsLast()チェックをBBJ_CONDケースの先頭(両方のfgAddRefPred呼び出しより前)へ移動し、.NET 8と同様にInvalidProgramExceptionがスローされるようになります。条件分岐が最終ブロックでない場合の挙動は変わりません。新たな検証の追加ではありません。

#135793 Emit base-only LEAs as register moves

@tannergooding・GitHub・area-CodeGen-coreclr

xarch向けJITエミッタにおいて、インデックスなし・ディスプレースメントがゼロ・ソースとデスティネーションのレジスタが異なる、base-onlyの lea dst, [base] を mov dst, base に書き換える変更です。この書き換えはエミッタのエントリポイントで適用されます。

  • self-LEA(同一レジスタ)の除去は維持されます。
  • インデックス付き、ディスプレースメント付き、baseなしの形式は変更されません。
  • AMD64の lea rsp, [rbp] は、エピローグの正しさのためLEAのまま残されます。

サンプルコードは提供された情報に含まれていません。

#135778 Fix shared mutex privliges/permissions/defaults to be secure

@jkoritzinsky・GitHub・area-System.Threading

Unix上の名前付きMutex(共有メモリ/ロックファイル)のセキュリティ強化を目的とした変更です。主な方針は以下のとおりです。

  • 既定でユーザースコープのMutexを使用する
  • システム定義のユーザー単位ディレクトリ配下のファイルを既定で使用する(可能であれば一時的(ephemeral)なディレクトリを優先)
  • バックファイルへのパスにシンボリックリンクを許可しない
  • フォルダーのパーミッションは変更せず、正しく設定されていることを前提とする

あわせて、パス差し替え攻撃への耐性を高めるため、openat / mkdirat / unlinkat によるディレクトリディスクリプタ基準のファイル操作を導入しています。

#135774 Fix ILVerification argument lookup on results without arguments

@pcshrosbree・GitHub・area-Tools-ILVerificationcommunity-contribution

ILVerification の VerificationResult.ErrorArguments が TypeVerifier 由来の結果や一部の例外由来の結果で null になっており、TryGetArgumentValue / GetArgumentValue が NullReferenceException を投げる問題を修正します。あわせて、TypeVerifier が報告する結果に Type が設定されていなかった点も修正します。

  • ErrorArguments の既定値を Array.Empty<ErrorArgument>() に初期化
  • TypeVerifier が報告する結果にも Type を設定(同メソッド内の例外由来の結果と同様)

#135769 Do not attempt to start finalizer thread on WASM

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

WASM向けNativeAOTで、ファイナライザスレッドの作成呼び出しのみをスキップする変更です。Console.WriteLine の hello world を WASI/NativeAOT 上でコンパイル・リンク・実行できるようにするための一連のPRの一部です。

シングルスレッドでの立ち上げ段階の制限への対応であり、ファイナライゼーションの代替実装ではありません。自動ファイナライゼーションは引き続き未サポートで、保留中のファイナライザの待機も本変更では機能しません。

#135766 Fix remaining linking failures on native AOT/WASI

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

WASI上のNativeAOTで Console.WriteLine の Hello World をコンパイル・リンク・実行可能にする一連のPRの一部で、残っていたリンクエラーを解消します。WASIのポータブルランタイムに必要なネイティブ互換定義を補う変更です。

  • stdcppshim.cpp に、libc++abi を必要としない __cxa_thread_atexit を提供します。WASI かつ pthread なしの場合のみ、プライベートな WASI_SINGLE_THREADED 定義で有効化されます。クリーンアップコールバックは、プロセス終了時に登録の逆順で実行され、破棄中に登録されたコールバックも含まれます。
  • unix/cgroupcpu.cpp をフルランタイム向けリストから、PalUnix.cpp と同じ共通Unixソースリストへ移動しました。Wasm では Linux の cgroup サポートではなく、既存の非Linux向けフォールバックが使われます。

なお、WASI SDK の libcabi には __cxa_thread_atexit が定義されていますが、今回の互換実装は libcabi を意図的に省くNativeAOTのリンク構成向けです。TLSクリーンアップを何もしない代替実装ではありません。

#135764 Fix up FCalls on native AOT/WASM

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOT/WASM(WASI)で Console.WriteLine の hello world をコンパイル・リンク・実行可能にするための一連のPRの一部です。Wasmのマネージド/ネイティブABIを合わせ、clangが生成したネイティブコードがリニアメモリ上にスタックフレームを確保する前に、マネージドスタックポインタ(SP)を公開(publish)するようにします。これにより、ネイティブ側のアロケーションが生きているマネージドフレームと重なって起きる起動時のメモリ破壊を修正します。Wasm GCのスタックスキャンは実装していません。

#135761 Do not emit try table on native AOT

@MichalStrehovsky・GitHub・arch-wasmarea-CodeGen-coreclr

WASI/NativeAOT上で Console.WriteLine の Hello world をコンパイル・リンク・実行可能にするための一連のPRの一部です。NativeAOTの try 区間に対して、CoreCLR 用の try_table/catch再開方式ではなく、通常の Wasm block を出力するように変更します。これにより、NativeAOTのオブジェクト書き出しパスが未対応の WASM_CLR_RESTORE_CONTEXT_EXCEPTION_TAG_LEB を出力しなくなります。

作成者は、これは例外処理の実装ではなくブリングアップ(立ち上げ)用の暫定対応であると明記しています。マネージドの catch/filter 実行や例外からの再開は引き続き未サポートです。

#135739 JIT: Remove redundant Span.Slice/Vector128.Create checks in vectorized loops

@EgorBo・GitHub・area-CodeGen-coreclrreduce-unsafe

JITの範囲ベースのrelop(関係演算)畳み込みを改善し、ベクトル化されたSpanループで典型的に現れる冗長な境界チェックを除去します。Span.Sliceの(uint)X > (uint)Bndチェックや、Vector128.Createの長さチェックBnd - X >= cnsが畳み込まれ、a.Length - Vector128<ushort>.Countを上限とするループで境界チェックがすべて除去されます。

対象となるコード例(作成者提示):

static bool Equal(ReadOnlySpan<ushort> a, ReadOnlySpan<ushort> b)
{
    if (a.Length != b.Length)
        return false;

    int i = 0;
    if (Vector128.IsHardwareAccelerated)
    {
        for (; i <= a.Length - Vector128<ushort>.Count; i += Vector128<ushort>.Count)
        {
            var va = Vector128.Create(a.Slice(i));
            var vb = Vector128.Create(b.Slice(i));
            if (va != vb)
                return false;
        }
    }

    for (; i < a.Length; i++)
    {
        if (a[i] != b[i])
            return false;
    }

    return true;
}

#135730 [release/11.0] Correct decimal conversions to Half and BFloat16

@tannergooding・GitHub・Servicing-approvedarea-System.Numerics

decimal から Half / BFloat16 への変換で発生していた二重丸め(double-rounding)を修正する、main の #135668 の release/11.0 向けバックポートです。厳密なフォールバック処理が、中間型を経由せず変換先の形式へ直接丸めるようになりました。また、Half のパースでは tie-to-even の指数境界が修正されています。

これにより、Half / BFloat16 の中間値(midpoint)付近の decimal 値が、中間値の誤った側にある隣接表現値へ変換される問題が解消されます。

#135657 Run GC.GetGeneration test in its own process

@pcshrosbree・GitHub・area-GC-coreclrcommunity-contribution

GC/API/GC/GetGeneration テストがCoreCLR環境で断続的に失敗する問題への対処です。GC.Collect() 直前に確保したオブジェクトが、収集後もgen0に残る場合があるためです(CIログでは 0 0 / arrayTest Failed!)。 原因は #126108 で RequiresProcessIsolation が外れ、マージ済みの GC ランナー内で他テストの後にインプロセス実行されるようになったことと推測されています(#132076 で Collect / Collect0 / Collect1 に同様の修正が入っており、GetGeneration は対象外でした)。 本PRは GetGeneration.csproj に同じプロパティグループ(プロセス分離)を追加します。テストをgen0残留を許容する形に緩めることは意図的に避けています(昇格の検証が目的のため)。

#135625 [mono][interp] Preserve live locals across finally OSR

@rzikm・GitHub・area-Codegen-Interpreter-monoruntime-mono

Mono インタープリタで、finally ハンドラー内でOSR(On-Stack Replacement)が発生した際にローカル変数の値が破損する問題を修正するPRです。

SSAのコピー伝播により、保存済みのILローカルが別のフレームオフセットにある一時変数に置き換えられることがあります。finally 内のループによって現在のフレームがtier upされると、最適化後の継続コードが元のローカルではなく一時変数を読んでしまい、保留中の戻り値やハンドラー後に使われるローカルが誤った値になります。

EHブロックはSSAのCFGの外側にあるため既存のtiering定義では保護されていませんでした。本PRでは、finally ハンドラーの継続マーカーで MINT_DEF_TIER_VAR を再利用し、呼び出し元ブロックからlive-outとなるSSA対象のILローカルを保護します。この追加保護はEHバックエッジのパッチポイントを持つメソッドにのみ適用され、SSA・tiering・OSRは有効なままです。

再現コード(PR記載の最小化したもの)の要点:

[MethodImpl(MethodImplOptions.NoInlining)]
private static int ThroughFinally(int value)
{
    try
    {
        return Identity(value);
    }
    finally
    {
        for (int i = 0; i < 1_000; i++)
        {
            Thread.SpinWait(1);
        }
    }
}

修正前のMonoインタープリタでは 42 を返すべきところ 1 が返り(5回中5回再現)、修正後は 42 が返ります。

#135602 JIT: reject method entry inside handlers or filters

@pcshrosbree・GitHub・area-CodeGen-coreclrcommunity-contribution

JITが、メソッドのエントリポイント(IL offset 0)がハンドラまたはフィルタの内部にあるメソッドを受け入れてしまう問題を修正します。ECMA-335 I.12.4.2.8.1 では、これらのリージョンへの進入は例外処理機構が制御するものとされています。修正後は、このようなメソッドを InvalidProgramException として拒否します。

修正前の挙動(PR作者の報告):

  • linux-x64 の main Release JIT では、EntryInFinally / EntryInFault / EntryInCatch がコンパイルされ、戻ってしまう
  • main Checked JIT では fgDebugCheckBBlist で block->bbRefs == blockRefs のアサートが発生する
  • 出荷済みの .NET 10.0.12(linux-x64)では、コンパイルは成功するが呼び出すとスタックオーバーフローする
  • pop で始まる catch / filter のバリアントは、インポータのスタックアンダーフローチェックで既に拒否されている

#135577 [wasm] Avoid Spilling Many GC-ref Typed Tree Temps

@adamperlin・GitHub・area-CodeGen-coreclr

WebAssembly(Wasm)ターゲットのJITにおける fgWasmSpillRefs パスの最適化です。これまでは未消費のGC参照型の一時値をすべてスピルしていましたが、直近の呼び出しにそのまま引数として渡される値についてはスピルを省略します。GC安全性の維持は呼び出し先(callee)の責務とする方針です(R2Rのfixup thunkも着信引数を既定でGC保護するとされています)。

MyClass x = Allocate();
Use(x);   // x は直近の呼び出しに渡されるだけなので、スピル不要になる

一方、ネストした呼び出しなど、参照が直近の親以外で未消費のまま残る場合は、従来どおりスピルが必要です。

MyClass x = Allocate();
M(x, F()); // x は M のオペランドだが、F() の実行中(GCが起こりうる)も生存するためスピルが必要

#135491 [mono] Prevent theoretical overflow due to excessive aggregation of cmods

@BrzVlad・GitHub・area-VM-meta-mono

Mono ランタイムで、ジェネリックの inflate 時にカスタム修飾子(cmod)の数が無制限に積み上がり、個数を保持する uint8_t がオーバーフローして、後続のコピーで確保済みバッファを超えて書き込む可能性がある問題を防ぐ修正です。

  • 型が持つ cmod は通常少数で、Mono には上限(MONO_MAX_EXPECTED_CMODS)が定義されています。しかし generic inflation では上限をチェックせずに修飾子が追加されます。
  • 合計数を size_t で計算し、uint8_t に縮小する前に上限を超えていないことを assert します。
  • 上限を超える型は元々一貫してサポートされておらず(AOT の decode_type も同じ上限を assert)、サポート範囲の拡大ではなく、失敗を決定的(deterministic)にする変更です。

再現パターンの例(IL 上の概念的な表現):

D1<T> : Base<T modopt(A1) ... modopt(A60)>
D2<T> : D1<T modopt(B1) ... modopt(B60)>
D3<T> : D2<T modopt(C1) ... modopt(C60)>
D4<T> : D3<T modopt(D1) ... modopt(D60)>
D5<T> : D4<T modopt(E1) ... modopt(E60)>

#135440 Reduce WebAssembly managed method prologs

@davidwrighton・GitHub・area-ReadyToRun

CoreCLR の WebAssembly R2R マネージドメソッドのプロローグを縮小するため、メソッドごとの関数テーブルインデックス生成をやめ、コンパクトな「フレームアイデンティティ」に置き換える変更です。JIT・R2R コンパイラ・VM・cDAC のスタックウォーカーにまたがる変更で、インタプリタは変更されていません。

フレームアイデンティティの形式:

  • 通常のマネージドメソッド: 受け取った portable entrypoint(PEP)をそのまま保存
  • マネージド JIT ヘルパー: CoreLib のランタイム関数を示す定数の負の奇数を保存
  • funclet: タグ付けされた establishing-frame ポインタを保存
  • reverse P/Invoke メソッド: PEP 引数を持たないため、正の奇数の関数テーブルインデックスを維持

スタック処理側でこれらのアイデンティティをメソッドの仮想 IP に解決します。アイデンティティの再配置(relocation)は対象メソッドを明示的に保持するため、JIT インターフェースは「常にコンパイル中のメソッドを指す」前提を置かなくなり、将来のメソッド間直接呼び出しにも対応できます。

#135297 Managed ilasm: per-point PDB documents, the input file and .line files as documents, LocalSignature row id

@pcshrosbree・GitHub・area-ILTools-coreclrcommunity-contribution

managed 版 ilasm(src/tools/ilasm)が生成する Portable PDB を、ネイティブ ilasm の挙動に近づける変更です(#135212 の一環で、別ファイル .pdb 出力の #135289 はマージ済み)。ドキュメントの扱いをポイント単位に改め、入力ファイルと .line ファイルをドキュメントとして記録し、LocalSignature の行 ID を正しく書き出します。あわせて --pathmap オプションを追加しています。

#135293 [wasm][JIT] Remove assertions assuming the SP arg of a fast tail call is a GT_PHYSREG

@lewing・GitHub・area-CodeGen-coreclr

WebAssembly(wasm)向けJITの fast tail call において、シャドウスタックポインタ(SP)引数が GT_PHYSREG であると仮定していたアサーションを削除する修正です。WasmRegAlloc::CollectReferencesForCall は SP 引数を ADD(SP, FRAME_SIZE) でラップしますが、オペランドが一時変数(temp)に評価される場合があり、その際にアサートが発火していました(regallocwasm.cpp:589)。

例として、長い sb.Append(..).Append(..)...ToString() のチェーンでは gtMayHaveStoreInterference が 8 個のストアで判定を諦めるため、arg morph が SP 引数を temp に退避し、アサートに抵触します。temp も同じ post-prolog の SP 値を保持しているため、temp をラップしても同様に正しい動作となります。

#134664 Delete SUPPORT_LOCAL_DEBUGGING ifdef

@Copilot・GitHub・area-Diagnostics-coreclr

debug/di/cordb.cpp の SUPPORT_LOCAL_DEBUGGING ifdef を削除するクリーンアップです。このマクロは ARM 専用の DbiGetThreadContext / DbiSetThreadContext(アウトオブライン実装)でのみ使用されていました。ARM32 は Unix でのみサポートされ、Unix では当該マクロが 0 だったため、これらの関数は常に assert して FALSE を返すだけのスタブでした。この PR でスタブとマクロを削除し、ARM も他のプラットフォームと同じマクロを使うようにしています。

#define DbiGetThreadContext(hThread, lpContext) ::GetThreadContext(hThread, (CONTEXT*)(lpContext))
#define DbiSetThreadContext(hThread, lpContext) ::SetThreadContext(hThread, (CONTEXT*)(lpContext))

#134210 Enable building a stubbed NativeAOT WASM CoreLib

@jtschuster・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOT の WASM 向け CoreLib をスタブ化してビルドできるようにする変更です。スタック巻き戻し・GC・例外処理(EH)の設計が未確定のため、必要なヘルパーをいったんスタブ化し、ilc が WASM モジュールをコンパイルできるようにすることが目的です。作成者によれば、リンクや実行はまだできず、ブロッカーの一つを解消する位置づけです。

#133665 Reject bare CR in managed HttpListener request parsing

@Dev-next-gen・GitHub・area-System.Net.Httpcommunity-contribution

マネージド実装の HttpListener がリクエスト解析時に、LF を伴わない単独の CR(bare CR)を黙って捨てて前後の文字列を連結してしまう問題を修正します。RFC 9112 §2.2 では、単独 CR を受け取った場合は要素を不正として扱うか CR を SP に置換することが求められており、現状はどちらにも該当しません。本変更では、LF が直後に続かない CR を拒否するようにし、http.sys(Windows)の挙動(400 を返す)に揃えます。

作成者の検証では、以下のようなリクエストがマネージド実装では受理され、http.sys では 400 になっていました。

  • Content-Le\rngth: 5 → Content-Length: 5 として扱われる
  • X-Test: ab\rcd → ヘッダー値が abcd になる
  • GET /c\rd HTTP/1.1 → RawUrl が /cd になる
  • Host: localhost\r\r\n → 受理される
  • チャンクサイズ行 1\r0\n → 0x10 バイトのチャンクとして読まれる

#132637 Collapse VM contracts to STANDARD_VM_CONTRACT where equivalent

@AaronRobinsonMSFT・GitHub・area-VM-coreclr

VM内で展開されていた CONTRACTL ブロックを、意味的に等価な箇所で STANDARD_VM_CONTRACT / STANDARD_VM_CHECK に集約するリファクタリングです。あわせてデバッガ関連のコントラクトを簡素化し、不要になった遅延初期化の仕組みを削除しています。協調モード/プリエンプティブモードの両方から呼ばれ得るヘルパー(メタデータ取得、静的フィールドアドレス取得など)は、誤った MODE_PREEMPTIVE チェックを追加しないよう、モード非依存のまま維持しています。

2026年10月14日 (41 PRs)うち Bot 4 件 この日のページ →

#135772 Fix ILVerify crash on callvirt to a static method

@pcshrosbree・GitHub・area-Tools-ILVerificationcommunity-contribution

callvirt の対象が static メソッドの場合に、ILVerify が ImportCall 内で NullReferenceException をスローしてクラッシュする問題の修正です。CallVirtOnStatic のチェックを FatalCheck に変更し、該当メソッドの検証を CallVirtOnStatic エラーとして打ち切って、次のメソッドの検証を継続できるようにします。

#135767 Make GcScanRoots a no-op on native AOT/WASM

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

Native AOT/WASM(WASI)向けのブリングアップの一環として、GcScanRoots 内の WASM 向けシャドウスタック走査(GcScanWasmShadowStack)を削除し、WASM では StackFrameIterator によるスタック走査を行わない(実質 no-op)ようにする変更です。旧 NativeAOT-LLVM プロトタイプ由来の t_pShadowStackTop/t_pShadowStackBottom(未定義のグローバル)への依存を取り除き、不要なリンク依存を解消することが目的です。CrossThreadUnhijack() の処理はそのまま維持されます。

作成者自身が明記している通り、これは WASM でのマネージドスタックルート列挙を未実装のままにするもので、GC の正しさを修正するものでも、本番利用可能なスタック走査のサポートでもありません。

#135765 WASM/WASI changes to bootstrapper

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

WASM/WASI 向けの NativeAOT ブートストラップ(main.cpp)において、モジュール検出方法を変更するPRです。リンカのセクション境界シンボルではなく、ModulesSectionNode が出力する単一の __Module スロットを使用します。このスロットには ReadyToRun ヘッダへのポインタが格納されており、ブートストラップは &__Module とモジュール数 1 を InitializeModules に渡します。

WASI/NativeAOT で Console.WriteLine の Hello World をコンパイル・リンク・実行可能にするための一連のPRの一部です。

#135762 Do not emit MethodAssociatedDataNode on WASM

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

WASM(WASI/Native AOT)ターゲットでは MethodAssociatedDataNode を出力しないよう、MethodHasAssociatedData が false を返すように変更しています。現行の associated-data 形式はアンワインド情報にメタデータを付加し、相対ターゲットポインタを出力しますが、これは WASM の表現に適合しません。実際のリンク失敗として、instantiating unboxing stub の associated-data レコードから関数シンボルを指す R_WASM_MEMORY_ADDR_LOCREL_I32 リレーションが発生していました(WASM の関数ポインタはテーブルインデックスであり、リニアメモリ相対アドレスではないため)。

Console.WriteLine の hello world を WASI/Native AOT でコンパイル・リンク・実行可能にするための一連の PR の一部です。

#135760 Do not use CORINFO_HELP_INITCLASS on native AOT

@MichalStrehovsky・GitHub・arch-wasmarea-CodeGen-coreclr

WASM向けJITの fgGetSharedCCtor にある CORINFO_HELP_INITCLASS の早期リターンを、CoreCLR(FEATURE_NATIVEAOT でない場合)に限定する変更です。これによりNativeAOTでは、既存のReadyToRunのクラスコンストラクタ/静的ベースヘルパー選択ロジックを利用できます。ILCが実装できないヘルパーを要求していたことで、System.AppContext.OnUnhandledException(object) のコンパイル中に System.NotImplementedException: CORINFO_HELP_INITCLASS が発生していた問題を解消します。修正後のJITダンプでは CORINFO_HELP_READYTORUN_NONGCSTATIC_BASE が選択されます。

WASI上でnative AOTを使って Console.WriteLine のhello worldをコンパイル・リンク・実行できるようにする一連のPRの一部です。

#135756 [release/11.0] Return raw bytes from ZstandardDictionary.Train

@Copilot・GitHub・Servicing-approvedarea-System.IO.Compression

ZstandardDictionary.Train の戻り値を、特定の品質で準備済みの ZstandardDictionary から、辞書の生バイト列 (byte[]) に変更します。従来は Train が既定品質で準備した辞書を返すため、呼び出し側が指定した圧縮品質が上書きされる問題がありました。生バイト列を返すことで、呼び出し側が任意の品質で ZstandardDictionary.Create により辞書を準備できます。

main ブランチの PR #135424 の release/11.0 へのバックポートです。

byte[] data = ZstandardDictionary.Train(samples, sampleLengths, maxDictionarySize);
using ZstandardDictionary dictionary = ZstandardDictionary.Create(data, quality: 19);

#135753 Use performant way to enforce handle inheritance restrictions, fail wth error if not available

@adamsitnik・GitHub・area-System.Diagnostics.Process

ProcessStartInfo の InheritedHandles(ハンドル継承の制限)をUnixで強制する際の実装を、より高速な方法に置き換える変更です。利用できない環境ではエラーで失敗するようにしています。ただし、提供された情報には具体的な実装方式(使用するシステムコール等)の記述がなく、変更差分の規模(pal_process.c で +27/-55)から、ネイティブ層の処理が簡素化されたことのみが読み取れます。

#135752 [HTTP] Clear proxy auth on redirect

@ManickaP・GitHub・area-System.Net.Http

HTTPリダイレクト時に、Proxy-Authorization ヘッダーをクリアするようにする修正です(RedirectHandler.cs の変更)。提供された情報にはPRの説明文がないため、変更の背景や詳細な動機までは不明です。リダイレクト先リクエストにプロキシ認証情報が引き継がれないようにする変更と解釈できます。

#135751 Disable parallelisation on SslStreamTlsResumeTests

@Copilot・GitHub・area-System.Net.Security

SslStreamTlsResumeTests の並列実行を無効化するPull Requestです。このクラスは接続間のセッションキャッシュ状態に依存するため、並列テストコレクション外で実行することで、同じアセンブリ内の他テストがその状態へ干渉するのを防ぎます。dotnet/runtime#135689 で試みられたテスト単位のプロセス分離を、コレクション単位のシリアライズに置き換える内容です。

#135746 Add post-handshake auth tests for TlsSession

@rzikm・GitHub・area-System.Net.Security

SslStream の TLS 1.3 ポストハンドシェイク認証(Post-Handshake Authentication)に関するテストを追加するPRです。あわせて SslStream.IO.cs と SslStreamPal.Unix.cs に小規模な変更(それぞれ +12 行、+4 行)が入っています。PRタイトルは TlsSession を対象としていますが、変更内容の詳細は提供情報からは確認できません。

#135743 EnvelopedCms.Decode should not run attribute-merge.

@bartonjs・GitHub・area-System.Security

EnvelopedCms.Decode が Windows 上でのみ属性のマージ(attribute-merge)処理を実行していた問題を修正します。.NET Framework の Decode では属性のマージは行われておらず、SignedCms や Windows 以外の EnvelopedCms でもマージは行われていません。この変更により、Windows での挙動を他のケースと揃えます。

#135741 Improve SignedCms and SignedXml processing

@PranavSenthilnathan・GitHub・area-System.Security

SignedCms(System.Security.Cryptography.Pkcs)および SignedXml / EncryptedXml(System.Security.Cryptography.Xml)、さらに System.Private.Xml の XmlTextReader 周辺の処理を改善する変更です。PR の説明文は提供されていないため、以下は変更ファイルから読み取れる範囲での要約です。

  • System.Private.Xml: XmlTextReaderImpl(同期/非同期)を修正し、LocalAppContextSwitches に新規スイッチを追加。属性バッファの無効化に関するテスト(AttributeBufferInvalidationTests)が追加されています。
  • System.Security.Cryptography.Pkcs: SignedCms(+173/-13)を中心に処理が変更されており、SignerInfo、Rfc3161TimestampRequest にも小規模な修正があります。
  • System.Security.Cryptography.Xml: SignedXml(+221/-146)、EncryptedXml(+243/-67)、Utils(+271/-5)、XmlDecryptionTransform など、ライブラリ全体にわたる大きな変更が入っています。独自の LocalAppContextSwitches(新規、+70)が追加されています。

#135740 Emit line number information for native AOT/WASM

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

Native AOT の WebAssembly (WASM) 出力に DWARF の行番号情報を出力するようにし、WASMTIME_BACKTRACE_DETAILS=1 を指定した wasmtime がソースファイル名・行番号付きでバックトレースを表示できるようになります。ローカル変数・引数の情報は RyuJIT 側に情報がないため出力されません。

PR 説明に示されている実行例(抜粋):

1:    0x43b - reproZero_Program__DoAbort
                at D:\git\runtime2\src\coreclr\tools\aot\ILCompiler\reproZero\zerosharp.cs:164:0
2:    0x3d5 - reproZero_Program__Main
                at D:\git\runtime2\src\coreclr\tools\aot\ILCompiler\reproZero\zerosharp.cs:156:0

#135725 JIT: Reject native-int bounds checks in range check cloning

@EgorBo・GitHub・area-CodeGen-coreclr

JITのrange check cloning(境界チェックの複製による最適化)において、インデックスまたは配列長が TYP_INT でない境界チェックを事前に除外する修正です。

従来の BoundsCheckInfo::Initialize は、非定数パスでのみインデックスの型を確認していました。そのため arr[(nint)0] のような TYP_LONG の定数インデックス(長さ側も CAST(long <- ARR_LENGTH) になる)が IsIntCnsFitsInI32() を通過して受け入れられていました。一方、optRangeCheckCloning_DoClone はガード条件を TYP_INT として生成するため、int/long 混在の relop が作られ、Checked ビルドではアサート、Release ビルドでは不正な IR が生成されていました。

#135723 JIT: Do not propagate non-nullness through isinst helpers

@EgorBo・GitHub・area-CodeGen-coreclr

JITの gtGetHelperCallClassHandle が、インターフェイスや不明なターゲットの場合に value 引数のクラスを使用し、その「非null」プロパティまでコピーしていた問題の修正です。この挙動は chkcast では正しいものの、isinst は失敗時に null を返すため、型比較の畳み込み(type compare folding)で本来必要な null チェックが削除されていました。isinst ヘルパーについては isNonNull をクリアするようにしています。

#135722 JIT: Respect ordering side effects on the second operand when swapping

@EgorBo・GitHub・area-CodeGen-coreclr

JITの gtCanSwapOrder が、第1オペランドの GTF_ORDER_SIDEEFF のみを並べ替え不可として扱っていたバグの修正です。アサーション伝播により「例外を発生させない」と証明された除算は GTF_ORDER_SIDEEFF のみを保持します。このため、その証明の根拠となる checked な加算より前に除算が入れ替えられ、誤った例外がスローされる可能性がありました。修正後は、第2オペランドの順序付けの副作用も他の並べ替え不可の副作用と同様に扱います。

#135721 JIT: Model xadd as writing its register operand

@EgorBo・GitHub・area-CodeGen-coreclr

xadd [mem], reg は、メモリの古い値をレジスタ側に書き戻す命令ですが、JIT のエミッタでは xchg にだけ読み書き(RW)レジスタ形式が与えられ、xadd は読み取り専用の形式のままでした。そのため、冗長な mov を除去するピープホール最適化が lock xadd をまたいで遡り、結果のゼロ拡張である mov eax, eax を誤って削除していました。本 PR は xadd にも xchg と同じ RW レジスタ形式を使うよう修正します。

#135720 JIT: Do not contain local addresses of volatile indirections on xarch

@EgorBo・GitHub・area-CodeGen-coreclr

xarch(x86/x64)向けJITで、address-exposedなローカル変数へのvolatileアクセスが、エミッタのスタックmovパス経由で出力され、IsRedundantStackMovがvolatileを考慮しないために、同一の連続ストア(またはストア直後のロード)が除去されてしまう問題を修正します。volatileな間接参照ではローカルのアドレスをレジスタに保持し、これらのアクセスが省略されないようにします。

#135719 JIT: Stop the redundant zero-init scan at blocks with other predecessors

@EgorBo・GitHub・area-CodeGen-coreclr

JITの optRemoveRedundantZeroInits が、プロローグからの全経路が走査対象ブロックを通ると仮定して、一意な BBJ_ALWAYS 後続ブロックをたどっていました。しかし合流ブロックには、ローカル変数(例: アドレス露出されたもの)に書き込む catch ハンドラ経由でも到達できるため、そこにある明示的なゼロ初期化ストアが誤って削除されていました。本PRは、先行ブロック(EH 経由を含む)が複数あるブロックで走査を停止するようにし、この誤削除(誤コンパイル)を修正します。正しさのために必要な修正です。

#135691 Clarify async validation source documentation from API docs review

@ViveliDuCh・GitHub・area-System.ComponentModel.DataAnnotations

System.ComponentModel.Annotations の非同期検証API(Validator の非同期オーバーロード、AsyncValidationAttribute.GetValidationResultAsync など)に関する XMLドキュメントコメントのみ の修正です。API docsレビューで得られた指摘を反映し、キャンセル時の挙動や戻り値の契約を明確にしています。実行コード、APIシグネチャ、参照アセンブリは変更されていません。

#135621 Fix CborReader exception handling for reserved simple-value headers

@eiriktsarpalis・GitHub・area-System.Formats.Cbor

System.Formats.Cbor の CborReader における例外処理の修正です。

  • 予約済みの additional-information 値 28〜30(初期バイト 0xFC、0xFD、0xFE)は不正な CBOR ですが、従来は ReadSimpleValue が InvalidOperationException を報告していました。スキップ API やエンコード済み値 API でも同じ例外が漏れていました。これらの入力は、適合性チェックが無効な場合も含め、CborContentException をスローするようになります。
  • ReadUnixTimeSeconds は、エンコードされた Unix 時刻が DateTimeOffset で表現できない場合、数値変換で発生する ArgumentOutOfRangeException と OverflowException の両方を InvalidOperationException に変換します。元の例外は内部例外として保持され、失敗時にはリーダーのチェックポイントが復元されます。

#135599 JIT: use the carry flag to detect SP wraparound in genLclHeap on ARM

@EgorBo・GitHub・area-CodeGen-coreclr

ARM/ARM64 の JIT における genLclHeap(localloc/stackalloc)の非ゼロ初期化パスで、sp - size のラップアラウンド(SPの巻き戻り)検出に、符号付きオーバーフロー判定(bvc/EJ_vc)ではなくキャリーフラグを使うよう修正します。 修正前は、巨大な stackalloc を行うと SP がラップした値に設定され、プローブされずにスタックオーバーフローとして扱われませんでした。 Fixes #135524

#135596 JIT: support register-condition SELECT_INC/NEG/INV on arm64

@EgorBo・GitHub・area-CodeGen-coreclr

ARM64 JITにおいて、SELECTノードがレジスタ条件を保持したまま(例:CCMPチェーンが長すぎてTryLowerConditionToFlagsNodeで処理できない場合)、Lowering で GT_SELECT_INC/NEG/INV に変換されることがあるものの、LSRA・VisitOperands・コード生成(INC)がこれらのノードに対応していなかった問題を修正します。あわせて、TryLowerCnsIntCselToCinc で GT_SELECT の場合も GT_SELECTCC と同様に、小さい方の定数を CINC のベースとして保持するようにしています。

#135575 Preserve ARM64 flags dependencies during indirection reordering

@Copilot・GitHub・area-CodeGen-coreclr

ARM64のstore-pair(stp)最適化やindirectionの並べ替え時に、cneg が対応する cmp より前に移動し、k % 2 が古いフラグ(アロケーションヘルパー由来)を読んでしまう問題の修正です。.NET 10では、非負の奇数入力に対して -1 が返る可能性がありました。

修正は、フラグの生成側・消費側としてマークされたノードの移動を、store-pairおよびpost-indexed addressingの最適化で拒否することで行われています。これはJIT(コンパイラ)の内部実装の変更で、公開APIへの影響はありません。

#135537 [Interpreter] Access object references in stack slots as raw pointers instead of checked OBJECTREFs

@pcshrosbree・GitHub・community-contributionarea-CodeGen-Interpreter-coreclr

Checked ビルドで、インタープリターのスタックスロットを検証付きの OBJECTREF(Thread::dangerousObjRefs テーブルで検証される)経由で読み書きしていたため、過去の無関係なエントリが残っていると後続の読み取りで誤って assert する問題(#135535)を修正します。スタックスロットを生のオブジェクトポインタとして扱う方式に変更しました。

  • LOCAL_VAR_OBJREF(生ポインタ→OBJECTREF)と SET_LOCAL_VAR_OBJREF(OBJECTREF→生ポインタ)を導入し、OBJECTREF / DELEGATEREF / CONTINUATIONREF / BASEARRAYREF のスロットアクセスを置き換え。
  • 仮想呼び出しの解決(CALLVIRT のキャッシュミス、CALLDELEGATE / CALLI の open virtual delegate)は ResolveVirtualCallTarget を経由し、レシーバをネイティブの OBJECTREF ローカルにコピーして GCPROTECT_BEGIN で保護した上で MethodDesc::GetMethodDescOfVirtualizedCode に渡すようにしました。
  • GCFrame::Remove は変更なし(以前のリビジョンの _DEBUG ループ削除は元に戻されています)。

#135531 Accept a faulted frame in the shadow stack assert of CallCatchFunclet

@pcshrosbree・GitHub・area-VM-coreclrcommunity-contribution

Windows x64(CETシャドウスタック有効)のCheckedランタイムで、ランタイムが catch ハンドラ末尾で再送出したスレッドアボートを、同一メソッド内の別ハンドラが捕捉した際に CallCatchFunclet 内のアサートが失敗する問題を修正します。アサート条件に「フォールトしたフレーム(faulted frame)」を許容する節を追加するもので、Releaseビルドの動作は変わりません。

原因(作成者の説明による):

  • EECodeManager::ResumeAfterCatch は、このようなスレッドを ThrowControlForThread へ送ります。
  • RedirectForThrowControl は FaultingExceptionFrame に、リダイレクト時点のSSPを記録します。
  • このフレームは呼び出し地点で停止したものではなく割り込まれたものであるため、SSP直下のスロットに ControlPC が入っていません。そのため、catchハンドラがそのフレームにある場合にアサートの最後の節が失敗します。
  • SSPが指すのはフレームのリターンアドレスで、フレームの再開に必要なのはこちらです。

#135434 Remove MoveSymbolFiles PDB consolidation; read CoreLib PDB from its natural location

@sbomer・GitHub・area-Infrastructure

src/coreclr/Directory.Build.targets の MoveSymbolFiles(全マネージドプロジェクトのPDBを $(RuntimeBinDir)PDB\ に集約するターゲット)を削除し、唯一の実質的な利用者である eng/liveBuilds.targets が CoreLib のマネージドPDBを本来の出力先 IL\ から直接読むように変更しています。

背景として、同一アセンブリ名を持つビルドバリアント(例: crossgen2 の通常ビルドと publish ビルド)が共有フォルダ内でPDBを上書きし合い、配布されるDLLと一致しないPDBが残る問題があったと説明されています。.ni.pdb は crossgen-corelib.proj が直接書き出すため影響を受けません。

#135377 Clean up FEATURE_CORPROFILER configuration

@AaronRobinsonMSFT・GitHub・area-VM-coreclr

FEATURE_CORPROFILER の設定を整理し、ランタイムおよび CoreLib のプロファイラーサポートを一貫して制御できるようにする変更です。プロファイラー無効ビルドでは、プロファイラー専用のヘルパーやスタブ(WASM 向けの未サポート用プレースホルダーを含む)がビルドから除外されます。DAC のプロファイリングデータとプロファイラーの attach/detach は、独立して設定可能な状態を維持します。

#135366 Fix silent breaking-change documentation publication failures

@tarekgh・GitHub・area-Infrastructure

pull_request_target で動作する破壊的変更ドキュメント生成ワークフロー(breaking-change-doc)が、ドラフト成果物を生成しながらコメントを投稿せずに「成功」扱いで終了してしまう問題を修正します。dotnet/runtime#135277 マージ後の実行で、必要なシェルコマンドが拒否されたにもかかわらずワークフローが失敗しなかったことが発端です。

主な対応は次のとおりです。

  • ヘルパースクリプトを使えるよう、デフォルトの浅いチェックアウトを1回だけ構成
  • 必要最小限のコマンド(jq、mkdir)のみ許可
  • 生成結果・投稿先PR・コメント本文を検証し、不完全な生成や投稿失敗は拒否
  • 生成ジョブが成功しない限り投稿を行わないよう制御

#135250 Simplify single-threaded CoreCLR thread and static machinery

@jkoritzinsky・GitHub・arch-wasmarea-VM-coreclr

FEATURE_MULTITHREADING を持たない CoreCLR ビルド(browser / WASI wasm を含む)から、複数ネイティブスレッドおよびスレッドごとの静的ストレージ用の仕組みを取り除き、単一のネイティブ Thread を前提とした実装に簡素化する変更です。

  • ネイティブのスレッド ID と ThreadStore を単一スレッド前提に整理。DirectOnThreadLocalData のネイティブスレッドポインタと、開始操作が未サポートのままの managed 側 unstarted Thread オブジェクトは維持。
  • マルチスレッド無効時、managed のスレッド静的変数は通常の静的変数として扱う。crossgen2 と ReadyToRun のメタデータも単一スレッドモデルを表現するよう更新。
  • wasm は引き続きネイティブの GC ポーリング実装を使用。managed 側のポーリングのフォールバックは GC トランジションを実行。単一スレッド時のスピン待機の上限は 0(マルチスレッド時の挙動は維持)。

#135065 Add experimental ILLink task caching and cache maintenance

@sbomer・GitHub・linkable-frameworkarea-Tools-ILLink

ILLink MSBuildタスクに、呼び出し全体の結果をキャッシュする実験的機能を追加します。ILLINK_EXPERIMENTAL_CACHE で有効化し、ILLINK_EXPERIMENTAL_CACHE_PATH で保存先を上書きできます。成功した出力はリンカーを再実行せずに再利用されます。あわせて、指定したUTCカットオフ以前に最後に使われたエントリを削除する、スタンドアロンのメンテナンスツール(ILLink.CacheTool)も追加されます。これは初期実装であり、範囲は限定的です。

#132953 Add OpenHarmony/HarmonyOS build infrastructure

@springmin・GitHub・area-Infrastructure-librariescommunity-contribution

OpenHarmony(HarmonyOS)向けポートシリーズ(トラッキング Issue: #132866)の第1弾として、HarmonyOS NDK を用いた openharmony ターゲットのクロスビルド基盤を追加する PR です。変更はすべて TargetsOpenHarmony(--os openharmony 指定時のみ有効)でガードされており、既存プラットフォームには影響しない(no-op)と説明されています。

2026年10月13日 (37 PRs)うち Bot 2 件 この日のページ →

#135712 Fix default servicing directory root on Unix

@elinor-fung・GitHub・area-Host

Unix上でデフォルトのservicingディレクトリのルートが /opt/servicing ではなく opt/servicing(先頭スラッシュなしの相対パス)として組み立てられていた問題を修正します。あわせて、必要なアクセス権限を持たないservicingディレクトリは拒否されるようになります。

#135692 JIT: Preserve Half estimate ISA dependencies in ReadyToRun

@tannergooding・GitHub・area-CodeGen-coreclr

Half.ReciprocalEstimate と Half.ReciprocalSqrtEstimate をハードウェアイントリンシックとしてインポートする際に、負のISA前提条件(negative ISA prerequisites)を保持するようにJITを修正しています。これにより、ReadyToRun(R2R)では既存の非決定的イントリンシックのポリシーに従って、estimate系に依存するコードをガードできるようになります。精密な Half.Sqrt には影響しません。

#135686 Emit a zero-offset local address as a mov

@tannergooding・GitHub・area-CodeGen-coreclr

x64 JITにおいて、ローカル変数のフレームオフセットがゼロに解決された場合、lea reg, [base] の代わりに mov を生成するよう変更します。フレームレイアウト確定後にチェックを行い、元の emitAttr を維持します。インデックス付きの場合や動的なスタック相対アドレッシングの場合は対象外です。

#135685 Remove the redundant jump in the HW intrinsic jump table fallback

@tannergooding・GitHub・area-CodeGen-coreclr

x64向けハードウェアイントリンシックのジャンプテーブル・フォールバックにおいて、最後のケースの後に出力されていた無条件ジャンプを省略する最適化です。最後のケースがそのままスイッチ終端へフォールスルーするため、動作を変えずにコードサイズが小さくなります。それ以前のケースは引き続きスイッチ終端へのジャンプを保持します。

#135677 Disable Runtime_133581 on Mono

@jkotas・GitHub・area-Infrastructure-mono

Mono上でSIGSEGV(セグメンテーション違反)が発生するため、回帰テスト Runtime_133581 をMonoでは無効化するPRです。同様の症状で失敗するテストが複数あるとのことです。ランタイム/コンパイラ/ライブラリ本体の実装変更ではなく、テストの実行条件のみを変更するもので、公開APIへの影響はありません。

#135668 Correct decimal conversions to Half and BFloat16

@tannergooding・GitHub・area-System.Numerics

decimal から Half / BFloat16 への変換で、ターゲット形式の中間点(midpoint)のわずかに片側にある値が、一度 double に丸められると中間点そのものになり、誤った隣接値に丸められる問題を修正します。有効な場合はターゲット形式向けのファストパスを使い、それ以外の値には厳密なターゲット精度でのフォールバックを用います。あわせて Half の MinExponentRoundToEven の境界値を -21 から -22 に修正しており、これにより影響を受けていた Half のパース時のタイ(tie)処理も修正されます。

#135666 Enable normal-completion finally emission for NativeAOT Wasm

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

NativeAOT の Wasm ターゲットで、例外を投げずに finally を正常完了させる経路を有効化する変更です。JIT の EH 句から funclet を分類し、その結果(finally/fault の区別と句の順序)を NativeAOT と ReadyToRun の両メソッドノードに保持します。これにより、シリアライズ済み EH レコードをデコードする必要がなくなります。

また「親メソッド + funclet 序数」による参照を、名前付き funclet シンボルへの再配置(relocation)に変換します。これによりリンカーがテーブルスロットを独立して割り当てられます。EH 情報と依存関係は維持されます。

作成者による再現手順では、通常/ジェネリックの関数ポインタ、ジェネリック辞書ルックアップ、finally を通る正常完了を試し、Hi が2行出力され終了コード 0 になることが期待結果です。

try
{
    Call(&Print);
}
finally
{
    Call(&PrintGeneric<string>);
}

#135662 [manual] Merge release/9.0-staging into release/9.0

@ViveliDuCh・GitHub・NO-SQUASHServicing-approvedarea-System.Security

release/9.0-staging ブランチを release/9.0 にマージする手動マージPRです。作成者・Copilotによる概要の記載はなく、詳細な意図は提供情報からは不明です。変更ファイルから、依存関係バージョンの更新、パイプライン設定、CoreCLRのamd64アセンブリ、暗号化関連のSafeHandle、テストの変更が含まれていることが確認できます。

#135661 [manual] Merge release/8.0-staging into release/8.0

@ViveliDuCh・GitHub・NO-SQUASHServicing-approvedarea-codeflow

release/8.0-staging ブランチを release/8.0 へ手動でマージするPull Requestです。作成者・Copilotによる概要の記載はなく、変更ファイル一覧から確認できる範囲で、依存関係・ビルド基盤の更新、CoreCLRのVM(仮想スタブ)修正、Cryptography関連の修正とテスト追加、パイプライン定義の変更が含まれていることが分かります。

#135644 Read metadata stream count as unsigned in MetadataReader

@Empiree・GitHub・area-System.Reflection.Metadatacommunity-contribution

MetadataReader がメタデータルートからストリーム数を読み取る際、ReadInt16(符号付き)を使用していたため、0x8000 以上のカウントが負の値になり、配列確保時に OverflowException がスローされる問題を修正します。ECMA-335 (II.24.2.1) ではストリーム数は2バイトの符号なし値であり、CoreCLR のネイティブリーダーも USHORT として読み込んでいます。修正により ReadUInt16 を使用するようになり、不正なヘッダーに対してはコンストラクターのドキュメントどおり BadImageFormatException が発生します。

#135624 Kill process tree descendants before ancestors on Unix

@thomhurst・GitHub・area-System.Diagnostics.Processcommunity-contribution

Unix 上の Process.Kill(entireProcessTree: true) が、macOS で意図しないプロセス(GitHub ホステッドランナーの Runner.Listener / Runner.Worker 等)に SIGHUP/SIGCONT/SIGTERM を発生させる問題(#131944)の修正です。

従来は、ツリー全体に SIGSTOP を送った後、深さ優先の先行順(親が先)で SIGKILL を送っていました。親が先に死ぬと、停止中の子が launchd に reparent されます。その子が終了する際、XNU の fixjobc() が pg_jobc をデクリメントしてプロセスグループが誤って orphaned と判定され、orphanpg() が停止中のメンバーを検出して同一プロセスグループ全体に SIGHUP と SIGCONT を送っていました。

修正では、収集済みのリストを逆順に走査し、子孫を祖先より先に SIGKILL します。SIGKILL は停止状態を即座に解除するため、祖先が終了して子が reparent される時点で停止中のプロセスが残りません。

#135595 JIT: don't contain BITCAST under small local stores

@EgorBo・GitHub・area-CodeGen-coreclr

小さな型(byte/short など)への STORE_LCL_VAR / STORE_LCL_FLD は、ソース値を暗黙的に切り詰めます。しかし、BITCAST が contained 化されていると、コード生成がソース側のレジスタ(例: float)から元の幅のままストアしてしまい、隣接フィールドを上書きする問題がありました。本PRは、小さなローカルストアの配下では BITCAST を contained にしないようにして、この問題を修正します。

#135594 JIT: mark pseudo return buffer temp as multi-reg return

@EgorBo・GitHub・area-CodeGen-coreclr

戻り値バッファ経由で値を返す呼び出し結果を、自身の戻り値型がマルチレジスタ構造体(例: arm64のHFA)であるメソッドから返す場合、impFixupStructReturnType が作成する一時変数に lvIsMultiRegRet が設定されず、Lowering でアサートが発生する問題を修正します。該当の一時変数がマルチレジスタ戻り値の既存処理にフォールスルーするようにしました。

#135591 Fix QuicStream send buffer leak

@asad24-dev・GitHub・area-System.Net.Quiccommunity-contribution

QuicStream の送信バッファがリークする問題の修正です(#135583)。MsQuicBuffers が struct であるため、_sendBuffers を MsQuicContextSafeHandle.Disposable に代入した時点で、ハンドル側にはボックス化されたコピーが渡されていました。このコピーは最初の送信でネイティブの QUIC_BUFFER 配列が確保される前のものです。そのためハンドル解放時には、実際のバッファを保持するインスタンスではなく、古いコピーが Dispose されていました。

MsQuicBuffers を sealed class に変更し、ストリームとセーフハンドルが同じバッファ所有者を共有するようにしました。

#135547 Fix test89834 SIGBUS on macOS ARM64

@Copilot・GitHub・area-Infrastructure

macOS ARM64 の checked ビルド(GC/JIT ストレス)で test89834 が SIGBUS で終了する問題(100 を期待しているところ 138 が返る)の修正です。原因は CORINFO_HELP_BULK_WRITEBARRIER_SMALL ヘルパーにあるとされています。このヘルパーは non-GC として分類されていますが、最初の呼び出しが prestub に入り、GC を引き起こす可能性があり、GC hole となっていました。

#135477 Fix nullable struct deserialization across buffer boundaries

@eiriktsarpalis・GitHub・area-System.Text.Json

System.Text.Json のストリーミングデシリアライズで、nullable な構造体内の null メンバーの直後にバッファ境界が来ると、有効なJSONに対して JsonException が発生する問題の修正です。

原因は、ReadStack.Push() が最深部の中断されたフレームを復元する際に IsContinuation をクリアすることです。これにより NullableConverter<T> がメンバートークンを「null の nullable 値」として誤って扱っていました。修正では、その高速パスに入る条件として ObjectState.None を必須にしています。

#135464 [Interpreter] Record the next instruction's ip before calling a managed helper

@pcshrosbree・GitHub・community-contributionarea-CodeGen-Interpreter-coreclr

インタプリタ(src/coreclr/vm/interpexec.cpp)で、マネージドヘルパー呼び出しの前に「次の命令の ip」を pFrame->ip に記録するよう修正したPRです。

従来、INTOP_CALL_HELPER_* と INTOP_UNBOX_ANY[_GENERIC] のネイティブヘルパー呼び出し経路では、ヘルパー実行中も pFrame->ip が命令の先頭を指したままでした。ヘルパーがマネージドコードで例外を投げると、インタプリタフレームは faulting としてマークされず、SfiInitWorker/SfiNextWorker が ip をリターンアドレスとみなして STACKWALK_CONTROLPC_ADJUST_OFFSET を引きます。その結果、ヘルパー呼び出しが try 領域の最初の命令(.cctor を持つ型の静的フィールドアクセスでの静的ベースヘルパーなど)の場合、補正後の ip が領域の手前に落ち、ハンドラーが実行されませんでした。

INTOP_CALL や IL ターゲット側の経路は既に次命令の ip を記録していたため、ネイティブヘルパー経路も同様に ip を進めてからヘルパーを呼ぶようにしています。

#135460 Add support for specifying load context in custom hosting APIs

@elinor-fung・GitHub・area-Host

ネイティブホスティングのカスタムコンポーネントホスティングAPIに、ロードコンテキストを指定できる機能を追加します。coreclr_load_context をコンポーネントホスティングAPIへ渡せるようになり、同一の識別子を持つコンポーネントは同じロードコンテキストを共有します。設計ドキュメント native-hosting-load-context.md のカスタムコンポーネントホスティング部分の実装であり、#133570 のフォローアップです。

#135458 JIT: preserve value evaluation when expanding reference array stores

@EgorBo・GitHub・area-CodeGen-coreclr

JITのmorphフェーズで、参照型配列のストアヘルパー呼び出しを直接ストアに展開する際、副作用を持つオペランドを「配列 → インデックス → 値」の順に評価してから、配列のnullチェックと境界チェックを導入するよう修正します。importerでのspillは、ヘルパー呼び出しのままの段階では forward substitution により取り消され得るため、この順序保証を変換処理そのものに組み込んでいます。volatile読み取りのような「順序付けのみ」の副作用も対象に含めています(変換処理と、既存のインライン配列ストア用importer spillの両方)。

#135430 [cDAC] Map entry point to code start in GetMethodVarInfo; make ReJIT optional in IsVersionable

@lewing・GitHub・area-Diagnostics-coreclr

ポータブルエントリポイントを使うターゲット(CoreCLR WebAssembly など)向けに、cDAC の IDebugInfo.GetMethodVarInfo の2つの問題を修正します。

  1. codeOffset を、メソッドのエントリポイント(ICodeVersions.GetNativeCode)ではなく、IExecutionManager.GetDiagnosticCodeStartFromEntryPoint(#134827)でコード開始位置にマッピングした値からの相対で計算するようにしました。このメソッドは、インタプリタメソッドならインタプリタのバイトコード、ポータブルエントリポイントなら R2R の仮想 IP を返し、それ以外はアドレスをそのまま返します。
  2. IsVersionable が ReJIT コントラクトを必須としていたため、PROFILING_SUPPORTED が無効な wasm では GetMethodVarInfo が ContractMissingException を投げていました。コントラクトが存在しない場合は ReJIT 対象外として扱うよう、TryGetContract を使うように変更しました。

#135424 Return raw bytes from ZstandardDictionary.Train

@rzikm・GitHub・area-System.IO.Compressionbreaking-changeneeds-breaking-change-doc-created

ZstandardDictionary.Train の戻り値を、品質3で準備済みの ZstandardDictionary から、呼び出し側が所有する辞書の生バイト列(byte[])に変更します。従来は、準備済み辞書がエンコーダーの品質設定を上書きするため、別の品質を使いたい場合は Data を取り出して再度辞書を準備する必要がありました。この変更により、オフラインでのトレーニング/永続化と、品質ごとの辞書準備が分離されます。

byte[] data = ZstandardDictionary.Train(samples, sampleLengths, maxDictionarySize);
using ZstandardDictionary dictionary = ZstandardDictionary.Create(data, quality);

トレーニング時の検証、小サンプルに対する安全ガード、プール済みバッファのクリーンアップは変更されていません。準備済み辞書がエンコーダー品質より優先される点も従来どおりです。

#135422 JIT: Preserve RHS writes in SIMD partial stores

@Copilot・GitHub・area-Infrastructure

v.X = Helper(ref v) のようなSIMDベクターの部分書き込み(partial store)において、モーフィング時にRHSより前にベクター全体が読み取られ、その後 WithElement でRHSの結果を反映することで、呼び出し先が他のフィールドに書き込んだ内容が上書きされてしまう問題(#135392)を修正します。RHSに永続的な副作用や順序依存の副作用がある場合は、WithElement への変換を行わず直接の部分書き込みを維持します。

#135417 Allow CI scanner shell built-ins and extend inactivity watchdog

@vitek-karas・GitHub・area-Infrastructure

CI Outer-Loop Failure Scanner(ワークフロー)が、Bashのコマンド許可リストに read がなかったため実行できなかった問題に対応するPRです。スキャナーが実際に使用していたシェル組み込みコマンド(read と :)を許可し、無操作時の監視(inactivity watchdog)のタイムアウトを2分から10分へ延長します。ランタイム/ライブラリのコードやAPIへの変更はなく、CIワークフロー設定のみの変更です。

#135414 WASI hello world with native AOT

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

WASI向けNative AOTでの「hello world」を成立させるため、Wasmオブジェクトライタが wasm-ld でリンク可能なリロケータブルオブジェクトを出力できるようにする変更です。linking(symbol-table / segment-info)メタデータ、CODEおよびマージ済みDATAのrelocationセクションを出力し、マネージドメソッド本体とコンパイラデータをWASI libcとリンクできるようにしています。

検証では、ランタイムなし・アロケーションなしの直接呼び出しプログラムが対象で、puts へのP/Invokeで "Hi" を出力し、wasmtime 上で正常終了(exit 0)することを確認しています。サンプルはリポジトリ内のrepro(zerosharp.cs)として提示されています。

[DllImport("*"), SuppressGCTransition]
static extern unsafe int puts(byte* str);

[UnmanagedCallersOnly(EntryPoint = "__main_argc_argv")]
static int NativeMain(int argc, byte** argv)
{
    Main();
    return 0;
}

static unsafe void Main()
{
    int abc = 'H' | 'i' << 8;
    puts((byte*)&abc);
}

#135411 Delete CodeHeapReserveForJumpStubs

@jkotas・GitHub・area-VM-coreclr

新しいprecode設計により、jump stubの確保を必ず成功させる必要がなくなったため、CodeHeapReserveForJumpStubs(jump stub用の予約領域)を削除するPRです。適切なアドレス範囲にjump stub用のメモリを確保できないごく稀なケースでは、確保失敗を NULL として伝播し、確保をリトライする方式に変更されています。

#135237 Correct MetadataLoadContext binding docs and not-found message

@caraioniurie47・GitHub・area-System.Reflectioncommunity-contribution

MetadataLoadContext において、アセンブリをロードしてもその名前は束縛されず、名前は MetadataAssemblyResolver が返したアセンブリにのみ束縛される(dotnet/corefx#33734 以降の挙動)という実際の動作に合わせて、ドキュメントコメントとエラーメッセージを修正する変更です。ロード処理自体のロジックは変更していません。

#135107 Use MoveToImmutable in ILLink.RoslynAnalyzer

@prozolic・GitHub・linkable-frameworkcommunity-contributionarea-Tools-ILLink

ILLink.RoslynAnalyzer と ILLink.Shared 内の ImmutableArray<T>.Builder の利用箇所で、ToImmutableArray の代わりに MoveToImmutable を呼び出すように変更するPRです。PR #134426 のフォローアップで、ILLink および ILCompiler.Compiler に適用された変更を ILLink.RoslynAnalyzer と ILLink.Shared にも反映しています。

#135091 Fix DynamicCode_Jit test

@BrzVlad・GitHub・area-System.Runtime

RuntimeFeature.IsDynamicCodeCompiled のテスト(DynamicCode_Jit)が、インタープリターが有効な環境で誤って失敗する問題を修正するPRです。インタープリターが有効な場合に「動的コードがコンパイルされている(IsDynamicCodeCompiled == true)」と仮定しないよう、テストの前提を変更しています。

背景として、Apple/WASMターゲットを模倣するため --dynamiccodecompiled false を明示的に指定してビルドする構成が存在します。このテストは以前インタープリター上で無効化されていましたが、最近 #134762 で再び有効化されたため、上記構成で問題が顕在化したとのことです。

#135028 Reconfigure native CMake builds from scratch when the compiler inputs change

@lewing・GitHub・area-Build-mono

CMakeはビルドディレクトリの初回configure時にのみコンパイラを検出するため、その後にツールチェーンファイル・CC/CXX・emcmakeなどを変更しても反映されませんでした。WASI SDKやemsdkがバージョン別のツールキャッシュディレクトリに移行したことで、SDK更新後も既存のローカルビルドディレクトリが古いコンパイラを使い続け、#134992 の後に undefined symbol: __wasilibc_descriptor_deallocate といったリンクエラーが発生していました(CIは毎回新規configureのため影響なし)。

本PRでは、コンパイラ選択に関わる入力を <build dir>/cmake_compiler_inputs.txt に記録し、前回と差異があれば clean ターゲットを実行した上で --fresh 付きでconfigureし直すようにしました。

#134749 Fix ILVerify entry stacks for nested exception filters

@pkuyo・GitHub・area-Tools-ILVerificationcommunity-contribution

ILVerify において、ネストされた例外フィルターのエントリースタック初期化が誤っており、正しいILに対して誤検出(false verification errors)が発生していた問題(#134711)を修正します。あわせて、例外ハンドリング(EH)領域の境界・重複・ネスト・節の順序・フィルターの終端などの検証を追加し、メソッドエントリがハンドラーやフィルター内にあるILを拒否するようになります。回帰テストも追加されています。

#134423 Synchronize HTTP/2 queue-time test with connection publication

@rzikm・GitHub・area-System.Net.Http

HTTP/2 の TimeInQueue_RecordedForNewConnectionsOnly テストの不安定さ(flaky)を解消するための、テストのみの変更です。プール側は、最初の待機者へシグナルを送った後に接続を公開する場合があります。そのため、最初のレスポンス完了後すぐに接続が再利用可能になるとは限らず、後続の逐次リクエストが同じ接続上で正当にキュー待ちとなり、計測値が2〜3件になることがありました。キュー時間は「接続確立」だけでなく「利用可能な接続を待つ時間」を測るため、これは仕様上起こり得る挙動です。このPRでは、接続がプールに公開されるのを待ってから再利用を検証するようにしています。プロダクションコード、メトリクスのタグ、HTTP/1.1 / HTTP/3 の扱いは変更されません。

#133670 Fix ILVerify validation of interface MethodImpl bodies

@pkuyo・GitHub・area-Tools-ILVerification

ILVerifyにおけるインターフェース MethodImpl ボディの検証を修正するPRです(Fixes #133500)。

  • インターフェース解決の前に、非virtualなインスタンス MethodImpl ボディを拒否するようにしました。解決結果がvirtualな基底メソッドを返すことで、不正なマッピングが隠れてしまう問題への対処です。
  • staticインターフェースメソッドについては静的リゾルバを使用し、有効な非virtual実装を許容します。
  • 回帰テストを追加しています。

#131826 [APX] Add Jmpabs support.

@DeepakRajendrakumaran・GitHub・area-CodeGen-coreclrcommunity-contributionapx

AMD64上のvirtual call stubに、Intel APX(Advanced Performance Extensions)のJMPABS命令(D5 00 A1 + 8バイトアドレス)のサポートを追加するPRです。従来の mov rax, imm64; jmp rax による64ビット絶対ジャンプを JMPABS に置き換え、スタブサイズ縮小と命令フェッチ効率の改善を狙っています。 実行時に IsJmpAbsAvailable()(InstructionSet_APX の有無)で判定し、APX非対応環境では従来のエンコードにフォールバックします。 なお、当初含まれていたJITエミッタ側の変更は、レビューフィードバックにより取り下げられています。

2026年10月12日 (46 PRs)うち Bot 25 件 この日のページ →

#135629 JIT: Simplify ReadUtf8 immutable data extraction

@PaulusParssinen・GitHub・area-CodeGen-coreclrcommunity-contribution

JITの ReadUtf8 展開処理において、不変データ(immutable data)の抽出ロジックを GetImmutableDataFromAddress に統合して簡素化するPRです。ReadUtf8 展開内の「RVAバッキングされた入力」に関する既存のTODO風コメントにも対応しています。作成者は UTF8EncodingSealed.GetByteCount を定数/不変入力に対してintrinsic化する検討(#102246)の過程で、assertionpropsで定数入力長の畳み込みに使われている GetImmutableDataFromAddress に気づき、これを流用したとのことです。

#135619 Fix duplicate browser library-test publish symbols

@akoeplinger・GitHub・area-Infrastructure

ブラウザ向けライブラリテストの publish 時に、プロジェクト参照由来の PDB とランタイムパック由来の PDB が重複して残り、NETSDK1152 が発生する問題の修正です。publish 対象として選択された DLL に対応するシンボルのみを使用するようにしています。

作成者によれば、net12 への retarget で顕在化したとのことです。bootstrap SDK に net12 の pruning データがないため、推移的なライブラリのプロジェクト参照が残るのに対し、net11 では pruning により除去されます。修正自体は TFM に依存せず、重複入力の発生経路にかかわらず publish シンボルを選択済み DLL に合わせる内容です。

#135614 [release/10.0] Fix Dragon4 shortest formatting for exact powers of two

@tannergooding・GitHub・Servicing-approvedarea-System.Numerics

Number.Dragon4 が2の累乗の厳密値を判定する際、1U << TNumber.DenormalMantissaBits の 1U が32ビットであるため、double(仮数部52ビット)ではシフト量がマスクされ、マージン判定が誤っていました。これにより 2^-25 や 2^-958 などで最短ラウンドトリップ書式化の桁数が不足していました。リテラルを 1UL に拡げて修正しています。.NET 10 でのリグレッションの release/10.0 向けバックポートです(main PR: #131131)。

#135608 Give the nested process chain in ProcessWaitingTests depth-proportional wait budgets

@pcshrosbree・GitHub・area-System.Diagnostics.Processcommunity-contribution

ProcessWaitingTests.WaitChain / WaitAsyncChain は4段の RemoteExecutor プロセスチェーンを起動しますが、全階層が同一の WaitInMS で待機していました。ルートの待機は4プロセス分の起動・処理・終了を含むため、葉と同じ予算では不足し、x86 Checked レーンで約30秒のタイムアウトによる失敗が発生していました(#118977)。本PRでは、各階層の待機時間を「その下にあるプロセス数」に比例させるよう変更します(葉 1×、2×、3×、ルート 4×)。テストコードのみの変更で、製品コードは変更されていません。

#135605 JIT: exclude handles from numeric range reasoning

@EgorBo・GitHub・area-CodeGen-coreclr

JIT において、リロケーションが必要なハンドル(relocatable handle)を数値範囲・符号の推論から除外する修正です。#135484 で VN(Value Numbering)によるハンドル比較の畳み込みは止められましたが、ARM32 ではアサーション伝播(assertion propagation)中に、コンパイル時のハンドル用プレースホルダー値を使って比較が畳み込まれてしまう問題が残っていました。本 PR はこの経路を塞ぎます(Fixes #135604)。

#135572 Pass CMAKE_ICU_DIR headers to System.Globalization.Native configure checks

@caraioniurie47・GitHub・area-System.Globalizationcommunity-contribution

Unix系ターゲット(Android/Apple/Browser/WASI以外)で CMAKE_ICU_DIR を指定してビルドした際、System.Globalization.Native の configure チェック(HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS、HAVE_UCOL_CLONE)が CMAKE_ICU_DIR 配下のICUヘッダーを参照せずにコンパイルされる問題を修正します。

従来は ${CMAKE_ICU_DIR}/include が include(configure.cmake) の後でしか追加されなかったため、次の問題が生じていました。

  • システムにICUヘッダーがない場合、両チェックが "file not found" で失敗し、config.h に両方とも0が設定される(ビルド自体は成功する)
  • システムICUヘッダーがある場合、CMAKE_ICU_DIR ではなくシステム側のヘッダーでチェックされる
  • HAVE_UCOL_CLONE が0かつ STATIC_ICU 定義時(LOCAL_BUILD 構成)、pal_collation.c が ICU 78.3 で非推奨の ucol_safeClone を呼び、-Werror でビルドが失敗する
  • HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS が0の場合、pal_calendarData.c は super-short の曜日名に UDAT_STANDALONE_NARROW_WEEKDAYS を使用する

#135569 Treat a missing /etc like a missing /etc/resolv.conf in NetworkInformation

@caraioniurie47・GitHub・area-System.Netcommunity-contribution

Linuxで /etc ディレクトリが存在しない場合に NetworkInterface.GetAllNetworkInterfaces() が DirectoryNotFoundException をスローする問題を修正します。/etc/resolv.conf の読み取りを共通ヘルパー StringParsingHelpers.ReadResolvConfFile に集約し、ファイル未存在・ディレクトリ未存在・アクセス拒否のいずれの場合も null を返す(DNS情報なしとして扱う)ようにしました。公開APIの変更はありません。

#135546 [release/10.0] Fix software EH memory leak on Unix

@janvorli・GitHub・Servicing-approvedarea-VM-coreclr

release/10.0 向けの #135290 のバックポート。Unix 上で、ネイティブランタイムコードからスローされたソフトウェアマネージド例外に対して DispatchManagedException が実行されると、動的に確保された CONTEXT と EXCEPTION_RECORD が解放されずリークする問題を修正します(amd64 で約 3400 バイト)。マネージド例外処理側が、動的確保されたコンテキスト/例外レコードの所有権を引き継いでいないことが原因です。.NET 9 の新しい例外処理(#88034)で混入したリグレッションで、顧客からの報告 (#135234) に基づく修正です。

修正内容は、ソフトウェア例外処理におけるコンテキストの所有権の扱いを、従来からあるハードウェア例外処理と同じ方式に揃えるものです。

#135541 [release/11.0] Fix software EH memory leak on Unix

@janvorli・GitHub・Servicing-approvedarea-VM-coreclr

Unix上で、ネイティブランタイムコードからスローされるソフトウェアマネージド例外(DispatchManagedException経路)において、動的に確保された CONTEXT と EXCEPTION_RECORD が解放されず、メモリリークする問題の修正です。マネージド例外処理側が、動的確保された context / exception record の所有権を引き取っていなかったことが原因です。これは #135290 の release/11.0 へのバックポートです。

#135516 cDAC: fix inverted IncludeAvailableToProfilers check in Loader_1.GetModuleHandles

@pcshrosbree・GitHub・community-contributionarea-Diagnostics-cdac

cDAC の Loader_1.GetModuleHandles において、IncludeAvailableToProfilers フラグの判定が反転していた不具合を修正します。ネイティブの AppDomain::AssemblyIterator::Next_Unlocked は、アセンブリが profiler 通知済みで、かつ呼び出し側が kIncludeAvailableToProfilers を渡した場合のみ loaded/loading チェックをスキップします。cDAC は !iterationFlags.HasFlag(...) と逆の条件を使っていました。

// 修正の趣旨(概念)
// 誤: !iterationFlags.HasFlag(AssemblyIterationFlags.IncludeAvailableToProfilers)
// 正: iterationFlags.HasFlag(AssemblyIterationFlags.IncludeAvailableToProfilers)

#135481 [wasm] Keep larger field alignment for Align8 auto-layout structs

@lewing・GitHub・arch-wasmarea-ReadyToRun

FEATURE_64BIT_ALIGNMENT ターゲット(ARM32 と wasm)で、MethodTableBuilder::HandleAutoLayout が Align8 候補の auto-layout 値型のアラインメントを、フィールドがそれ以上を要求する場合でも常に 8 に固定していた問題を修正します。wasm では Int128/UInt128、Decimal128、Vector128<T> が 16 を要求するため、ランタイムは 8、crossgen2 は 16 と食い違っていました。

修正後は max(8, 最大フィールドアラインメント) を使用します(GCポインタを含む場合は従来どおり 8)。これは crossgen2 の MetadataFieldLayoutAlgorithm.ComputeAutoFieldLayout と同じ規則です。構造体内のフィールドオフセットは変わらず、構造体自身のアラインメント(末尾パディングや他の型のフィールドとして配置される位置)のみが変わります。ARM32 では 8 を超えるフィールドがないため挙動は変わりません。

#135478 [release/10.0] Handle TAR uid/gid values larger than int.MaxValue

@rzikm・GitHub・Servicing-approvedarea-System.Formats.Tar

GNU tar形式では int.MaxValue より大きい UID/GID が表現され得ますが、System.Formats.Tar でそのようなアーカイブを処理すると OverflowException がスローされていました。本PRは release/10.0 へのバックポートで、そのような値を読み込めるようにし、書き込み時もラウンドトリップできるようにします。main ブランチの修正 #134850 に対応します。

PR記載によると、現在知られているUNIXプラットフォームでは UID/GID は32ビット値として定義されているため、オーバーフロー時に負の数へ折り返すことを許容することで、有効なユースケースがラウンドトリップ可能になるとのことです。

#135474 Fix fat calls in native AOT/WASM

@MichalStrehovsky・GitHub・arch-wasmarea-CodeGen-coreclr

Native AOT/WASM における fat call(fat function pointer を介した呼び出し)の修正です。RyuJIT 側の変更のみで対応でき、コンパイラ/CoreLib 側には CoreRT リポジトリの WASM プロトタイプ由来の実装がすでに残っているため追加変更は不要とのことです。

作成者は、#135414 の reprozero.cs に fat call を追加して、fat call が行えることを確認したと説明しています。

#135408 Improve parallel connect failure diagnostics

@wfurt・GitHub・area-System.Net.Sockets

SocketAsyncEventArgsTest.Connect_Parallel_FailsOver テストの失敗時診断情報を強化するPRです。#134107 で追跡されている断続的な失敗について、同期失敗・非同期失敗・IPv4-mapped IPv6 の挙動を区別できるようにすることが目的です。成功時のテスト動作は変更しません。

#135382 JIT: Restore insertps source-lane fold for floating-point inserts

@Ruihan-Yin・GitHub・area-CodeGen-coreclrcommunity-contribution

x64/x86 JITのlowering(lowerxarch.cpp)で、Insert(v, CreateScalarUnsafe(v2.GetElement(n)), imm) を単一の insertps(count_s でレーンnを選択)に書き換える最適化(#130422)が機能しなくなっていた問題の修正です。

#130444 以降、ユーザーが別のHW intrinsicである浮動小数点の CreateScalarUnsafe ノードが削除されるようになりました。オペランドはユーザーより先にlowerされるため、Insertのlowering時点ではラッパーが常に消えており、op2が CreateScalarUnsafe であることを前提とした条件が成立しませんでした。その結果、insertps の前に冗長な movshdup / unpckhps / shufps が残っていました。

本PRでは、CreateScalarUnsafe を介さない「素の要素抽出」もop2として認識するようにして、このfoldを復活させています。

#135376 [release/10.0] Preserve module initialization across ReadyToRun inlining

@AaronRobinsonMSFT・GitHub・Servicing-approvedarea-ReadyToRun

release/10.0 へのバックポートです(main の #134359 が元)。Composite ReadyToRun では、別アセンブリを有効化(activation)する呼び出しがインライン化で消え、そのモジュールの module initializer が実行されない場合があります。この修正で、クロスモジュールインライン時にも activation の依存関係が保持されるようになります。

報告されたケースでは、module initializer 内の UnsafeAccessor による書き込みが観測されず、private static フィールドが未設定のままになります。.NET 10 でも再現することが元の報告で確認されており、リグレッションではありません。

#135375 [release/11.0] Preserve module initialization across ReadyToRun inlining

@AaronRobinsonMSFT・GitHub・Servicing-approvedarea-ReadyToRun

Composite ReadyToRun(R2R)でクロスモジュールのインライン化により、他アセンブリをアクティベートする呼び出しが消えてしまい、そのモジュールのモジュール初期化子が実行されない問題の修正を、main の #134359 から release/11.0 へバックポートするものです。

具体的には以下の3点を行っています。

  • クロスモジュールのインライン化時に、アクティベーション依存関係を保持する
  • バージョンバブル外にあるグローバルモジュール型の安定トークンを許可する
  • RVA静的フィールドを解決する前に、宣言元モジュールをアクティベートする

報告されたケースでは、モジュール初期化子内で UnsafeAccessor を使って行った書き込みが観測されず、private static フィールドが未設定のままになっていました。.NET 10 と .NET 11 RC1 の両方で再現し、リグレッションではありません。

#135359 Throw CborContentException for dangling tag at end of root-level sequence

@MuhammadBilal64・GitHub・area-System.Formats.Cborcommunity-contribution

System.Formats.Cbor の CborReader において、AllowMultipleRootLevelValues を有効にしたルートレベルのシーケンスが「後続のデータ項目を持たないタグ」で終わる場合に、従来は Finished を返していましたが、CborContentException をスローするように変更します。単一バッファのリーダーと、インクリメンタル(SlideData)のリーダーの両方に適用され、等価な状態では同じ例外型が発生するようになります。

#135356 Await chained key computation in AsyncEnumerable ordering

@Copilot・GitHub・area-System.Linq

AsyncEnumerable の ThenBy / ThenByDescending において、連鎖したソーターのキー計算タスクが await されず破棄されていた問題の修正です。セレクターが非同期に中断(suspend)すると、未初期化のキーを読んだままソートされる可能性があり、またセレクターの例外が無視される場合がありました。修正では、後続ソーターのキー計算を await してからソートするようにしています。

if (_next is not null)
{
    await _next.ComputeKeysAsync(elements, count, cancellationToken);
}

#135261 [release/10.0] Fix operator precedence bug in SystemNative_FSync causing silent fsync errors

@Copilot・GitHub・Servicing-approvedarea-System.IO

SystemNative_FSync(pal_io.c)における演算子優先順位のバグを修正し、Unix上で fsync/fcntl(fd, F_FULLFSYNC) のエラーが無視されていた問題を解消するバックポート(main への #124725 を release/10.0 へ)です。このバグにより、SMBネットワーク共有上でファイルの破損・切り捨てが発生し得ました。修正後は FileStream.Flush(flushToDisk: true) が ENOSPC や EIO などのストレージエラーを例外として伝播します。

Bot PRs (25 PRs)

2026年10月11日 (4 PRs) この日のページ →

#135514 Reduce Kerberos fuzzer duplication

@MihaZupan・GitHub・area-System.Net.Security

#133606 で追加された Kerberos PAC パーサー向けのファジング基盤を簡素化するPRです。PAC パーサーを DotnetFuzzing に直接リンクし、別途用意されていたヘルパープロジェクトを削除しました。あわせて、ハーネスの起動コードをインストルメントせずにパーサー部分のみを対象にするため、型名プレフィックスによるフィルタリングを追加しています。

#135488 Track reg save locations via setRegisterLocation

@am11・GitHub・community-contributionarea-NativeAOT-coreclr

NativeAOTのUnix向けREGDISPLAYシムを、縮小版のllvm-libunwindパッチに合わせて調整するPRです。setRegisterはIP/SPの値のみを扱い、レジスタの保存場所はsetRegisterLocation経由で渡される方式になります。あわせて以下の対応が行われています。

  • stepWithDwarfにはCFI行比較をパッチする代わりに pc + 1 を渡す
  • upstreamのUnwindCursorコンストラクタを使用する
  • テンプレート化されたfindUnwindSectionsを呼び出す

#134745 Array.Create<T> with default value

@DanSamek・GitHub・area-System.Runtimecommunity-contribution

Array クラスに、指定した値で初期化された配列を作成する新しい公開API Array.Create<T>(デフォルト値指定版)を追加するPRです。Issue #121477 を修正します。これまで new T[n] の後に Array.Fill や手動のループで初期化していた処理を、この新APIで置き換えられるようになります。あわせて、リポジトリ内の既存コード(主にテスト)で同様の初期化パターンをこのAPIに置き換えています。

※提供された情報には新APIの正確なシグネチャは含まれていないため、記載していません。

2026年10月10日 (12 PRs)うち Bot 2 件 この日のページ →

#135548 Update MsQuic to 2.5.11 to unblock release/10.0 builds

@Copilot・GitHub・area-Infrastructure

release/10.0 のビルドをブロックしている NuGet 監査エラー(NU1904)を解消するため、共有の MsQuic バージョンを 2.5.10 から修正版の 2.5.11 に更新します。MsQuic.OpenSSL 2.5.10 には、致命的な証明書検証の脆弱性 GHSA-w5f4-fx9m-m4q7 が報告されています。この脆弱性により、OpenSSL バックエンドでは TLS のホスト名検証が不適切となり、サーバーのなりすましが可能になります。Schannel は影響を受けません。

#135534 [release/10.0] OpenSSL 4 support

@vcsjones・GitHub・Servicing-approvedarea-System.Security

release/10.0 に OpenSSL 4.0 対応をバックポートするPRです。.NET 11 の #122744、#125470、#125687 を概念的にバックポートしたものですが、.NET 11 で OpenSSL 1.0.x / 1.1.0 のサポートが削除されたため、そのままでは適用できず再実装されています。変更は最小限に絞られています。

背景として、OpenSSL 4.0 のみを搭載するシステム(Ubuntu 26.10、Fedora 45 など、搭載予定のディストリビューション)では、これらの変更がないと .NET 10 が動作しません。

#135486 JIT: copy large local structs through their address when decomposing

@EgorBo・GitHub・area-CodeGen-coreclr

JITのLowering段階で、GC参照を含む構造体のコピーを個別のストアに分解する際、ローカル変数のソースを LCL_FLD ノード経由で読み取っていました。LCL_FLD のオフセットは16ビットに制限されているため、64 KiBを超える構造体ではオフセットが折り返され、誤ったデータを読み取って64 KiB以降のフィールドが欠落していました(Checkedビルドではアサート)。

本PRでは、ローカルのフィールドをすべて LCL_FLD としてエンコードできない場合(IsValidLclAddr が偽の場合)、ローカルのアドレスを一度取得し、そのアドレス経由で各部分をロードするよう修正しています。これは間接ソースに対して既に使われているパスと同じです。

#135485 JIT: model the signed Log2 fallback as throwing

@EgorBo・GitHub・area-CodeGen-coreclr

符号付きの int.Log2 / long.Log2 は x < 0 ? INTRINSIC(Log2, x) : lzcnt-based result としてインポートされ、フォールバック側のノードは後に例外をスローするマネージド呼び出しへ書き換えられます。しかしこのフォールバックノードは手動で GTF_CALL が設定されているだけで、OperExceptions が例外なしと報告し、副作用チェックも本物の呼び出しとしてしか扱わないため、戻り値が未使用の場合にデッドストア除去で ArgumentOutOfRangeException ごと削除されていました。本PRはこのフォールバックを「例外をスローし得る」ものとして扱うよう修正します(JIT内部の修正で、公開APIの変更はありません)。

また、フォールバックを保持するようにしたことで顕在化した fgExpandQmarkStmt の潜在バグ(then側のみのqmarkで、条件を反転しているにもかかわらず then/else の確率が逆のエッジに割り当てられ、then側が稀な場合にプロファイルデータが不整合になる)も合わせて修正しています。

#135484 JIT: preserve relocatable handles when simplifying ordered comparisons

@EgorBo・GitHub・area-CodeGen-coreclr

JITの値番号付け(Value Numbering)において、再配置可能(relocatable)なハンドルを含む符号付き大小比較の定数畳み込みを拒否するよう修正したPRです。コンパイル時のハンドルのプレースホルダは、再配置後の実行時アドレスの順序を保証しないため、符号なし比較や算術演算と同様に畳み込みを拒否します。あわせて、longからintへの VN narrowing によってハンドルVNが通常の数値定数に変換され、この拒否を回避してしまう問題も防止します。同一性に基づく等値比較/null畳み込みは従来どおり維持されます。

#135461 JIT: retain complete metadata of reassociated folded constants

@EgorBo・GitHub・area-CodeGen-coreclr

JITの可換算術演算の再結合(reassociation)において、定数畳み込みの結果として返された定数ノードをそのまま利用するよう変更するPRです。従来は元の定数ノードに値・VN・フィールドシーケンスのみをコピーしていたため、算術演算でハンドルが通常の数値定数に変わった後も、ハンドルフラグなどの古いメタデータが残る可能性がありました。この変更により、再結合された畳み込み定数のメタデータが完全に保持されます。既存の定数畳み込みのリロケーション保護と算術最適化は維持されます。

#135459 JIT: preserve negation of division by the signed minimum

@EgorBo・GitHub・area-CodeGen-coreclr

JITのmorph処理で、符号付き除算の定数除数が「その型の符号付き最小値」である場合に、否定(negation)を除数側へ分配する最適化を行わないようにする修正です。最小値の否定は同じ型では表現できないため、被除数も最小値のとき、結果が -1 から 1 に変わってしまう問題(#133517)を防ぎます。

#135457 JIT: require nonnegative bounds for symbolic range limits

@EgorBo・GitHub・area-CodeGen-coreclr

JITのRangeCheck(境界チェック除去)において、IsVNCheckedBound(チェック済みの境界値)が「負ではない」と暗黙に仮定していた箇所を修正するPRです。シンボリックな範囲の上限を構築する際に、境界が非負であることを要求するようにし、境界が負になり得るケースで誤って境界チェックが除去される正しさ(correctness)の問題を修正します。

#135289 Write the managed ilasm PDB to a separate file, as native ilasm does

@pcshrosbree・GitHub・area-ILTools-coreclrcommunity-contribution

マネージド版ilasm(src/tools/ilasmのC#実装)が、ネイティブilasmと同様にPDBを別ファイル(<output>.pdb)へ書き出すよう変更するPRです。主な変更点は次の3点です。

  • -DEBUG / -PDB 指定時、PDBはイメージに埋め込まず<output>.pdbに出力します。
  • -DEBUGも-PDBも指定せず.lineだけを使った場合は、PDBもデバッグディレクトリも生成しません(.lineのパースと検証は継続)。
  • CodeViewパスは常にassembly.pdbではなく、PDBファイルのフルパスになります。-DET指定時のみファイル名(例: Min.pdb)だけを記録し、ディレクトリが違っても同一バイト列になる決定論性を確保します。

デバッグディレクトリはCodeView → PdbChecksum(PDBのid 20バイトをゼロ化したSHA-256)→(-DET時)Reproducibleの順で、ネイティブと同じ構成です。PDBがない場合は、ManagedPEBuilderが追加するReproducibleのみのディレクトリをILAssemblerPEBuilderで消去し、デバッグディレクトリを持たないイメージにします。

#134384 Serialize process-wide memory barriers under Rosetta

@agocke・GitHub・area-System.Threadingos-macos

macOS上でx64プロセスがRosetta下で動作している場合に、Appleのプロセス全体メモリバリア(Interlocked.MemoryBarrierProcessWideの実装)の呼び出しを直列化するPRです。Rosetta下ではthread_get_register_pointer_valuesを並行して呼ぶと、変換されたx64スレッド状態の再構築中にデッドロックが発生します(単独の再現コードで5回中5回ハング)。ネイティブarm64およびIntel macOSの動作は変更されません。#133797で報告された並行バリアのハングに対応するもので、別件のraw forkとの相互作用に対するpthread_atforkハンドラは意図的に追加していません。

2026年10月09日 (29 PRs)うち Bot 4 件 この日のページ →

#135517 Pass CLR_CROSS_COMPONENTS_BUILD as a separate -cmakeargs

@pcshrosbree・GitHub・area-Infrastructurecommunity-contribution

CLR_CROSS_COMPONENTS_BUILD フラグを、ユーザー指定の CMakeArgs に文字列連結する方式から、MSBuildプロパティ ClrCrossComponentsBuild=true を経由して runtime.proj が独立した -cmakeargs として渡す方式に変更します。

修正前は CMakeArgs=$(CMakeArgs) -DCLR_CROSS_COMPONENTS_BUILD=1 と連結されていたため、Windows(build-runtime.cmd)ではクォートされた値が1つのCMake引数として扱われ、-cmakeargs -DCLR_PROBE_NOOP=1 を指定すると CLR_PROBE_NOOP の値が 1 -DCLR_CROSS_COMPONENTS_BUILD=1 になり、CLR_CROSS_COMPONENTS_BUILD が定義されませんでした。Linuxでは build-commons.sh が eval で再解析するため問題は顕在化していませんでした。

#135480 Skip test135234 where working-set monitoring is unsupported

@radekdoulik・GitHub・area-Infrastructure

Process.GetCurrentProcess() が未サポートの Browser/WASI、および WorkingSet64 が PlatformNotSupportedException を投げる iOS/tvOS で、回帰テスト test135234 をスキップするようにしました。#135290 で追加された回帰テストにより発生していた Browser/Wasm インタプリタでの失敗を修正します。

Boolean の入力パターンとネイティブのワーキングセットリーク検証は変更されていません。Desktop、MacCatalyst、Android でのテストカバレッジは維持されます。プロジェクト設定の変更もありません。

#135470 [cDAC] Test entry-point MethodDesc resolution

@pcshrosbree・GitHub・community-contributionarea-Diagnostics-cdac

#135450 のフォローアップとして、cDAC(Contract Data Access Component)における entry-point から MethodDesc への解決処理に対するユニットテストを追加するPRです。vtableの各スロットは NonVirtualEntry2MethodDesc を経由して解決されますが、その非ポータブルなパスや、ValidateMethodDescPointer における temporary entry point のチェックにはテストカバレッジがありませんでした。このため、該当ロジックを壊してもテストが全て通る状態でした。本PRはテストのみの追加です。

#135454 [release/8.0-staging] Fix Duplicate ownership state machine under concurrency for NCrypt handles

@bartonjs・GitHub・Servicing-approvedarea-System.Security

release/8.0-staging への #130804 のバックポート。NCrypt ハンドル(SafeNCryptKeyHandle 等)の「重複所有(Duplicate ownership)」状態機械が、複数スレッドが同じキーオブジェクトを初めて同時に使用した際のレース条件で不正な状態に入る問題を修正します。 不正な状態に入ると、ファイナライズ時に ObjectDisposedException が発生し、最悪の場合プロセスが異常終了します(CI で assert により検出された #130760 と同一の問題と報告されています)。 修正は、レースの影響を受けるコードを lock で囲むという単純なものです。最初の使用が完了した後の並列アクセスは、もともとこのレースの影響を受けません。

#135452 Wait for EE startup before finalizer managed execution

@davidwrighton・GitHub・area-VM-coreclr

専用ファイナライザースレッドが、マネージドのワーカーに入る前にEE(実行エンジン)の起動完了を待つように変更します。CoreLibの有効化は起動完了の十分な同期点ではなく、その後に共有静的変数やスレッド静的変数の基盤が初期化されます。その間にファイナライザースレッドが動作し得ます。GC.RunFinalizers はファイナライズ対象を確認する前に Thread.CurrentThread にアクセスするため、起動途中で競合が発生し得ました。

修正後は、HasStarted() とバックグラウンドスレッド登録の後に、プリエンプティブGCモードで EnsureEEStarted() を呼び出します。EE起動はスタートアップロックを保持したままファイナライザースレッドを作成するため、この呼び出しは新たなロードを開始せず、既存の初期化の完了を待ちます。起動が利用不可または失敗している場合は、HRESULTをログに記録し、マネージド実行をスキップして、ファイナライザーのシャットダウン完了を通知します。

#135450 Consolidate cDAC entrypoint MethodDesc resolution

@rcj1・GitHub・area-Diagnostics-cdac

cDAC(Contract Data Descriptor Reader)におけるエントリポイントから MethodDesc を解決する処理を統合するリファクタリングです。RuntimeTypeSystem コントラクトが ExecutionManager.NonVirtualEntry2MethodDesc を経由して MethodDesc を解決するよう変更し、portable 専用だった PrecodeStubs コントラクト(PrecodeStubs_2)を削除しています。

#135447 Fix NativeImageEagerFixups lock ordering

@davidwrighton・GitHub・area-VM-coreclr

R2R(ReadyToRun)コンポジットのテスト経路で、CrstNativeImageEagerFixups を保持したまま CrstAppDomainCache を取得するケースがありました。この依存関係が CrstTypes.def に記述されていなかったため、Checked ビルドで CRST(Critical Section)のレベル違反が報告されていました。

CrstNativeImageEagerFixups を CrstAppDomainCache および CrstGlobalStrLiteralMap より前に取得されるロックとして宣言し、crsttypes_generated.h を再生成することで、ロック順序の不整合を解消しています。

#135421 JIT: Fold unsigned constant range tests

@EgorBo・GitHub・area-CodeGen-coreclr

JITのoptOptimizeBoolsにおける定数範囲テストの畳み込み(range folding)を、符号なし(unsigned)比較にも拡張するPRです。これにより、n is >= '0' and <= '9' のようなパターンが、2回の比較・分岐ではなく「減算+1回の比較」に変換されます。Closes #135418。

bool Pattern() => n is >= '0' and <= '9';

x64のコード生成は以下のように変化します(作成者提示)。

-       mov      ecx, dword ptr [rcx+0x08]
-       cmp      ecx, 48
-       jae      SHORT G_M53568_IG05
-       xor      eax, eax
-       ret
-G_M53568_IG05:
-       cmp      ecx, 57
+       mov      eax, dword ptr [rcx+0x08]
+       sub      eax, 48
+       cmp      eax, 9
        setbe    al
        movzx    rax, al
        ret
-; Total bytes of code: 21
+; Total bytes of code: 16

#135420 Reintroduce SmtpClient.SslOptions for TLS configuration

@rzikm・GitHub・area-System.Net

SmtpClient に TLS 設定用の SslOptions プロパティを再導入する変更です。#134919 の機能を、CI を大きく壊したため revert した #135370 の後に復活させるものです。

元 PR のマージ後のテスト失敗は、#133174 の並行する変更が原因でした(元 PR の CI を再実行せずに main に取り込まれたため)。本 PR では、証明書検証コールバックに依存するテストで TLS セッション再開(resumption)を無効化し、コールバックが確実に実行されるよう修正しています。

#135419 Upgrade gh-aw to v0.89.21

@vitek-karas・GitHub・area-skills

GitHub Agentic Workflows (gh-aw) を v0.86.2 から v0.89.21 へアップグレードし、6つのagenticワークフローのlockファイルとaction/containerキャッシュを再生成するPRです。リポジトリ固有のバージョン上書きは廃止し、gh-aw既定の依存バージョンを採用しています。MCP Gatewayおよび holistic-review のCLI proxyは v0.4.9 から v0.4.25 に更新されています。

#135410 Clarify async validation XML documentation

@ViveliDuCh・GitHub・area-System.ComponentModel.DataAnnotations

非同期のDataAnnotations検証と、非同期のMicrosoft.Extensions.Optionsバリデータに関するXMLドキュメントコメントを明確化・拡充する、ドキュメントのみの変更です。ランタイムの動作やAPIシグネチャの変更は含まれません。 同期フォールバック、ディスパッチ、キャンセル、例外、並行性に関するガイダンスを追記し、DataAnnotationsからOptionsへのブリッジおよびOptionsバリデーションのソースジェネレーターのコメントも補完しています。 DataAnnotations側の更新は dotnet/dotnet-api-docs#13101 と整合しています。Microsoft.Extensions.Options側のコメントはソース管理で、通常のAPIリファレンスのインポート処理で反映されます。

#135380 Optimize Wasm comparisons against zero

@davidwrighton・GitHub・area-CodeGen-coreclr

Wasm向けJITで、整数の等価/非等価比較においてゼロとの比較を最適化するPRです。ゼロ定数オペランドをcontainedにし、「ゼロ定数 + 汎用の等価命令」の代わりに i32.eqz / i64.eqz を直接出力します。また、結果が br_if に直接渡される場合の冗長な i32 != 0 正規化を削除します。

比較結果は引き続き0または1に正規化されます。そのため非等価の値は eqz を2回使う形になり、条件に合致する i32 != 0 の分岐のみ元の値を br_if が直接消費します。この直接消費は i32 に限定され、i64 はWasmの分岐条件が i32 を要求するため i64.eqz を引き続き使用します。

#135302 Support GetMethod with genericParameterCount in System.Reflection.Context

@caraioniurie47・GitHub・area-System.Reflectionlinkable-frameworkcommunity-contribution

CustomReflectionContext でマップされた型に対する Type.GetMethod の genericParameterCount を受け取るオーバーロードが、GetMethodImpl(string, int, ...) の未実装により NotSupportedException を投げる問題を修正します。GetMethodImpl を(個数なしで)オーバーライドしていた3つの型クラスに、このオーバーロードのオーバーライドを追加しています。

#135286 Fix Delegate.Method reflection cache pollution for private generic-base methods

@Copilot・GitHub・area-System.Reflection

Delegate.Method を、ジェネリック基底クラスの private メソッドを指すオープンデリゲート(open delegate)に対して読み取ると、Checked CoreCLR では assert が発生し、Release では派生型のリフレクションキャッシュ経由でそのメソッドが露出してしまう問題の修正です。 修正後は、デリゲートの第1引数に由来する派生型ではなく、そのメソッドが属する正確なジェネリック基底のインスタンス化に対してメソッドを解決します。

#135233 Remove support for rollForwardOnNoCandidateFx and applyPatches

@elinor-fung・GitHub・breaking-changearea-Host

従来の framework 解決設定である rollForwardOnNoCandidateFx と applyPatches のサポートを削除します。あわせて、roll-forward の優先順位処理を「最も優先度の高い設定を先にチェックする」方式に単純化しました(従来は最も低い優先度の設定から始めて、より高い設定で上書きしていく方式)。

Resolves #131611。

#135140 [cDAC][wasm] Continue stack walks from a TransitionFrame into its R2R caller

@lewing・GitHub・area-Diagnostics-cdac

WASM上でcDACのIStackWalkが、R2Rコードがトランジションヘルパー(例: WasmR2RToInterpreterThunk → ExecuteInterpretedMethodWithArgs_PortableEntryPoint)経由でインタプリタに入った場合に、InterpreterFrameから次の明示的Frameまでの間のR2Rフレームを取りこぼす問題を修正します。ヘルパーはTransitionBlock.m_StackPointerにR2R呼び出し元のリニアスタックポインタを記録し、m_ReturnAddressを0のままにすることがありますが、cDACはこれを扱えず、生の戻りアドレス(0)とTransitionBlock末尾を使っていたため、エラーなくフレームが欠落していました。ネイティブ側(GetWasmVirtualIPFromStackPointer、TransitionFrame::GetSP等)と同じ挙動に揃え、TransitionFrameからR2R呼び出し元へスタックウォークを継続します。

#135115 Emit pseudoattributes as metadata in managed ilasm

@jkoritzinsky・GitHub・area-ILTools-coreclr

マネージド版 ilasm(src/tools/ilasm)に、ネイティブ版 ilasm が持つ「擬似カスタム属性(pseudoattributes)」のサポートを移植する PR です。一部の属性は通常のカスタム属性としてではなく、メタデータとして直接出力される必要があります。本 PR では該当する属性をデコード・検証し、対応するメタデータのフラグ、レイアウト、インポート情報、マーシャリング記述子として出力します。

#135073 Simplify metadata imports for single-module assemblies

@davidwrighton・GitHub・area-VM-coreclr

単一モジュールのアセンブリを前提に、メタデータのシグネチャ/型インポート用ヘルパーを簡素化するPRです。インポートヘルパーが「1つのソースモジュールと1つのデスティネーションモジュール」のみを扱う形になり、到達不能なマルチモジュール用のパスや ModuleRef 作成パスが削除されました。公開メタデータAPIのシグネチャは維持されますが、従来のアセンブリ/ハッシュ関連パラメータは無視され、AssemblyRef.HashValue は空のBLOBとして出力されます。

#134623 Deduplicate identical Wasm method bodies

@davidwrighton・GitHub・area-ReadyToRun

Wasm R2Rイメージでは、コンパイルされた全メソッドごとに個別のWasmモジュール関数定義が出力されていました。これを改め、シグネチャ・関数本体・リロケーションが完全に一致する場合は、1つの正規(canonical)なモジュール関数定義を共有する重複排除を導入します。

  • 各マネージドメソッドは、固有のR2R runtime-functionインデックスとelement-tableスロットを維持します(ポータブルエントリポイント、call_indirect、スタックウォーク、MethodDesc検索のメソッド同一性を保持)。
  • 複数のtableスロットが1つの正規モジュール関数を参照でき、直接呼び出しは正規関数インデックスを対象にします。
  • 重複排除はR2R WebCILオブジェクトライター内で完結し、NativeAOTのWasmオブジェクトライターでは有効化されません。

#134167 Run some libraries tests in jitstress isas pipelines

@dhartglassMSFT・GitHub・area-Infrastructure-coreclr

CoreCLRのjitstress-isas-*アウターループパイプラインに、ライブラリの一部テストを追加するPRです。これまでJIT stress ISAs用のライブラリテストが存在せず、例えばSystem.Numerics.VectorのテストとjitstressISAsの組み合わせで検出できたはずのバグ(fuzzingで検出)を取りこぼしていました。

ライブラリ全体用のパイプラインを3つ追加するほどの価値はないと判断し、関連性の高い以下のテストのみを既存のISAパイプラインに追加しています。

  • System.Numerics.Vectors
  • System.Numerics.Tensors
  • System.Runtime.Intrinsics
  • System.Linq
  • System.Memory

#133606 Populate RemoteIdentity SID claims from the Kerberos PAC on Unix

@rzikm・GitHub・area-System.Net.Security

Unix上のNegotiate認証(NegotiateAuthentication)で、サーバー側のRemoteIdentityにKerberos PAC(urn:mspac:logon-info)由来のSIDクレームを追加するPRです。WindowsではWindowsIdentityによりユーザー/グループSIDが取得できますが、Unixではgss_display_nameによる表示名のみでした。本PRではGSSAPI経由でPACのlogon-infoを取得・デコードし、GenericIdentityにPrimarySid、PrimaryGroupSid、GroupSidクレームを追加します(SIDはWindows専用のSecurityIdentifierではなく文字列で保持)。

PACは、KDCが発行しない、クライアントが拒否する、Windowsグループを持たないレルムなど、存在しないのが通常のケースもあるため、PACがなくても認証は失敗しません。クレームはGSSAPIが「authenticated」と報告した場合のみ追加され、不正なバッファの場合は例外ではなくクレームなしにフォールバックします。

#133263 Move runtime test build into product jobs

@jkoritzinsky・GitHub・area-Infrastructure

src/tests 配下のランタイムテストについて、これまで独立していた「テストビルドジョブ」と「テスト実行ジョブ」をやめ、プロダクトビルドジョブの中でテストのビルドと Helix への送信まで実行するように変更します。NativeAOT と Mono のレグでは既に同様の構成になっており、一部プラットフォーム(特に macOS)でビルドマシンのキュー待ちが非常に長くなっているため、新規ビルドマシンのキュー待ちを省き、1 台のマシンで処理を完結させることで高速化を狙っています。src/tests のビルドは増えますが、全体では速くなる見込みとのことです。

今回は Pri0 のテストビルドである runtime.yml パイプラインのみが対象で、Pri1 など他のテストビルドは対象外です。最終的には全テストビルドを同様の構成にして、関連インフラを削除することが目標とされています。

#132347 Update guidelines for C++ standard library usage and build against libc++ w/ libstdc++ ABI for linux arm/arm64/x64

@jkoritzinsky・GitHub・area-Infrastructure

Linux の arm/arm64/x64 向けビルドを、サービス可能な C++ 標準ライブラリ(libc++ + libstdc++ ABI)に対してビルドするようパイプラインを更新し、C++ 標準ライブラリ利用に関する CoreCLR のコーディングガイドラインをそれに合わせて改訂する PR です。#101088 および #101773 のフォローアップで、関連する dotnet/dotnet 側の PR は https://github.com/dotnet/dotnet/pull/8608 です。

#131502 docs: remove RuntimeFrameworkVersion dogfooding guidance now that we have VMR daily builds

@Copilot・GitHub・area-Meta

dogfooding(最新ビルドの試用)に関するドキュメントから、RuntimeFrameworkVersion を手動でピン留めする手順を削除するPRです。dotnet/dotnet(VMR)による統一的なランタイムビルドフローが整備されたため、この手順は想定される標準的な方法ではなくなった、というのが作成者の説明です。

2026年10月08日 (25 PRs)うち Bot 2 件 この日のページ →

#135431 JIT: Invalidate DFS annotations before recomputing the DFS tree

@JulieLeeMSFT・GitHub・area-CodeGen-coreclr

JIT コンパイラで fgRemoveBlocksOutsideDfsTree() が DFS ツリーを再計算する際に、DFS 由来のアノテーション(m_loops など)が古いツリーに紐づいたままになり、fgDebugCheckFlowGraphAnnotations() でアサーション失敗を引き起こしていた問題を修正します。DFS ツリー置換前に DFS 派生アノテーションを無効化し、他の DFS 再計算箇所との一貫性を確保する変更です。

#135423 [browser][mono] Fix onDotnetReady callback availability across modules

@maraf・GitHub・arch-wasmarea-Build-monoos-browser

Mono ブラウザランタイムで onDotnetReady コールバックが異なるモジュール間で同期されず、登録されたコールバックが実行されないリグレッションを修正しました。loaderHelpers オブジェクトをコールバック状態の共有ストレージとして使用することで、ローダーと実行時との間でコールバック情報が正しく渡されるようになります。

#135415 Fix x86 GC holes in xchg/rorx and GC suspension of spinning threads

@EgorBo・GitHub・area-CodeGen-coreclr

x86アーキテクチャにおけるGC追跡の不具合を修正するPRです。メモリ/スタック操作におけるrorx/xchg命令後のGCレジスタ追跡の不整合と、スピニングスレッドのGC停止ハング(特にInlinedCallFrameが関連)を解決します。最近のフルinterruptible化により、これまで潜在していた問題が顕在化しました。

#135397 Invoke RunReadyToRunCompiler task for CoreLib crossgen instead of raw Exec

@sbomer・GitHub・area-ReadyToRun

CoreLib の crossgen2 コンパイル呼び出しを、手書きの <Exec> コマンドラインから SDK が PublishReadyToRun で使用する共有 RunReadyToRunCompiler MSBuild タスクに移行しました。非複合パスはバイト単位で同一であることが検証済みですが、複合パス(Apple モバイル)はローカルで検証されていません。

#135381 JIT: Use local's GC type when unspilling a register candidate

@EgorBo・GitHub・area-CodeGen-coreclr

JITのレジスタ再割り当て時にローカル変数のGC型を正しく使用するよう修正しました。GC型でないローカル変数(例:ネイティブint T*)がGC型の用途で再ロードされる際、レジスタが誤ってbyrefとしてマークされ、アンマネージド呼び出し時にGCが不正なアドレスを参照してクラッシュする問題を解決します。特にインライナーがポインタをbyref型のthisとして渡すTerraFXスタイルのパターンで発生していました。

#135373 JIT: Preserve inlining of profiled memcmp fallback

@EgorBo・GitHub・area-CodeGen-coreclr

プロファイル情報に基づいて特殊化されたSequenceEqual呼び出しにおいて、可変長フォールバックのインライン化を保持する修正。従来はオリジナル呼び出しのインライン候補情報をクリアしていたため、サイズ予測が外れた場合にヘルパー呼び出しとベクトルレジスタスピルが発生していた。フォールバックの候補情報と戻り値プレースホルダーを保持し、インライン化前にQMARKを展開することで改善。

#135364 JIT: Preserve null checks in SequenceEqual VN folding

@EgorBo・GitHub・area-CodeGen-coreclr

JITコンパイラの値番号付け(VN)最適化において、SpanHelpers.SequenceEqualの最適化時に、マネージド実装ではnullポインタの逆参照でスローするはずの場合でもtrueを返してしまうバグを修正しました。短い非空シーケンス(0 < length < sizeof(nuint))のnull参照に対してはGT_NULLCHECKを保持し、ゼロ長およびロングバッファのショートカットは維持します。長さが未知でnull参照の可能性がある場合は関数呼び出しを保持し、引数の副作用の評価順序は保証されます。

#135363 JIT: Make GenTree::Compare more conservative around several node types

@EgorBo・GitHub・area-CodeGen-coreclr

JITのGenTree::Compare関数を改善し、ノード比較時に複数の重要なフィールドをチェックするようにしました。特に、異なるフィールドシーケンスを持つ定数ノード(GT_CNS_INT)が誤って等価と判定され、ガード付きデューティ値分岐(GDV)の最適化で重要なパス依存情報が失われる問題を修正しています。Roslyn使用時に_containingTypeと_containingSymbolが同じオフセット(0x38)に存在する場合、異なる型チェック結果が同一視され、誤った最適化が行われていました。

#135337 Fix cached Windows TLS credential lifetime race

@rzikm・GitHub・area-System.Net.Security

Windows SslStreamのハンドシェイク時に、認証情報キャッシュのスキャベンジング処理がキャッシュルックアップ後かつASC/ISC呼び出し前に最後の参照を解放することで発生するObjectDisposedExceptionを修正します。キャッシュヒット時に認証情報参照を取得し、ハンドシェイク完了/失敗時、認証情報置換時、ストリーム破棄時に参照を解放することで競合状態を排除します。キャッシュキーとパブリック認証動作は変更されません。

#135327 Fix assertion (node->GetRegNum() != REG_NA) during LSRA

@dhartglassMSFT・GitHub・area-CodeGen-coreclr

JIT LSRAレジスタ割り当て中に、構造体リターンバッファへの参照とLEA命令間のコピー挿入時にアサーション失敗が発生する問題を修正します。Change #134644で導入されたgcWriteBarrierFormFromTargetAddressのfgAddrCouldBeHeapがコピーを透視できず、NO_REGのLEAから値をコピーしようとした際にアサーションが発生していました。修正はfgAddrCouldBeHeapにLEA除外後のgtSkipReloadOrCopyを追加するもので、動作結果への差分は観察されていません。

#135323 Fix macOS Process hangs caused by stopped children

@steveisok・GitHub・area-System.Diagnostics.Process

macOSにおいて、waitid(WEXITED | WNOHANG | WNOWAIT)が停止した子プロセスを報告する一方でwaitpid(WNOHANG)がそれを回収できない場合、SIGCHLD ハンドラが共有ロックを保持したまま同じ子プロセスを何度も観察し、他のProcess操作がハングする問題を修正しました。回収できない子プロセスが報告された場合、no-progressループを継続するのではなく、すべての追跡対象の子プロセスをスキャンするフォールバックに切り替え、既存の高速パスと非ブロッキングフォールバックを活用します。

#135290 Fix software EH memory leak on Unix

@janvorli・GitHub・area-VM-coreclr

Unix環境でのソフトウェア例外処理(EH)におけるメモリリークを修正。DispatchManagedExceptionが動的に確保されたコンテキストと例外レコードの所有権を取得していなかったため、ExInfoが必要に応じてこれらレコードの所有権を適切に管理するようにしました。

#135282 [release/11.0] Fix hexadecimal float sign round-tripping

@tannergooding・GitHub・Servicing-approvedarea-System.Numerics

カスタム符号を持つ数値のパースと16進浮動小数点フォーマットにおいて、重複する符号プレフィックスの処理を修正しました。パース時は長い方の符号にマッチさせることを優先し、同じ長さの場合はPositiveSignを選択するように改善されています。これにより、フォーマットされたテキストのラウンドトリップが正確に動作するようになります。

#135274 Prevent ZstandardDictionary.Train crashes for small sample sets

@rzikm・GitHub・area-System.IO.Compression

ZstandardDictionary.Trainメソッドが、最初の75%のサンプルが8バイト未満の場合にプロセスをクラッシュさせる問題を修正しました。zstdトレーナーが符号なし整数アンダーフローを引き起こす可能性があったため、マネージコード側で防御的なガードを追加し、不十分なトレーニングデータをIOExceptionとして拒否します。

#135093 [cDAC][wasm] Filter unexpected register slots in non-active frames

@radekdoulik・GitHub・area-Diagnostics-cdac

Wasm GC情報において、非アクティブフレーム内の予期しないレジスタスロットをフィルタリングする修正です。WasmGCInfoTraits.IsScratchRegisterメソッドを更新し、レジスタスロットが存在しないことを強制することで、ネイティブデコーダーのフォールバック動作と一致させます。既存のGC情報デコード、アクティブフレームの動作、エンコーディング定数、およびHAS_INTERRUPTIBLE_RANGESは変更されません。

#134732 Avoid namespace formatting in ILLink analyzer type checks

@tannergooding・GitHub・linkable-frameworkarea-Tools-ILLink

ILLinkのRoslynアナライザーが既知型の検証時に、型名チェック前に不要な名前空間フォーマットを行っていた問題を修正しました。メタデータ名を先に確認して不一致時に名前空間フォーマットをスキップすることで、大規模な生成コンパイルでのパフォーマンスを向上させます。

#134717 Size the RESOLVE_UPDATE_METADATA events in DbgTransportSession::GetEventSize

@pcshrosbree・GitHub・area-Diagnostics-coreclrcommunity-contribution

LinuxおよびmacOSの debugger transport におけるDB_IPCE_RESOLVE_UPDATE_METADATA_*イベントのサイズ計算が欠落していた問題を修正します。プロファイラがSetILFunctionBodyでメソッドに新しいローカル変数を追加した場合、debuggerがそのメソッドのローカル変数を要求すると、デバッグ対象プロセスが不正なメモリを読み取ってSIGSEGVで クラッシュしていました。本修正により、3つのペイロード保有イベント(_1_RESULT、_2)と1つのヘッダーのみイベント(_2_RESULT)をGetEventSizeの switch文に追加することで問題を解決します。

#134418 Avoid building SslStreamCertificateContexts inside Listener in Quic tests

@rzikm・GitHub・area-System.Net.Quic

QUIC テストにおいて、SslStreamCertificateContext の構築をキャッシュ化することで、テスト実行時のオンライン証明書失効確認(AIA ダウンロード)による遅延を排除します。Windows の Schannel では、リーフ証明書のみの設定により MsQuic がマネージド層で AIA ダウンロードを実行し、テストのハンドシェイクタイムアウト(10秒)を超過していました。この PR により、オフライン環境での事前構築コンテキストを QuicTestCollection レベルでキャッシュし、テスト間で再利用することで、AIA リクエストを完全に排除し、ハンドシェイク時間を約12.2秒から44ms に短縮します。

#134221 Remove JsonToItemsTaskFactory

@rainersigwald・GitHub・area-Build-mono

マルチスレッドモードでのMSBuild実行時に非対応だったカスタムタスクファクトリ JsonToItemsTaskFactory を削除し、明示的な入力出力を持つコンパイル済みMSBuildタスクに置き換えました。WASM および Mono コンポーネントマニフェストの JSON 解析機能は、新しく追加された固定タスク実装で代替されます。

#133658 Move custom attribute materialization and invocation to managed code

@jkoritzinsky・GitHub・area-System.Reflectiontenet-performance

カスタム属性の具現化と呼び出し処理をネイティブコード(C++)からマネージドコード(C#)に移行するレイヤー2の改善です。従来のQCallsを廃止し、バウンド済みマネージドBlobリーダーを再利用して、中間データグラフを構築せずにカスタム属性を処理します。プリミティブ/Enum型のコンストラクタ引数はアンボックス状態を保持し、InlineArray4<T>ストレージと必要時のヒープフォールバックを活用します。パフォーマンスは基準実装の0.73~0.82倍の処理時間に改善されました。

#133570 Add load context identifier option for COM and IJW

@elinor-fung・GitHub・area-Host

COMおよびC++/CLI(IJW)ホスティングに対して、System.Runtime.InteropServices.[COM|CppCLI].LoadContextIdentifier設定プロパティを通じてコンポーネントロードコンテキスト(ALC)の指定機能を実装しました。同じ識別子を持つコンポーネントは同一のコンテキストを共有でき、リゾルバーは読み込み順序に基づいて登録されます。分離コンテキストまたはデフォルトコンテキストを使用するコンポーネントは影響を受けません。

2026年10月07日 (27 PRs)うち Bot 2 件 この日のページ →

#135367 Distinguish unmanaged and managed KnownExternFunctions

@MichalStrehovsky・GitHub・arch-wasmarea-NativeAOT-coreclr

WebAssembly向けのAOT(Ahead-of-Time)コンパイラにおいて、外部関数(KnownExternFunctions)の呼び出し規約の定義を、一括してUnmanagedとするのではなく、関数ごとに区別する変更です。RyuJITの期待するシグネチャと実際の生成コードのシグネチャを一致させることが目的です。GCPollの処理で問題が発生したため、マネージド側でスタックポインタパラメータを自動追加できるようにマネージドに変更し、他の関数の要件も監査して対応されています。

#135355 Add Array.GetValue and SetValue overloads taking ReadOnlySpan<int>

@SkyDevLab・GitHub・area-System.Runtimecommunity-contribution

Array.GetValueとArray.SetValueにReadOnlySpan<int>を受け取るオーバーロードを追加します。これにより、多次元配列へのアクセス時にヒープ割り当てを回避でき、stackalloc int[]を活用した高性能なシナリオに対応します。

// 新しいオーバーロード
public object? GetValue(params ReadOnlySpan<int> indices)
public void SetValue(object? value, params ReadOnlySpan<int> indices)

#135351 Format net_ssl_io_cert_validation in TlsSession reject path

@caraioniurie47・GitHub・area-System.Net.Securitycommunity-contribution

TlsSession.SetRemoteCertificateValidationResultメソッドにおいて、証明書検証が拒否された際のAuthenticationExceptionメッセージが正しくフォーマットされていなかった問題を修正します。2つの分岐(_isHandshakeCompleteと_resumeAfterCertValidation)でSR.Formatを使用せずにリソース文字列を使用していたため、メッセージが{0}プレースホルダーのまま出力されていました。修正により、SslStreamと同様にSslPolicyErrorsでリソースをフォーマットするようになります。

#135344 Check CordbType class before accessing its metadata

@Copilot・GitHub・area-Diagnostics-coreclr

CordbType::GetStaticFieldValueメソッドにおいて、m_pClassがnullであるかのチェック前にそのメンバーにアクセスしていた問題を修正します。型の検証とnullチェックをメタデータ参照よりも前に移動することで、無効な型に対するクラッシュを防止し、代わりにE_INVALIDARGを返すようにしました。

#135322 Improve HttpListener NTLM test failure diagnostics

@wfurt・GitHub・area-System.Net.Http

HttpListener NTLM認証テストの診断情報を向上させるため、粗いNtlmHandshakeResult列挙型を、認証状態・HTTPステータス・失敗のハンドシェイク段階を保持する詳細な結果型に置き換えました。既存のextended-protection policy変更時のHTTP 401拒否要件は維持しており、間欠的なテスト失敗(#135190)の原因を特定しやすくしています。

#135321 Skip robust mutexes on OpenHarmony

@springmin・GitHub・area-System.Threadingcommunity-contribution

OpenHarmony プラットフォームが robust mutex API(pthread_mutexattr_setrobust/pthread_mutex_consistent)をサポートしていないため、名前付きミューテックスでこれらのAPI呼び出しをスキップし、共有メモリベースの実装にフォールバックするよう変更します。OpenBSD/Haiku/Appleと同様の条件分岐を追加します。他のプラットフォームへの影響はありません。

#135306 Preserve eager registration for cached managed R2R helpers

@davidwrighton・GitHub・area-ReadyToRun

ReadyToRun (R2R) コンパイラにおいて、キャッシュされたマネージドヘルパーの急速登録依存関係を保持する修正です。ヘルパーのキャッシュヒット時に登録追跡が失われていたため、ランタイムのスタックウォークが不正にフィルタリット関数と判定される問題を解決します。登録依存関係の追跡をキャッシュヒット時にも行うようにし、並列度1および2の両方でSystem.Threading.Thread.PollGCの急速メソッドエントリ登録をテストする回帰テストを追加します。

#135278 Reset SSE event type after an empty event block

@MihaZupan・GitHub・area-System.Net

SSE(Server-Sent Events)パーサーにおいて、event: フィールドを含むがデータがない空のイベントブロック後に、イベントタイプがリセットされずに次のイベントに流用される問題を修正します。HTML仕様に従い、終端の空白行でイベントタイプをリセットし、デフォルトの "message" 型を使用するようにします。id: および retry: の値は保持されます。

#135277 Avoid copying Activity tags and links when sampling

@martincostello・GitHub・breaking-changearea-System.Diagnostics.Activitycommunity-contribution

ActivitySamplingResult.PropagationData が指定されて新しい Activity を作成する際、タグとリンクのコピーをスキップして パフォーマンスを最適化する変更です。特に9個のタグと1個のリンクを含む場合、メモリ割り当てが49~57%削減され、実行時間が45~51%短縮されます。

#135273 Isolate HttpClient certificate validation tests from TLS resumption

@rzikm・GitHub・area-System.Net.Http

TLS再開始(セッション再開)時の証明書検証スキップに対応するため、HttpClientテストを分離します。PR #133174で導入されたTLS再開始のデフォルト動作により、セッションキャッシュが既存接続から生成されると、証明書検証やユーザー検証コールバックが実行されなくなります。このPRは既存のハンドラーヘルパーにallowTlsResumeオプションを追加し、検証に依存するテストでのみ完全ハンドシェイクを要求することで、テストの分離を実現します。公開APIやプロダクトコードの変更はなし。

#135156 Add a CI check that the checked-in wasm CoreCLR call helpers are up to date

@lewing・GitHub・arch-wasmarea-VM-coreclr

WebAssembly向けのChecked-inされたCoreClr呼び出しヘルパーテーブルがマネージドコードと同期しているかをCI検証する機構を追加します。#134978でWASIにFEATURE_PERFTRACINGが有効化された際、テーブルが再生成されず、結果として起動時にGetUnmanagedCallersOnlyThunk: unknown thunkエラーで失敗していた問題に対応します。

#135112 [cDAC] Fix x86 transition-frame stack-pop handling

@max-charlamb・GitHub・area-Diagnostics-coreclr

Windows x86 cDAC(Compact Debugging Access Component)のスタックアンワインド処理で、ExternalMethodFrameがnull MethodDescで構築される際のスタックポップハンドリングの不具合を修正します。MethodDescがnullの場合、ReadyToRun import-slot GCRefMapから取得したスタックポップカウントを使用して正しく調整されるようになり、GC-referenceストレステスト中の間欠的なフレーム不整合(15フレーム中5フレームマッチ、7フレーム不整合)が解決されます。

#135032 Make KillOnParentExit handle Job hierarchy changes on Windows

@adamsitnik・GitHub・area-System.Diagnostics.Process

Windows上でKillOnParentExitプロセス作成時にJob hierarchy(ジョブオブジェクトの階層構造)の変更に対応するよう改善しました。キャッシュされたJob Objectが互換性を失った場合に新しいJob Objectで再試行し、アクティブな子プロセスを保持している前のJobを保持しながら、非アクティブなJobを適切にクローズするリソース管理を実装しています。

#135029 [mono][aot] Fix stack overflow normalizing self-referencing struct wrappers

@pavelsavara・GitHub・area-Codegen-AOT-mono

Mono AOTコンパイラ(mono-aot-cross)で自己参照する構造体フィールドを持つジェネリック構造体を処理する際に無限再帰が発生し、スタックオーバーフロー(終了コード -1073741571)が発生していた問題を修正しました。

以下のような構造体で問題が発生していました:

public struct Box<T> { public object? O; }
public struct Self { public Box<Self> F; }

public static class Calls
{
    public static T Id<T>(T value) => value;
    public static Self Call(Self value) => Id(value);
}

#134919 Add SmtpClient.SslOptions for per-client TLS configuration

@rzikm・GitHub・area-System.Net

SmtpClient.SslOptionsプロパティを実装し、アプリケーションがプロセス全体の設定に依存せずにクライアント単位でSMTP TLS設定を構成できるようにします。SslClientAuthenticationOptionsは遅延初期化され、同期・非同期のTLS認証に使用されます。TargetHostがnullの場合は現在のSMTPホストにデフォルト設定されます。SslOptionsの割り当ては常にキャッシュされた接続を無効化しますが、ネストされたコレクションの埋め込み編集は無効化しません。

#134751 [release/11.0] [interpreter] Resolve open virtual delegates invoked through the shuffle thunk (wasm, Apple mobile)

@lewing・GitHub・Servicing-approvedos-iosos-maccatalystarea-CodeGen-Interpreter-coreclr

オープン仮想デリゲートが、プラットフォーム側で動的コード生成をサポートしていない環境(browser-wasm、iOS、tvOS、macCatalyst)で、コンパイル済みコード(R2R/JIT)から呼び出された際にクラッシュする問題を修正。インタープリタのINTOP_CALLI命令にCID_VirtualOpenDelegateDispatchの特別処理を追加し、デリゲートとthis引数からターゲットを解決するようにします。

#134359 Preserve module initialization across ReadyToRun inlining

@Copilot・GitHub・area-ReadyToRun

Composite ReadyToRun(AOT)でのクロスモジュール インライン化により、別のアセンブリのモジュール初期化子の呼び出しが削除され、実行されないという問題を修正します。例えば、UnsafeAccessorを使用する場合、プライベートフィールドの書き込みが行われない状況が発生していました。

グローバルモジュールの TypeHandle fixupを保持してモジュール初期化子の実行を確保し、バージョン間での互換性も保証する修正です。

#134199 Clarify NegotiateAuthentication completion semantics

@Copilot・GitHub・area-System.Net

NegotiateAuthentication クラスのXMLコメントドキュメントを改善し、IntelliSenseで表示される内容を明確化しました。認証完了のセマンティクスを正確に記述し、開発者が正しく理解できるようにしています。

主な改善点:

  • IsAuthenticated が交換完了を示すことを明確化(成功ではなく)
  • GetOutgoingBlob のステータスコードを参照するよう指示
  • TargetName から誤解を招く IsAuthenticated への参照を削除

2026年10月06日 (33 PRs)うち Bot 2 件 この日のページ →

#135281 [release/11.0] Backport Tensor correctness and shape consistency fixes

@tannergooding・GitHub・Servicing-approvedarea-System.Numerics.Tensors

.NET 11.0向けに、System.Numerics.Tensorsライブラリの重要な正確性と形状一貫性の修正をバックポートしています。配列要素型の検証、テンソルスライスのピニング、形状/ストレージの検証、ブロードキャスト、重複処理、リサイズのゼロフィル、数値演算の問題を修正し、同時に形状アライメントの一貫性を確保し、ネイティブ幅のカウント処理を保持します。

#135272 Avoid allocation when parsing whitespace-free UTF-8 X-format Guids

@EgorBo・GitHub・area-System.Runtime

UTF-8 X-format Guid解析における逆転したホワイトスペースチェックを修正しました。初期スキャンがホワイトスペースなしの入力に対して不要な一時バイト配列の割り当てとコピーを行っていた問題を解決し、元のスパンを返すパスを有効にします。標準的なX-format入力では割り当てが96バイトからゼロに削減されます。

// 標準的なX-format Guid解析
Guid.Parse("{0x00112233,0x4455,0x6677,{0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff}}"u8);

#135271 Fix JsonSchemaExporter handling of extension data with global Disallow

@eiriktsarpalis・GitHub・area-System.Text.Json

JsonSchemaExporterがグローバルUnmappedMemberHandling = Disallow設定下で[JsonExtensionData]を持つ型に対して不正にadditionalProperties: falseを出力する問題を修正しました。JsonTypeInfo.EffectiveUnmappedMemberHandlingを使用することで、エクスポーターが拡張データのオーバーライドを尊重し、通常の型は引き続き厳格に処理されるようにします。

#135248 Enable Roslyn compiler caching on Windows

@agocke・GitHub・area-Infrastructure-coreclr

Azure Pipelines CI/CDの構成を変更し、Roslyn コンパイラ出力キャッシング機能を Windows ビルドで有効化します。Unix 向けには sccache を保持しながら、Windows x64/x86/Arm64 向けには Roslyn 専用のキャッシュを統合します。キャッシュと統計情報テンプレートを共有化し、ビルド構成の保守性を向上させます。

#135244 Implement HasSameMetadataDefinitionAs in System.Reflection.Context

@caraioniurie47・GitHub・area-System.Reflectioncommunity-contribution

CustomReflectionContextによって返されるTypeとメンバーがHasSameMetadataDefinitionAsでNotImplementedExceptionをスローしていた問題を修正しました。投影型とメンバークラスが、それらがラップするメンバーを比較し、同じコンテキストで投影されたメンバーのみマッチするようになります。

#135241 Return inherited accessors from InheritedPropertyInfo.GetAccessors

@caraioniurie47・GitHub・area-System.Reflectioncommunity-contribution

CustomReflectionContextで基本型に追加されたプロパティが派生型でInheritedPropertyInfoとして報告される際、GetAccessorsメソッドが基本型のアクセサーを返していた問題を修正。GetGetMethodとGetSetMethodと同様に、GetAccessorsがInheritedMethodInfoでラップされたアクセサーを返すようにして、ReflectedTypeが派生型で統一されるようにしました。

#135238 JsonNamingPolicyAttribute: Add missing PascalCase

@compujuckel・GitHub・area-System.Text.Jsoncommunity-contribution

PR #124644でPascalCase命名ポリシーのサポートが追加されましたが、JsonNamingPolicyAttributeでの実装が漏れていました。本PRでは、JsonNamingPolicyAttributeにPascalCaseを指定した際に発生していたArgumentOutOfRangeExceptionを修正します。

[JsonNamingPolicy(JsonKnownNamingPolicy.PascalCase)]
public class TestClass
{
    public int Property { get; init; }
}

#135236 Reject null characters in process arguments

@adamsitnik・GitHub・area-System.Diagnostics.Process

ProcessStartInfo.Arguments と ProcessStartInfo.ArgumentList に埋め込まれたNull文字(\0)をバリデーションして拒否する機能を追加しました。バリデーションは ProcessStartInfo.ThrowIfInvalid の共有パスで実行され、プロセス起動前にプラットフォーム固有のコマンドライン構築前に検証が行われます。これは #132214 および #132640 の環境変数検証と同様の衛生的なバリデーション(primary security mitigation ではなく)です。

#135226 Fix Unix BER decoding on Linux & macOS

@eiriktsarpalis・GitHub・area-System.DirectoryServices

Unix環境(Linux・macOS)のBER(Basic Encoding Rules)デコード処理を修正します。ベクトル形式のデータを専用のインタロップパスに経由させ、x形式の任意のBER要素はber_get_stringbv API経由で処理するようにしました。これはAppleのLDAPフレームワークでber_skip_elementがエクスポートされていない問題に対応するものです。

#135224 [wasi] Remove quarantines for wasihost runtimeconfig properties

@lewing・GitHub・area-Infrastructure-librariesos-wasi

WASI ホスト上で AppContext スイッチが正常に機能するようになったため、これらのスイッチに依存する 28 個の WASI テストを再有効化するPRです。#134964 により wasihost がアプリケーションのランタイム設定プロパティをランタイムに渡すようになり、#134954 で報告されていた問題が解決されました。

#135220 Fix ZIP AES encryption method detection

@rzikm・GitHub・area-System.IO.Compression

ZIP AES暗号化エントリの検出ロジックを修正しました。WinZip AES形式では暗号化フラグと圧縮方法99の両方が必須ですが、以前はヘッダーで正しく識別されていない場合でも有効なAES拡張フィールドが暗号化・圧縮方法をオーバーライドしてしまう問題がありました。修正後は共有AES述語を使用してエントリを読み込み、AESエントリが必要な拡張データを欠く場合はInvalidDataExceptionをスローします。

#135210 Delete typeof caching

@jkotas・GitHub・area-Infrastructure-libraries

typeof式のキャッシング処理を削除する最適化除去PRです。静的フィールドに型情報をキャッシュしていた実装を廃止し、typeofを直接参照するように変更します。JITコンパイラがtypeof式を効率的に最適化するため、手動キャッシングは逆に性能低下を招くという判断に基づいています。

#135202 [aw] Restore CI scanner repository lookup dependency

@vitek-karas・GitHub・area-Infrastructure

CI scanner のリポジトリ参照機能を復旧するパッチです。前回の変更(#133684)で repos バックエンドツールセットを削除した結果、本番環境のGiteway経由でスキャナが候補 Issue を読み込む際に search_repositories 内部呼び出しが失敗していました。本修正では repos をリストアし、ロックファイルを再生成し、回帰テストを追加して、本番・評価環境のバックエンドツールセット一貫性を確保します。

#135160 Enable class-level parallelism in Process tests

@steveisok・GitHub・area-System.Diagnostics.Process

Process テストスイートの実行予算不足を解消するため、クラスレベルの並列実行を Windows/Linux で復活させるもの。環境状態に敏感なテストを RemoteExecutor で隔離し、macOS ではアセンブリ全体のシリアル化を維持する。このアプローチにより、テスト実行時間の短縮と並行実行による問題の回避を両立させる。

#135144 Unify Thread.CurrentOSThreadId between CoreCLR and NativeAOT

@EgorBo・GitHub・area-System.Threading

Thread.CurrentOSThreadIdの実装をCoreCLRとNativeAOT間で統一し、プラットフォーム固有の相互運用を共有化しました。Windows/Unixプラットフォーム向けのスレッドID取得をネイティブ相互運用層を通じて統一的に処理し、Mono実装は従来通り保持されます。WASIでは単一スレッド環境のためスレッドID 1 を返すようになりました。

#135138 Unify Thread.SpinWait/Yield/OptimalMaxSpinWaitsPerSpinIteration between CoreCLR and NativeAOT

@EgorBo・GitHub・area-VM-coreclr

CoreCLR と NativeAOT 間で Thread.SpinWait、Thread.Yield、OptimalMaxSpinWaitsPerSpinIteration の実装を統一しました。マネージド実装を共有 Thread.cs に移動し、ネイティブ実装を MiscNativeHelpers.cpp(両ランタイムにコンパイル)でサポートしています。NativeAOT はハードコードされた値(8)の代わりに計測された OptimalMaxSpinWaitsPerSpinIteration を報告するようになります。

#135136 Support /OPTIMIZE and raw method-body emission in managed ilasm

@jkoritzinsky・GitHub・area-ILTools-coreclr

管理型ilasmで /OPTIMIZE フラグと生のメソッドボディ生成をサポートします。デフォルトでは作成者が指定した命令形式(long/short/macro)を保持し、/OPTIMIZE 指定時のみ定数とブランチをコンパクト化します。新しいメソッドボディライターにより、署名付きオフセットラベルと予約済みオペランド修正を通じてバイト単位の忠実なアセンブリを実現し、エラートレランスモードで不正なEH境界も保持できます。

#135132 Fix hexadecimal float sign round-tripping

@tannergooding・GitHub・area-System.Numerics

16進数浮動小数点数(hexadecimal float)のカスタム符号のラウンドトリップ問題を修正します。数値パース時に最長マッチするカスタム符号を選択し、同一長の場合はPositiveSignを優先することで、16進浮動小数点数、科学記法(E形式)、整数でカスタム符号のプレフィックスオーバーラップが一貫して機能するようにします。

#135120 Expose HashLog2 and ChainLog2 on ZstandardCompressionOptions

@SkyDevLab・GitHub・area-System.IO.Compressioncommunity-contribution

Zstandard圧縮オプションにHashLog2とChainLog2プロパティを公開し、大規模プリフィックス(>32MB)に対するデルタ圧縮の際に、エンコーダーがインデックステーブルの制限を超えてプリフィックス全体をインデックスできるようにします。

public sealed partial class ZstandardCompressionOptions
{
    public static int MinHashLog2 { get; }  // 6
    public static int MaxHashLog2 { get; }  // 30
    public static int MinChainLog2 { get; } // 6
    public static int MaxChainLog2 { get; } // 30 (64-bit) / 29 (32-bit)
    
    public int HashLog2 { get; set; }       // 0 = デフォルト(Quality から自動決定)
    public int ChainLog2 { get; set; }      // 0 = デフォルト
}

#134921 Fix SslStream handling of empty TLS handshake records

@rzikm・GitHub・area-System.Net.Security

SslStream.ReceiveHandshakeFrameAsyncにおいて、空のTLSハンドシェイクレコード(16 03 01 00 00)を受信した際にIndexOutOfRangeExceptionがスローされる問題を修正しました。レコード長の検証を先に行うことで、空のハンドシェイクレコードに対して即座にIOExceptionをスロー するように改善されます。

#134729 Fix SAFEARRAY VARIANT copy-back and typed class array marshalling

@jkoritzinsky・GitHub・area-Interop-coreclr

SAFEARRAYおよびVARIANT型の相互運用で3つの重大な問題を修正しています:

  1. VARIANT配列要素がby-ref型に不正に強制変換される問題
  2. 静的配列のコピーバック時にネイティブ要素が失われる問題
  3. クラス型配列がインスタンスチェックに違反する問題

これらの修正により、マネージド配列の要素型制約を保持し、正確な値の相互運用を実現します。

#134602 [PERF] Retire default Mono performance runs and builds on main

@LoopedBard3・GitHub・area-Infrastructure-mono

runtime mainのデフォルトMonoパフォーマンス実行とビルドを廃止し、CoreCLRとNativeAOTのワークロードを保持するパイプライン最適化。Mono関連の自動実行をオプト インに変更しながら、明示的なMonoビルダーと既存の消費者は維持されます。

依存関係: dotnet/performance#5322のマージが必要(新しいrunMonoパラメータを使用)。

#133819 Implement IsByRefLike on the remaining Reflection.Emit Type subclasses

@caraioniurie47・GitHub・area-System.Reflectioncommunity-contribution

Reflection.Emit API で Type.IsByRefLike プロパティが4つの Type サブクラスで NotSupportedException をスロー していた問題を修正します。SymbolType、TypeBuilderImpl、GenericTypeParameterBuilderImpl は false を返し、TypeBuilderInstantiation は汎用型定義に処理を転送するようになります。これにより、MakeArrayType、MakePointerType、MakeByRefType、MakeGenericType での動作が一貫性を持つようになります。

#132861 Pass TPA through host-runtime contract instead of property string

@elinor-fung・GitHub・area-Host

ホストからランタイムへTrusted Platform Assemblies (TPA) を大きな文字列プロパティの代わりに、host_runtime_contract コールバック経由で構造化データとして渡すように変更しました。ホストは初期化時に解決されたアセンブリ名を提供し、ランタイムが必要に応じて各パスをオンデマンドで解決します。従来の TRUSTED_PLATFORM_ASSEMBLIES プロパティはオンデマンドで再構築可能であり、カスタムホストによる明示的な供給にも対応しています。パス区切り文字を含むパスでのアプリケーション実行が可能になります。

#132591 Stop generating static restore binlogs

@agocke・GitHub・area-Infrastructure-libraries

dotnet/runtimeのビルドシステムにおいて、無条件に生成されていたネストされた静的グラフリストア用のバイナリログ(binlog)生成を廃止します。静的グラフリストア機能自体は有効なままで、ユーザーが明示的に要求した場合のみ外側のビルドbinlogを生成します。キャッシュされたリストアの場合でもパフォーマンス向上が期待されます。

2026年10月05日 (27 PRs)うち Bot 2 件 この日のページ →

#135228 [release/10.0] Fix msl wait time extraction in GC

@janvorli・GitHub・Servicing-approvedarea-GC-coreclr

.NET 9で導入されたGC(ガベージコレクション)のバグ修正。gc_heap::get_msl_wait_time関数がMSL(Managed System Library)待機時間を正しく抽出できない問題を修正します。この関数は出力引数soh_msl_wait_timeとuoh_msl_wait_timeを更新すべきですが、引数自体を更新してしまい、値が読み出されていませんでした。この影響によりDATAS(Dynamic Adaptation To Adjust Heaps)によるスループットコスト計算が正確でなくなり、Gen0割り当て予算とヒープ数適応に影響します。

#135216 [browser][coreclr] Filter emcripten source maps from runtime pack and C++ headers from app build

@maraf・GitHub・arch-wasmarea-Build-monoos-browser

Blazor WebAssembly(CoreCLR)ビルドで、ネイティブ再リンク用ヘッダーと中間JavaScript/SourceMapファイルが不要なスタティックWebアセットとして公開されていた問題を修正します。Emscripten中間SourceMapファイル(libBrowserHost.js.map、libSystem.Native.Browser*.js.mapなど)をランタイムパックから除外し、プラットフォームマニフェストエントリを削除。.hppヘッダーもWebAssemblyビルドの公開アセットからフィルタリングします。

#135204 [wasm][coreclr] Ship Crossgen2Tasks shim in the CoreCLR wasm perf artifact

@lewing・GitHub・area-ReadyToRun

dotnet/performance#5324の新しいComposite R2R microベンチマークレーン(coreclr_r2r_composite_v8)で、CoreCLR browser-wasmをPublishReadyToRunCompositeで公開するために必要なCrossgen2Tasks shimを、CoreCLR wasmパフォーマンスアーティファクトにコピーします。これにより、SDK ReadyToRunタスクが所有者を<entry>.r2r.wasmと命名するまでの暫定的な対応です。

#135180 Acquire type-loading completion flags in MethodTable and TypeDesc

@Copilot・GitHub・area-TypeSystem-coreclr

ARM64などの弱順序アーキテクチャで、型ローディング完了フラグの読み取り時に古いペイロードデータが参照されるメモリ順序問題を修正しました。VolatileLoadを使用してAcquire セマンティクスを導入し、MethodTableおよびTypeDescの型ローディング状態チェックに取得的メモリバリアを追加します。

#135179 Order sync-table lookups and SyncBlock publication

@Copilot・GitHub・area-VM-coreclr

SyncBlock同期テーブルのメモリ順序付けを強化し、競合状態を防止するPR。パッシブルックアップ時にオブジェクトヘッダービットを取得してからインデックスを解決し、初期化済みSyncBlocksを公開前にリリース発行することで、古いテーブルベースと新しいインデックスの組み合わせを防ぎます。内部実装の改善であり、公開APIへの影響はありません。

#135174 NativeAOT: acquire object headers before SyncTable lookups

@Copilot・GitHub・area-NativeAOT-coreclr

NativeAOT環境のARM64プラットフォームにおいて、オブジェクトヘッダーとSyncTableの独立した読み込みが、新しく公開されたSync インデックスと古い、サイズが小さいテーブルをペアリングする競合状態を修正します。ヘッダー読み込みに取得(Acquire)セマンティクスを追加し、インデックス公開後のテーブルアクセスを順序付けます。

#135157 Disable automatic failure issues in agentic workflows

@vitek-karas・GitHub・area-skills

agentic workflows(GitHub Actions自動化ワークフロー)における自動Issue作成機能を無効化する変更です。ワークフロー失敗時の自動Issue生成を停止し、失敗情報はActions実行ログに留めることで、不要なIssue作成を防止します。意図的に作成されるKnown Build Error Issuesなどの出力は変わりません。

#135135 Skip badinlinee under GC stress

@jtschuster・GitHub・area-CodeGen-coreclr

GC stress テストでは合成オブジェクトが現在のスレッドに割り当てられるため、ゼロ割り当て assertion が無効化されます。既にプロセス分離されているテスト badinlinee に GCStressIncompatible マークを追加し、GC stress 下でのスキップを実現します。

#135134 Fix JIT over reporting RCPC2

@dhartglassMSFT・GitHub・arch-arm64area-CodeGen-coreclr

ARM64プラットフォームで、Lowering::TryCreateAddrModeがRCPC2(ARM ISA拡張機能)の対応可能性を過剰に報告していた問題を修正しました。volatile load/storeでRCPC2対応を宣言した後に、アドレスオフセットが9ビット以内に収まらないなどの理由でバックアウトする場合、不要にRCPC2が必要と報告されていました。

#135126 Switch ci-failure-scan and ci-failure-scan-feedback to GPT 6.1 Sol

@kotlarmilos・GitHub・area-Infrastructure

CI失敗スキャンワークフロー(ci-failure-scanとci-failure-scan-feedback)で使用するAIモデルをclaude-opus-4.8からgpt-6.1-solに切り替えます。評価エージェントモデルも同様に更新され、eval判定モデルは変更されません。GPT 6.1 Solはgh-aw v0.86.2のカタログに未含まれるため、モデル価格オーバーライドを追加し、実行あたり2500 AIクレジットの予算を設定しています。

#135125 Reduce CI agentic workflow noise

@kotlarmilos・GitHub・area-Infrastructure

CI agentic workflowsからのノイズ削減を目的とした変更。スキャン、フィクサー、フィードバックワークフローが失敗やレート制限時の[aw]issue自動開設を廃止し、失敗はActions実行履歴に留める。フィクサーの実行を12時間ごとから平日1日1回に変更し、コメント数を最大3件に制限。フィードバックワークフローを日次から隔週実行に変更し、PR自動作成を廃止して、既存のKPIトラッカーissue(#128742)内で提案内容をプレーンテキスト+差分で最大3件表示するように変更。

#135123 [release/10.0] [CreateDump] Use _exit after createdump launch failures

@mdh1418・GitHub・Servicing-approvedarea-Diagnostics-coreclr

createdumpプロセスの起動失敗時にexit()の代わりに_exit()を使用することで、親プロセスのクリーンアップロジックが不正に実行される問題を修正します。execve失敗時に診断ポート(diagnostic socket)が誤ってクローズされる問題を解決し、ターゲットアプリケーションが継続して動作する際に適切に接続できるようにします。

#135089 Fix CoreFoundation number interop ABI in Apple proxy handling

@vitek-karas・GitHub・area-System.Net.Http

CoreFoundation数値相互運用のABI不整合を修正しました。Apple proxy処理でCFNumberGetValueがCoreClRインタープリタ実行時にクラッシュする問題を解決します。CFNumberTypeが32ビット列挙型として宣言されていましたが、ネイティブCoreFoundationはすべてのサポート対象.NET Appleプラットフォームで64ビットCFIndexを使用しているため、型値が正しく解析されていませんでした。

#135064 Make ILLink task output ownership explicit

@sbomer・GitHub・linkable-frameworkarea-Tools-ILLink

ILLinkタスクの出力所有権を明確化するため、実行前に専用の出力ディレクトリをクリアするように変更。これにより、staleファイルの残存を防ぎ、全体キャッシング用の出力所有権を確立します。インクリメンタルビルドセマフォと per-library トリミング出力をタスク所有ディレクトリ外に移動。ユーザーは入力ファイルと無関係な中間ファイルをタスク所有ディレクトリ外に配置する必要があります。

#134951 Clarify Copilot authorization for GitHub publication

@vitek-karas・GitHub・area-skills

GitHub CopilotおよびAgent Mergeによる自動化タスク(Known Build Error(KBE)issue作成、コメント投稿など)の権限管理を明確化するドキュメント更新です。ユーザーの明示的な認可がない限り、incidental な issue 作成やコメント投稿は下書きに留め、認可がある場合のみ公開するルールを定めました。Agent Merge の既存の publication scope は保持しつつ、不正な自動化投稿を防止する仕組みを整備しています。

#134850 Handle TAR uid/gid values larger than int.MaxValue

@am11・GitHub・community-contributionarea-System.Formats.Tar

Unix の uid_t/gid_t は unsigned 型ですが、TAR ファイルから GNU base-256 または PAX 形式で Int32.MaxValue を超える uid/gid を読み込む際に OverflowException が発生していました。本変更では、これらの値を overflow チェックなしで int として再解釈し、負の値を GNU ヘッダおよび PAX 拡張属性では unsigned として書き込むことで、ラウンドトリップに対応します。TarWriter の既存のファイルシステム ID 処理と一貫性を持たせています。

#134811 Make ExternFunctionSymbolNode implement INodeWithTypeSignature by giving them all signatures.

@jtschuster・GitHub・area-NativeAOT-coreclr

WebAssemblyターゲット向けの外部関数呼び出しに型情報を付与する改修。ExternFunctionSymbolNodeがINodeWithTypeSignatureを実装し、すべての外部関数(ネイティブランタイムヘルパー、直接P/Invoke)が型付きWebAssembly関数インポートを持つようになりました。JitHelperとCorInfoImplは文字列ベースのヘルパー名から列挙型ベースのKnownExternFunctionに移行し、一貫した署名管理を実現しています。

#134555 Directly call same-image managed R2R helpers

@davidwrighton・GitHub・area-ReadyToRun

ReadyToRun(R2R)コードが、同じイメージ内で直接呼び出し可能なマネージJITヘルパーを直接呼び出すことをサポートします。Crossgen2がマネージJITヘルパーをプローブコンパイルする際、プロセッサ機能の固定なしでコンパイル可能なヘルパーは互いに直接呼び出し可能になります。ARM32/Arm64はアーキテクチャ上の制限によりヘルパーセルを使用し続けます。R2R形式をバージョン31.0に更新(メジャーバージョンアップ)。

#134284 Fix pointer array copying and various array pinning regressions in CoreCLR

@jkoritzinsky・GitHub・area-Interop-coreclr

CoreCLRの配列マーシャリング における3つの重大な回帰を修正:

  1. 不正なコピーサイズ: ポインタ配列のメタデータがポインタサイズのVARTYPEを使用しながらも、指す先の型のサイズでコピーしていた(例:4要素のbyte*[]が4バイトのみをコピー)
  2. ピニング失敗: blittableな値型のみがピニング対象となり、ポインタ型と関数ポインタ型が除外されていた
  3. 列挙型とchar配列: 列挙型は基礎となる整数型でピニング判定、UTF-16のchar配列をピニング対象として認識すべき

修正により、ポインタ要素を不透明なネイティブサイズ値として扱い、マーシャリングオペランドで実際の要素TypeHandleを保持。ジェネリックコピーのキャリアとしてのみnintを使用。

#132640 Add security comment to DictionaryWrapper.cs

@GrabYourPitchforks・GitHub・area-System.Diagnostics.Process

System.Diagnostics.Processの内部クラスDictionaryWrapperにセキュリティコメントを追加し、環境変数検証がセキュリティ対策ではなく、単なるコード明確化であることを示しています。環境変数は信頼できる制御プレーンメカニズムとして扱われるため、インデックスセッターでの検証は補足的なものであることを文書化しています。

2026年10月04日 (4 PRs)うち Bot 1 件 この日のページ →

#135172 Fix NativeAOT reflection ref-return storage lifetime

@Copilot・GitHub・area-System.Reflection

NativeAOT reflection invocationにおいて、byref戻り値がヘルパーの一時的な引数ストレージへの参照を返すことで、ヘルパー復帰後に無効または不正なオブジェクトが参照される問題を修正します。5つのinvocation helperすべてがobject?を返すよう変更し、引数ストレージの有効期限切れまたはGC登録削除前に結果を変換します。

2026年10月03日 (4 PRs) この日のページ →

#135130 Seed Debug Roslyn compiler caches from rolling builds

@agocke・GitHub・area-Infrastructure

ローリングビルドのDebugバリアント向けRoslyn コンパイラキャッシュのシーディング機能を追加します。Linux x64、Linux musl x64、macOS arm64 の3つのプラットフォーム向けDebug構成のCoreCLR_AllSubsetsローリング専用ビルドを新規追加し、DebugおよびReleaseのRoslyn キャッシュエントリを分離して、各構成が独立してイミュータブルキャッシュをシードできるようにします。既存のv1エントリは復元フォールバックとして残ります。

#135077 Add FTPS directory listing regression test

@wfurt・GitHub・area-System.Net

FtpWebRequestのListDirectoryDetailsメソッドにおける、TLS有無別の同期リクエスト処理に関する回帰テストを追加します。返されるリスト形式がプレーンテキストであること、アップロードされたフィクスチャが含まれていること、FtpStatusCode.ClosingDataで完了することを検証します。これは#134130で報告されたシナリオに対応しており、製品側の修正は既に#123234でmainに統合済みです。

#134549 [wasm] Remove Wasm NYI crossgen fallback

@adamperlin・GitHub・area-CodeGen-coreclr

WebAssembly (Wasm) コードジェネレーションの完成度向上に伴い、JitWasmNyiToR2RUnsupported フォールバック機構を削除します。これにより、crossgen2がNYI_WASMに達した場合に黙ってメソッドを省略するのではなく、通常のJITコンパイル失敗として表示され、残存する実装ギャップが可視化されます。

#133684 [aw] Make CI KBE issue search deterministic

@vitek-karas・GitHub・area-skills

CI KBE(Known Build Errors)イシュー検索を決定論的にするため、リポジトリスコープのMCPラッパースクリプトを導入し、検索結果の決定重複検出前に全候補をissue_readで検査することを義務付けます。組み込みイシュー検索アクセスを削除し、ラッパーパス強制と失敗時閉鎖動作をスキャナー評価で強化します。

2026年10月02日 (36 PRs)うち Bot 8 件 この日のページ →

#135121 Support /FOLD in managed ilasm

@Copilot・GitHub・area-ILTools-coreclr

Managed ilasm の /FOLD オプションで、バイト単位で同一のメソッドボディ(ヘッダーと例外領域を含む)を検出し、既存のボディのオフセットを再利用することでコード重複を排除する機能を実装しました。これにより、IL出力ファイルのサイズ削減が期待できます。

#135101 Fix PEAssembly layout in native DAC builds

@max-charlamb・GitHub・area-Diagnostics-coreclr

PEAssemblyのm_pImporterとm_pEmitterフィールドをガードするマクロをPROFILING_SUPPORTEDからPROFILING_SUPPORTED_DATAに変更しました。前回の変更でDAC(Debugging Diagnostic Assistant Companion)ビルドで定義されていないマクロが使用されたため、後続フィールド(m_pAssemblyBinderなど)のレイアウトがズレ、dumpalcコマンドが失敗していました。PROFILING_SUPPORTED_DATAを使用することで、プロファイリング有効ランタイムとそのDAC間でレイアウトを保ちながら、DAC内ではプロファイラ機能を有効化しません。

#135083 Isolate SslStream certificate validation tests from TLS resumption

@rzikm・GitHub・area-System.Net.Security

TLS再開時に証明書検証コールバックがスキップされることにより、複数のSslStreamテストが不安定になる問題を修正しました。証明書検証に焦点を当てたテストに対して完全なハンドシェイクを強制し、セッションキャッシュの影響を排除します。これはテストのみの変更で、ランタイム動作やストリームI/Oヘルパーの機能には影響しません。

#135080 Delete __SwitchToThread method

@jkotas・GitHub・area-VM-coreclr

__SwitchToThreadメソッドを削除し、すべての呼び出しをminipal_switch_to_threadまたはminipal_sleepへの直接呼び出しに置き換えるリファクタリング。ランタイムの内部実装(CoreCLRのVM層)における間接呼び出しを排除し、minipal抽象化層への依存を統一する変更です。

#135072 JIT: Remove dead/redundant GTF_* flags

@EgorBo・GitHub・area-CodeGen-coreclr

JITコンパイラで使用されていないまたは冗長なGenTreeフラグ(GTF_*)を削除するクリーンアップです。以下5つのフラグを削除:

  • GTF_ICON_CIDMID_HDL:設定・読み取りなし
  • GTF_ARRLEN_NONFAULTING等3つ:GTF_IND_NONFAULTINGの別名で静的アサーションのみで参照
  • GTF_DEBUG_VAR_CSE_REF:デバッグ専用でJitDumpフラグ出力のみ
  • GTF_CALL_M_STACK_ARRAY:WellKnownArg::StackArrayLocalと冗長
  • GTF_BOX_VALUE:すべてのGT_BOXノードで設定されるため不要

#135060 Fix tensor shape consistency and native-width traversal

@tannergooding・GitHub・area-System.Numerics.Tensorsbreaking-changeneeds-breaking-change-doc-created

System.Numerics.Tensorsライブラリのテンソル形状処理を統一し、ネイティブ幅トラバーサルを修正する包括的な変更。ランク0の空のテンソルを有効な形状[0]として扱い、ブロードキャスト・要素ごとの演算・コピー・等値性・リシェイプ・軸操作・ビュー全般で一貫した動作を実現。内部の10個のAnyスパンカーネルを修正し、空入力のハンドリングを正確にする。ネイティブ幅コピーと最小/最大インデックスリダクションで重複安全性とSIMD意味論を保持。

#135059 [cDAC] Return no debug info for ReadyToRun images without a DebugInfo section

@lewing・GitHub・area-Diagnostics-coreclr

ReadyToRun イメージでDebugInfoセクションが存在しない場合、cDAC(Component Debugging Assistant)のReadyToRunJitManager.GetDebugInfoがネイティブ実装と同様にTargetPointer.Nullを返すように修正しました。修正前は、nullチェックなしでアドレス0を参照し、wasmで無効なデータをデコードしてBadImageFormatExceptionを発生させていました。特に#134690でBrowser/WASIのReadyToRun発行物がデフォルトで--strip-debug-infoを指定するようになったため、この修正が必要になりました。

#135055 [cDAC][wasm] Register platform GC-info decoding

@radekdoulik・GitHub・area-Diagnostics-cdac

WebAssembly(Wasm)プラットフォーム向けのGC情報デコーディング機能をcDAC(Component Diagnostics Across Components)フレームワークに登録します。Wasm32GcInfoEncodingに対応した専用のWasmGCInfoTraitsを実装し、6ビットのコード長エンコーディングと最適化されたヘッダー形式に対応させます。インタプリタは既存の別形式を継続使用します。

#135051 [browser] Default Webcil V1 unless UseMonoRuntime is true

@lewing・GitHub・area-Build-mono

WebAssembly Browser アプリケーションのビルドターゲットにおいて、Webcil バージョンの選択ロジックを修正します。従来は RuntimeFlavor == 'CoreCLR' の場合のみ Webcil V1 を選択していましたが、shipped SDK では RuntimeFlavor が設定されないため、CoreCLR アプリが意図せず Webcil V0 で出力され起動時にエラーが発生していました。この修正により、デフォルトを V1 とし、UseMonoRuntime == 'true' の場合のみ V0 を選択するように変更します。

#135049 Return Complete from RequestClientCertificate when the client didn't offer post-handshake auth

@caraioniurie47・GitHub・area-System.Net.Securitycommunity-contribution

TLS 1.3 のポストハンドシェイク認証(Post-Handshake Authentication)をクライアントが提供していない場合、RequestClientCertificate が例外をスローするのではなく Complete を返すようにしました。OpenSSL と SChannel の両方で NoRenegotiation エラーが報告される場合に対応し、既存の SslStream.NegotiateClientCertificateAsync の動作と統一させます。また TLS 1.2 のローカル無効化構成でも同様に処理されます。

#135044 [cDAC][wasm] Fix stack walks and MethodDesc naming on WebAssembly

@lewing・GitHub・area-Diagnostics-cdac

WebAssembly(WASM)ターゲットでのcDAC(Compact Debugging and Diagnostics)スタックウォーク実装の四つの主要な不具合を修正します。FEATURE_PORTABLE_ENTRYPOINTSでのMethodDesc検証失敗、Debuggerコントラクト未実装による初期段階での失敗、R2R InlinedCallFrameでの無限ループ、および解釈実行コード(Interpreter-only)での無限ループを解決します。

#135033 [wasi] Return parsed IP literals from Dns.GetHostAddressesAsync

@lewing・GitHub・arch-wasmarea-System.Netos-wasi

WASI プラットフォーム上で Dns.GetHostAddressesAsync に IP リテラル(例:"127.0.0.1")を渡すと SocketException がスローされる問題を修正します。非同期パスがアドレスファミリーの不一致で getaddrinfo に IP リテラルを送信していたため、wasmtime 49.0.1以降で EAI_NONAME が返されていました。同期パスとの動作を統一し、IP リテラルの逆引きが不要な場合は WASI でも直接解析することで対応します。

#135022 Fix msl wait time extraction in GC

@janvorli・GitHub・area-GC-coreclr

GC (ガベージコレクション) の MSL (MaxSegmentLength) 待機時間抽出処理におけるバグを修正します。.NET 9で導入された gc_heap::get_msl_wait_time 関数で、出力引数 soh_msl_wait_time と uoh_msl_wait_time が正しく更新されていなかった問題を解決します。

#135000 [release/11.0] Fix NativeAOT EventPipe use-after-free by waiting for active writers

@Copilot・GitHub・Servicing-approvedarea-NativeAOT-coreclr

NativeAOT EventPipeで、アクティブなライターが存在する間にバッファが解放される use-after-free 問題を修正します。アクティブなライターの終了を待機するロジックを追加し、CoreCLRと同等の同期メカニズムを実装しています。この修正は #134838 の release/11.0 へのバックポートです。

#134999 [release/10.0] Fix NativeAOT EventPipe use-after-free by waiting for active writers

@Copilot・GitHub・Servicing-approvedarea-NativeAOT-coreclr

NativeAOT環境でのEventPipeの使用後解放(use-after-free)バグを修正するバックポートです。イベントパイプのバッファがアクティブなライターによる書き込み中に解放されるという間欠的なクラッシュ問題を、アクティブなライターが完了するまで待機することで解決します。

#134982 Fix direct thread-static alignment fallback

@davidwrighton・GitHub・area-System.Threading

ThreadLocalData内の直接スレッド静的割り当てにおいて、アライメントパディングまで含めてフィットするまで割り当て成功をマークしない修正です。以前は、アライメント前のデータはフィットしているがパディング領域がない境界ケースで、無効な結果を保持したまま動的割り当てへのフォールバックを行わないバグがありました。この修正により、そのような場合は正しく動的非収集スレッド静的配列にフォールバックします。

#134969 JIT: Skip unrolling tests stored in locals

@EgorBo・GitHub・area-CodeGen-coreclr

JITコンパイラのループアンローリング最適化において、ループテスト条件がブランチ条件ではない場合にアンローリングをスキップするように修正しました。これにより、Checkedアサーション失敗とRelease MinOptsへのフォールバックを回避します。

#134966 Remove CoreCLR Reflection.Emit's ceefilegen dependency

@jkoritzinsky・GitHub・area-VM-coreclrsize-reduction

CoreCLRのReflection.Emit実装がPEスタイルのセクションと再配置記録の依存関係を排除しました。生成されたILとフィールドRVAデータをモジュールのローダアロケータに直接保存し、既存のトークン-アドレスマップを再利用することで、共有/静的CoreCLRがceefgenのリンク依存関係を不要にしました。

#134964 [wasi] Pass runtimeconfig properties to the runtime in wasihost

@lewing・GitHub・arch-wasmarea-Hostos-wasi

WASI上のCoreClRホスト(wasihost)が<app>.runtimeconfig.jsonの設定プロパティを読み込まず、フィーチャースイッチやRuntimeHostConfigurationOptionが有効にならない問題を修正します。runtimeconfig.binをエントリアセンブリ隣に配置し、ホストの初期化時に既存プロパティと統合することで、UTF-7エンコーディング有効化などの機能スイッチが正常に動作するようになります。

#134843 Simplify nativeaot typeloader

@MichalStrehovsky・GitHub・area-NativeAOT-coreclr

NativeAOT型ローダーを簡素化し、ランタイムレイアウトデータを正規テンプレートから直接派生させることで、3つのバグを修正し、型ローダーコードの10%以上を削除します。GC記述子、インターフェース・マップ、ジェネリック階層構造の処理を改善し、冗長な型ローダー状態とルックアップ抽象化を削除します。

#134642 [browser] Move .NET callbacks off Module

@maraf・GitHub・arch-wasmarea-System.Runtime.InteropServices.JavaScriptos-browser

Emscripten Module から .NET のライフサイクル・ダウンロード進捗コールバックを分離し、ローダーが独自のコールバック状態を管理する設計に変更しました。withConfigLoaded が従来のモジュール設定コールバックを置き換え、withDotnetReady は内部的に利用可能なままです。CoreCLR と Mono は preInit と preRun の関数・配列形式の両方に対応し、スプレッド構文による起動失敗を回避します。

#133662 Use shared managed thunks for reflection invocation

@jkoritzinsky・GitHub・area-System.Reflection

リフレクション呼び出しの性能最適化と予編集可能な共有マネージド・スタブの導入。従来のネイティブリフレクション・ディスパッチャーに代わり、MethodInfo.Invoke、ConstructorInfo.Invoke、MethodInvoker、ConstructorInvokerの一般的なシグネチャに対して、共有マネージド・スタブを使用します。最初の10,000呼び出しは共有パスを使用し、その後の呼び出しから特化した実装に昇格します。仮想/インターフェース・ディスパッチ、宣言型引数検証、列挙体の幅、参照型の方向引数、collectible所有権が保持されます。

#133487 [release/10.0] Fix Linux FileSystemWatcher silent stop after unpaired IN_MOVED_FROM

@Copilot・GitHub・Servicing-approvedarea-System.IO

Linux上のFileSystemWatcherにおいて、ディレクトリの移動に関連する不完全なIN_MOVED_FROMイベント処理時にイベント処理ループが予期せず終了し、watcher が機能しなくなるバグを修正します。.NET 9で導入された回帰バグで、EnableRaisingEvents=trueのままイベント配信が停止する問題を解決します。

#132346 Convert managed ilasm to use ANTLR actions instead of visiting the parse tree

@jkoritzinsky・GitHub・area-ILTools-coreclr

managed ilasmをANTLRアクション駆動型パースに変換し、フルパースツリーの構築を廃止することで、メモリ使用量と実行時間を大幅に削減しました。特に大規模なテストアセンブリ(HardwareIntrinsics AVX512、HugeArray)でメモリ効率が改善され、x86でのOOM問題を解決しています。また、ILAssemblerライブラリの公開API表面をref-assemblyコントラクトで制限し、ANTLR生成型を内部実装に留めました。

2026年10月01日 (49 PRs)うち Bot 7 件 この日のページ →

#135026 JIT: remove unused helpers

@EgorBo・GitHub・area-CodeGen-coreclr

JITコンパイラ内で参照されていない未使用のヘルパー関数やコードを削除するクリーンアップPRです。浮動小数点演算、レイアウト、ビットベクトル、スコープ、コード生成関連の未使用ヘルパーと、無効化されたEH正規化コードを削除します。アクティブな動作には影響を与えません。

#135018 [browser][CoreCLR] Enable non-AOT WBT relinking and rebuild coverage

@radekdoulik・GitHub・arch-wasmarea-Infrastructure

CoreCLR browser-wasm向けのネイティブリリンク機能を検証するため、Wasm.Build.Tests内の23メソッドでMono専用カテゴリを縮小し、ランタイム対応のテストデータを有効化しました。既存のMonoテスト入力は保持し、プロダクトコードは変更しません。有効化されたカバレッジには、P/Invoke ABI、ネイティブライブラリ名、インバリアント国際化/タイムゾーン、Bug49588リリンク回帰、テンプレートmarshal-IL生成、メイン引数、サテライトリソース、Blazorシナリオ、インクリメンタルネイティブリビルドなどが含まれます。

#135016 [wasi] Don't copy runtime pack link inputs to app build and publish output

@lewing・GitHub・arch-wasmarea-Build-monoos-wasi

WASI ランタイムパックのネイティブリンク入力(.a ファイル、.wit ファイル、corerun など)が、アプリの bin と publish 出力ディレクトリに不要にコピーされていた問題を修正します。これらのファイルはリンク時に $(MicrosoftNetCoreAppRuntimePackRidNativeDir) から読み込まれるため、出力ディレクトリのコピーは使用されていません。新しい _WasiRemoveRuntimePackLinkInputs ターゲットが ResolveRuntimePackAssets 後に実行され、不要なネイティブアセットを RuntimePackAsset と ReferenceCopyLocalPaths から削除します。

#134996 Drain finalizers periodically in bestfit-finalize when multithreading is unsupported

@lewing・GitHub・area-GC-coreclr

マルチスレッド非対応のブラウザ/WASI環境において、bestfit-finalizeテストがファイナライザー枯渇によるOOMを発生させる問題に対する回避策です。ホストイベントループで実行されるファイナライザーが、同期的なメモリ割り当てループによってスターベーション状態に陥るため、テスト内で定期的にGC.WaitForPendingFinalizers()を呼び出してファイナライザーをドレインします。

#134991 Use safe scalar code for UTF-8 Equals(OrdinalIgnoreCase)

@EgorBo・GitHub・area-System.Globalizationreduce-unsafe

UTF-8浮動小数点解析のOrdinal.EqualsIgnoreCaseUtf8実装を、ベクトル化されたUnsafeコードから安全なスパンベースコードに置き換えました。ASCII高速パスは8バイト単位での比較を行い、非ASCII文字についてはRuneループでフォールバックします。これにより、特にNaN/Infinity記号のマッチング処理で大幅なパフォーマンス向上が実現されました。

#134984 [wasm][JIT] Use TYP_SIMD16 register type for 16-byte struct layouts on Wasm

@lewing・GitHub・arch-wasmarea-CodeGen-coreclr

WebAssembly上で16バイト構造体がTYP_SIMD16レジスタ型として扱われるよう改善するもの。従来はWasm向けにこの最適化が除外されていたため、Vector128<T>をラップする構造体が戻り値として返される際に不要な一時変数経由でのスピルが発生していました。本変更により、Wasm上でも他のSIMD対応ターゲットと同じく16バイト構造体レイアウトでTYP_SIMD16が使用されるようになります。

#134979 JIT: make Wasm frames that call a finally unwindable

@lewing・GitHub・arch-wasmarea-CodeGen-coreclr

WebAssembly JITでfinallyブロックを呼び出す際に、呼び出し元の関数がアンワインド可能(unwindable)フレームとしてマークされていなかった問題を修正しました。genCallFinallyがensureCurrentFuncIsUnwindable()を呼び出すようにすることで、finallyからの例外スロー時に正しくスタックアンワインドできるようにします。

修正前は、finallyが唯一の呼び出しであった場合にプロローグでR2R関数テーブルインデックスが格納されず、finallyが例外をスロー時にスタックウォーク時に古い値を読み込んでいました。その結果、例外が呼び出し元のcatchブロックに到達せず、ハンドルされない例外として報告されていました。

#134974 JIT: fix profile update when folding a switch with shared case targets

@EgorBo・GitHub・area-CodeGen-coreclr

JITコンパイラのスイッチ文の折り畳み処理においてプロファイル更新時の重み計算にバグが存在していました。複数のケースターゲットが同じFlowEdgeを共有する場合、各ジャンプテーブルスロット毎に対象重みを減少させると、同じエッジ重みが複数回減算されていました。本修正では、ユニークな後続エッジ毎に重みを1回のみ減少させることで問題を解決します。

#134973 JIT: mark GC safe point after stelem.ref call transformation

@EgorBo・GitHub・area-CodeGen-coreclr

JIT コンパイラの fgMorphCall で、stelem.ref 呼び出しの変換後に GC safe point マークを設定するタイミングを修正しました。従来は user call の段階でマークされていたため、プレーンストアまたはヘルパー呼び出しに変換された後も stale フラグが残り、GC ポーリングのない呼び出し不在ループが生じていました。

#134960 [wasm][CoreCLR] Add browser_wasm R2R_CG2 leg to runtime-coreclr outerloop

@lewing・GitHub・arch-wasmarea-Infrastructure-coreclros-browser

browser_wasm プラットフォームの ReadyToRun (R2R) コンパイルされたコードに対する priority-1 テストを実行するため、runtime-coreclr outerloop パイプラインに新しい R2R_CG2 ビルド レグを追加します。これにより、browser での完全な R2R 実行時のテスト カバレッジが向上し、R2R 固有の問題の検出が可能になります。

#134959 [wasi] Make File.Copy metadata copy best effort

@lewing・GitHub・arch-wasmarea-System.IOos-wasi

WASI環境でFile.CopyとFileInfo.CopyToがファイルデータのコピー後にIOException: Function not implementedをスローする問題を修正します。原因は、WASIのfchmodがスタブ実装(常にENOSYSを返す)であるのに対し、コピー処理がメタデータのコピーに失敗した場合に例外をスローしていたことです。本修正により、WASI上でのメタデータコピーをベストエフォート化し、パーミッションコピーをスキップし、タイムスタンプコピーの失敗を許容するようにしました。

#134956 Replace unsafe code with safe APIs in CoreLib and libraries

@EgorBo・GitHub・area-System.Runtimereduce-unsafe

CoreLibおよび各ライブラリのホットパスにおけるunsafeなポインタ操作を、安全なSpan API、インデックスアクセス、SIMD APIに置き換えるリファクタリング。WebSocketのマスキング、バイナリ操作、バッファ検索などの複数の低レイヤーコンポーネントで unsafe コードを削減し、型安全性を向上させます。

#134940 JIT: don't skip covariant store check for shared sealed element types

@Copilot・GitHub・area-CodeGen-coreclr

R2R/NativeAOT共有ジェネリックコード内で、JITが共変配列ストア検証を誤ってスキップしていた問題を修正。G<object>をG<string>[]に格納できてしまう不正な操作が、正しくArrayTypeMismatchExceptionをスロー するようになります。

public sealed class G<T> { }

static void Test<T, U>(G<T>[] arr, G<U> val)
{
    object[] o = arr;
    o[0] = val; // Test<string, object>: ArrayTypeMismatchExceptionをスロー
}

#134933 [Mono][AMD64] Fix code generation for oversized add immediates.

@lateralusX・GitHub・area-Codegen-JIT-mono

Mono AMD64コード生成において、符号付き32ビット即値の範囲を超える定数を含むアドレス加算の処理を修正しました。値型のロード/ストア分解時に大きな配列インデックスでアクセスする場合に発生していた問題を解決します。

修正前は以下の問題が発生していました:

  • AOT コンパイル時のADDエミット時にアサーション失敗
  • JITのピープホール最適化パスでLEA命令に変換される際に変位が切り詰められていた

修正後は、オーバーサイズの定数をOP_I8CONSTで実体化し、ピープホール最適化とレジスタ割り当て前のロアリング段階でレジスタ間のOP_LADDを使用します。即値でエンコード可能な加算は変わりません。

#134920 Move full browser WASM R2R library tests to libraries outerloop

@radekdoulik・GitHub・arch-wasmarea-Infrastructure

WebAssembly用の完全なトリミング済みCoreCLR ReadyToRun (R2R)ライブラリテストレーンを、スケジュール済みのruntime-extra-platformsパイプラインからruntime-libraries-coreclr outerloopパイプラインへ移行します。このテストレーンはLinuxで実行され、既存のブラウザWASM解釈器アウターループレーン同様にtestScope: allを使用しながら、トリミングとR2R公開を保持します。

#134898 Fix Enum.Equals folding for shared-generic nested enums

@Copilot・GitHub・area-CodeGen-coreclr

共有ジェネリック型の入れ子Enum(例:C<string>.EとC<object>.E)において、Enum.Equalsが異なるランタイム型にもかかわらず正規ハンドルが一致することで誤った等値判定を行う問題を修正しました。JITがペイロード比較へのfolding前に共有インスタンス型を拒否するガードロジックを追加し、Enum.HasFlagの既存ガードと一貫させています。

#134875 Use internal metadata interfaces in CoreCLR

@davidwrighton・GitHub・area-VM-coreclr

CoreCLRのメタデータAPI実装をレガシーな公開インターフェース(IMetaDataTables、IMetaDataEmitなど)から内部インターフェース(IMDInternalImport、IMDInternalEmit)へ移行する包括的なリファクタリング。プロファイラーが無効な環境(特にWebAssembly)ではメタデータ永続化、検査用インターフェース、未使用のメタデータ操作を削除し、バイナリサイズを大幅削減します。

#134874 [wasi] Use the <entry>.r2r.wasm composite owner name on WASI

@lewing・GitHub・arch-wasmarea-ReadyToRunos-wasi

WASIのComposite ReadyToRun(R2R)イメージの所有者名をcomposite-r2r.wasmから<entry>.r2r.wasm(メインアセンブリ名)に統一する変更です。これによってWASIはブラウザComposite実装と同じ命名規約を採用し、SDK移行時の二重管理を回避します。Composite所有者名はクロスジェン2により書き込まれたファイル名が唯一の権威となり、WASIホストはこの名前をバッファに記録して、要求されたCompositeが一致する場合のみ提供します。

#134873 Decouple createdump from the DAC PAL

@max-charlamb・GitHub・area-Diagnostics-coreclr

createdumpツールをDACの依存関係から分離し、PALとリモートアンワインド機能を直接Unix createdump実行可能ファイルにリンクするようにリファクタリングしました。これにより、createdumpはlibmscordaccoreを経由せずにPALサービスを直接初期化・終了できるようになり、DAC PAL転送レイヤーと重複するローカルPAL APIは削除されています。

#134871 Fix DateTime.ToUniversalTime for invalid local times in the DST gap

@tarekgh・GitHub・regression-from-last-releasearea-System.DateTime

DateTime.ToUniversalTime()がDST春時間変化による無効な時刻(DST gap)に対して誤った結果を返していた回帰を修正しました。無効なローカル時刻をUTC時刻に変換する際、UTC オフセットを加算していたのを減算に修正することで、正確な変換結果を実現します。

例:W. Europe標準時で02:30が03:30Zではなく01:30Zに正しく変換されるようになりました。

#134851 Fix segment GC total memory accounting

@kkokosa・GitHub・area-GC-coreclr

Segment GCにおいて、Gen0メモリ計算がエフェメラルセグメント開始位置から測定されていたため、昇格されたGen1/Gen2オブジェクトが重複してカウントされ、GC.GetTotalMemory()の戻り値が過大報告される問題を修正します。Gen0の実際の割り当て開始位置から測定するよう修正し、昇格されたオブジェクトを含む回帰テストを追加します。

#134845 Align TAR extraction destination handling with ZIP

@rzikm・GitHub・breaking-changearea-System.Formats.Tar

TAR抽出時に宛先ディレクトリの存在を必須としていた動作をZIP抽出と統一し、存在しない宛先への抽出をサポートするようにしました。8つのオーバーロード(同期/非同期、ファイル/ストリーム入力、bool overwriteFiles/TarExtractOptions)全てで宛先の自動作成が可能になります。空のアーカイブの場合は遅延ディレクトリ作成の動作を維持します。

#134838 Fix NativeAOT EventPipe use-after-free by waiting for active writers

@Copilot・GitHub・area-Tracing-coreclr

NativeAOT の EventPipe で発生していた use-after-free バグを修正します。EP_YIELD_WHILE マクロがno-opだったため、EventPipe リーダーがバッファを消費・解放する際にライターがまだそのバッファを使用している状態が発生していました。

本修正では、条件を再チェックするループでライターの同期を復元し、バッファ受け渡し時とセッションシャットダウン時の待機を機能させます。また、PalSwitchToThread に基づく NativeAOT アダプタヘルパーを追加し、リーダーの待機中にライターが進行できるようにします。

#134808 Add configurable Wasm debug information output

@davidwrighton・GitHub・area-ReadyToRun

WebAssembly ReadyToRun生成時のデバッグ情報出力を設定可能にする機能を追加しました。新しい --wasm-debug-info Crossgen2オプションで、デバッグ情報の出力形式を none、name、symbol-map、all、またはそれらの組み合わせで指定できます。デフォルトは既存の name セクション保持形式を維持し、Emscripten互換の .symbols サイドカーファイルを出力します。

#134728 Fix generic struct field marshalling

@jkoritzinsky・GitHub・area-Interop-coreclr

.NET 11のリグレッションを修正します。クローズド型のジェネリック構造体をフィールドとして持つ非ジェネリック構造体が、組み込みの逆P/Invoke マーシャリング中に失敗していた問題に対応します。

内部構造体マーシャラーが公開API Marshal.SizeOf<T>() を呼び出していましたが、このメソッドのジェネリック型制限が既存のフィールドマーシャリング互換性より厳密だったため、ArgumentException がスローされていました。マーシャラーをCoreClrの内部サイズヘルパーを使用する実装に変更し、既存の列挙型処理と公開API制限を維持しました。

#134668 Extend extend tail dup to get more ccmp

@dhartglassMSFT・GitHub・area-CodeGen-coreclr

JITコンパイラがo is int || o is uint || o is longのような条件式で条件付き比較(CCMP)最適化を見逃していた問題を修正します。テイルデュプリケーション(tail duplication)ヒューリスティックと前方代入(forward substitution)を拡張し、ローカル変数間のコピーを経由した比較を最適化できるようにしました。

#134641 Fix PHA-not-offered check in NegotiateClientCertificateAsync on OpenSSL 1.1

@caraioniurie47・GitHub・area-System.Net.Securitycommunity-contribution

OpenSSL 1.1でTLS 1.3のポストハンドシェイク認証が提供されていない場合、NegotiateClientCertificateAsyncが正しくエラーコードを解析できず例外をスローしていた問題を修正。OpenSSL 3とOpenSSL 1.1のエラーコードレイアウトの違い(lib << 23 | reason vs lib << 24 | func << 12 | reason)に対応し、ランタイム時にロードされたOpenSSLのバージョンに応じた正しい解析を実装。

#134618 [wasm][coreclr] Enable composite ReadyToRun publishing

@lewing・GitHub・arch-wasmarea-Host

CoreCLR browser-WASM環境でWebCIL有効時のComposite ReadyToRun (R2R)公開を実装しました。Compositeはオプトインであり、デフォルトのアセンブリ単位R2Rモードは変更されません。Composite所有者(<entry>.r2r.wasm)を静的Webアセットとして公開し、ローダーが初期化前にロードします。コンポーネントスタブはTPA(Trust Path Assembly)に保持され、Composite/per-assemblyモード切り替え時の無効化とスタブの整理を実装しています。

#134611 [wasm] Use GetDelegateCtor for CoreCLR R2R delegate construction

@lewing・GitHub・arch-wasmtenet-performancearea-ReadyToRun

Browser-Wasm ReadyToRun環境でデリゲートコンストラクタの最適化を有効化します。これまでWasm ReadyToRunは動的に生成されるREADYTORUN_DELEGATE_CTORヘルパーを使用できず、インタープリタを通じた低速な実行時実装を呼び出していました。本変更により、WasmはJITと同じGetDelegateCtor変換パスを使用し、Crossgen2がコンテキストに応じてDelegate.CtorClosedまたはDelegate.DelegateConstructを選択します。

#134058 [libs] Include pthread.h where pthread_once is used

@maximmenshikov・GitHub・area-System.Securitycommunity-contribution

OpenSSL 3.5との互換性問題を修正するためのPull Requestです。pal_hmac.cがpthread_once_tとPTHREAD_ONCE_INITを使用していながら、pthread.hを直接インクルードしていませんでした。OpenSSL 3.5ではOpenSSLヘッダがpthread.hを引き込まなくなったため、コンパイルエラーが発生していました。修正はpthread.hを直接インクルードすることで、既に同じアプローチを採っているpal_evp.c、opensslshim.c、pal_bio.cと統一します。

#133174 Skip peer certificate revalidation on resumed TLS sessions by default

@rzikm・GitHub・area-System.Net.Securitybreaking-change

このPRは、SslStreamがTLSセッション再開時の証明書再検証動作を変更します。再開(短縮)ハンドシェイク中、ピアは証明書を再送信せず、その身元は元のセッションチケット/セッションIDを作成した完全ハンドシェイク時に確立・検証済みです。デフォルトでは、再開された初期ハンドシェイク時にチェーン構築とユーザー検証コールバックをスキップし、OpenSSLやSChannelなどの標準TLSスタックの動作に合わせます。AppContext設定System.Net.Security.RevalidateCertificateOnTlsResumeで従前の動作に戻すことができます。

目次