Pull Request on 2026年07月23日

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

注意点

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


目次

  1. #131287 [wasm] Fix R2R codegen trap on async try/return/catch normal-completion branch
  2. #131279 [wasm] Restrict enclosing-try throw-helper attach to the same funclet
  3. #131257 Add missing check for corrupted central directory
  4. #131246 [wasm] Emit the 'V' thunk signature-key char for Vector128<T>/Vector<T> args
  5. #131243 [wasm] Fix R2R stackwalk for inline P/Invoke frames and composite-image RVA base
  6. #131242 Make AiaCompletionHasLimits handle Windows variance
  7. #131239 Fill WASM SIMD gaps: Base64 vectorization and byte/ushort LeadingZeroCount
  8. #131238 Disable FullPdbThrower test in ilasm round trip testing
  9. #131237 JIT: Fix WASM scalar extraction from SIMD parameters
  10. #131236 Fix nested exception handler reachability in ILLink
  11. #131235 Fix handling of non-ASCII data in indefinite strings
  12. #131227 JIT: recognize generic Vector128 intrinsics on wasm
  13. #131224 [release/11.0-preview7] Update BootJsonData generation to account for runtimeconfig.dev.json
  14. #131212 Replace Newtonsoft with System.Text.Json for generating RID graph
  15. #131205 Fix exponent/significand cohort comparison for differing byte lengths
  16. #131191 [release/11.0-preview7] Throw PNSE for Extended Protection on unsupported platforms
  17. #131186 Fix incorrect fprintf format string
  18. #131183 Fix issues flagged by compiling clr.aot with clang on Windows
  19. #131172 Fix Mono LLVM lowering of MinNumber/MaxNumber to preserve the sign of zero
  20. #131171 Fix 130437 testcase for gcstress
  21. #131163 Fix EH - throw from catch in UnmanagedCallersOnly
  22. #131153 Add an experimental option to avoid partitioning the connection pool by SNI
  23. #131115 Enable CoreCLR for linux-bionic platforms and include singlefilehost in AppHost pack
  24. #131049 [mono][wasm][AOT] Generate gsharedvt out-sig wrappers for Nullable<T>.Box/Unbox
  25. #131016 [wasm][coreCLR] R2R: VM-side load of a flat webcil composite image
  26. #130980 Add ARM64 FP register debug info support
  27. #130958 [LoongArch64] Fix the m_usComponentSize load in RhpNewArrayFast.
  28. #130932 Fix address sanitizer issues
  29. #130824 Compact NativeAOT dispatch cell info encoding
  30. #130758 Implement channel binding support on Unix
  31. #130506 Add runtime async tests for catching non-Exception throws
  32. #130413 [r2r] Add support for compiling szarray methods
  33. #130372 System.Native: Stop using EV_RECEIPT in the kevent code
  34. #130366 Add low-level TLS state machine API (TlsContext / TlsSession)
  35. #130007 Clear some stale GTF_ORDER_SIDEEFF flags
  36. #129761 Add ISOSDacInterface18 for GCInfo inspection APIs
  37. #129019 Call into PerfMap logic exclusively in preemptive mode
  38. #126733 [ILLink] Add regression test for KeyNotFoundException crash in async partial methods with capturing lambdas

#131287 [wasm] Fix R2R codegen trap on async try/return/catch normal-completion branch

  • 作成者: @lewing
  • 作成日時: 2026年07月23日 19:17:37(UTC)
  • マージ日時: 2026年07月23日 22:56:25(UTC)
  • ラベル: area-CodeGen-coreclr

概要

WebAssembly R2R (crossgen) で、async メソッド内の try { ...; return; } catch { } パターンにおいて、try ブロックが早期に return で抜ける場合に有効な wasm モジュールが実行時に RuntimeError: unreachable でトラップしていた問題を修正しました。

根本原因は Compiler::fgWasmControlFlow() で、外側の catch-try を跨ぐ非連続な前方分岐が最内層の try 位置で wasm Block を開始していたことです。修正では、外側の catch-try の開始位置で Block を開始することで、分岐が正しい継続アドレスに解決されるようにしました。

変更内容

  • fgwasm.cpp: Compiler::fgWasmControlFlow() で分岐時に try 領域をスキャンする際、最内層ではなく最外層の脱出 catch-try の開始位置から Block を開始するロジックを追加(+29/-4)
  • Runtime_131285.cs: 正常系の return パスを通るテストケースを追加。async Task の MoveNext を同期的にドライブ(+50/-0)
  • Runtime_131285.csproj: WebAssembly ターゲットで <AlwaysUseCrossGen2>true</AlwaysUseCrossGen2> を設定し、wasm R2R コンパイルを強制(+16/-0)

パフォーマンスへの影響

影響なし。本修正は制御フロー構造の正確性に関するバグ修正であり、パフォーマンス関連の変更ではありません。

関連Issue

#131285 - 本修正の対象 Issue

その他

  • 194 アセンブリの包括的なテストにより、新規の無効モジュル生成はなく、185 個は byte-identical で変更なし
  • 単一レベルの try/catch では動作が変わらないことを確認済み
  • 本修正は #131279 や #129335 と異なる問題を解決(それらはモジュール自体が無効でしたが、本件は有効だが実行時トラップ)

#131279 [wasm] Restrict enclosing-try throw-helper attach to the same funclet

  • 作成者: @lewing
  • 作成日時: 2026年07月23日 17:22:29(UTC)
  • マージ日時: 2026年07月23日 23:02:30(UTC)
  • ラベル: area-VM-coreclr

概要

WebAssembly(wasm32) R2R モジュール生成時に、例外ハンドラー機能(funclet)の境界を超えて throw-helper ブロックが接続されることで、funclet の終了 opcode (0x0b) が欠落し無効な WASM が生成される問題を修正。bbInTryRegions は字句的な try ネストのみをテストし、実際の関数領域(funclet)の所属を確認していなかったため、外側の try 領域の helper が別の handler funclet 内の side-entry に接続され、RPO レイアウト時に main method helper が funclet 内に埋め込まれていた。

変更内容

  • src/coreclr/jit/compiler.h: funcRegionOf ラムダ関数の宣言を追加(+1 行)
  • src/coreclr/jit/compiler.hpp: funcRegionOf ラムダの実装を追加。任意のブロックが属する funclet インデックス(0=main method)を計算し、filter funclet と filter-handler を区別(+32 行)
  • src/coreclr/jit/fgwasm.h: FgWasm::VisitWasmSuccs で enclosing-try リラックスを同じ関数領域内のマッチのみに制限。viaEnclosingTry フラグで enclosing-try マッチを追跡し、helper が side-entry と同じ function region に属する場合のみ attach(+12/-1 行)

パフォーマンスへの影響

影響なし。本変更はブロックレイアウトの正確性を修正するもので、生成コードのパフォーマンス特性は変わらない。

関連Issue

#131252(同じ corrupted レイアウトによる branch target depth の誤計算)、#130945(enclosing-try マッチを導入)、#129335(不完全な先行者)、#131251(本 PR により supersede)

その他

  • 本修正は原因(レイアウト)を直し、終端 opcode 欠落の影響を硬化させた #131251 に優先される
  • 検証: System.Data.Common R2R wasm crossgen(release JIT)で wasm-tools validate が baseline では fail から本修正で pass に改善
  • 将来の改善案(本 PR 外): funclet のブロックが連続した RPO 範囲を形成することを JIT コンパイル時に検証し、レイアウト誤りをコンパイル段階で検出する assert 追加

#131257 Add missing check for corrupted central directory

概要

ZipArchive の中央ディレクトリ破損チェックが不足していた問題を修正しました。非同期読み込みと同期読み込みの両方のパスで、破損した中央ディレクトリを検出するための検証処理を追加しています。

変更内容

  • ZipArchiveEntry.cs: 同期読み込み時に中央ディレクトリの破損チェックを追加(+9行)
  • ZipArchiveEntry.Async.cs: 非同期読み込み時に中央ディレクトリの破損チェックを追加(+9行)
  • zip_InvalidParametersAndStrangeFiles.cs: 破損したZipアーカイブに対するテストケースを新規追加(+49行)

パフォーマンスへの影響

影響なし

関連Issue

#131228

その他

なし


#131246 [wasm] Emit the 'V' thunk signature-key char for Vector128<T>/Vector<T> args

  • 作成者: @lewing
  • 作成日時: 2026年07月23日 00:08:15(UTC)
  • マージ日時: 2026年07月23日 03:38:12(UTC)
  • ラベル: area-VM-coreclr

概要

WebAssembly(WASM)上での相互運用性向上のため、Vector128<T>と16バイトVector<T>パラメータの署名キー生成を修正するPRです。crossgen2が生成するinterp→R2Rサンク('V')とVM実行時の署名キー生成の不一致により、ベクトル型を値で渡すinterp→R2R呼び出しが失敗していた問題を解決します。

変更内容

  • src/coreclr/vm/wasm/helpers.cpp:新しいConvertType::ToV128分類を追加。サポートされるベクトル基本型(Vector128<T>または16バイトVector<T>)を検出し、署名キー生成時に'V'文字で出力。単一フィールド構造体でv128をラップしている場合も再帰的に処理してマッチングをサポート。
  • docs/design/coreclr/botr/readytorun-format.md:'V'パラメータの説明を追加。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • WASI CoreCLR(clr -os wasi -c Release)で検証済み。
  • System.Runtime.CompilerServices.UnsafeライブラリのR2R テストスイート(128/128)で検証済み。以前は署名キー不一致によるサンク欠落エラーで失敗していたが、本修正により解決。
  • JITのTYP_SIMD16認識とcrossgen2のWasmLowering.IsWasmV128Typeの動作と整合。

#131243 [wasm] Fix R2R stackwalk for inline P/Invoke frames and composite-image RVA base

  • 作成者: @lewing
  • 作成日時: 2026年07月22日 23:45:26(UTC)
  • マージ日時: 2026年07月23日 19:52:54(UTC)
  • ラベル: area-VM-coreclr

概要

WebAssembly限定のReadyToRun (R2R) スタックウォーク修正。R2Rコンパイル済みマネージドコードが例外アンワインドやGetCallersAssembly、Assembly.Loadなどのスタックウォーク処理に参加する際に発生していた2つの正確性の問題を解決します。

変更内容

  • Inline P/Invoke sentinel解決 (stackwalk.cpp, frames.h, helpers.cpp): R2R inline P/Invokeフレームのセンチネルリターンアドレス(INLINED_PINVOKE_FROM_R2R)をProcessIp呼び出し前に実際の仮想IPに変換。センチネル定数をヘルパー定義からframes.hの型付きstatic constexprへ移動し、スタックウォーカーからアクセス可能に。

  • Composite R2R画像RVAベース修正 (codeman.inl): JitTokenToModuleRVABaseがILモジュールベースを使用していた(複合R2R画像の場合は誤り)のに対し、R2R画像ベース(ReadyToRunInfo()->GetImage()->GetBase())を正しく使用するよう修正。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • WASI CoreCLR ビルド検証済み:エラー0件
  • Assembly.Load/GetExecutingAssemblyの最小限なR2R再現ケースでエンドツーエンド検証済み(修正前はStackFrameIteratorで無限ループしていた)
  • 本PRはGitHub Copilotの協力により作成

#131242 Make AiaCompletionHasLimits handle Windows variance

  • 作成者: @bartonjs
  • 作成日時: 2026年07月22日 23:35:44(UTC)
  • マージ日時: 2026年07月23日 21:09:02(UTC)
  • ラベル: area-System.Security

概要

Windows環境におけるAIA(Authority Information Access)証明書の取得制限の検証テストをWindowsの動作バリエーションに対応させました。テスト対象のWindowsバージョンによって1回のX509Chain.Build呼び出しで取得可能なAIA証明書数が異なる問題(2個 vs 3個)に対応し、テストの不安定性を軽減します。

変更内容

  • AiaTests.cs:
    • 生成される中間CA チェーン長を6から8に増加
    • 最初のBuild後に4個または5個のチェーン要素の両方を受け入れるロジックを追加
    • 後続の予期される数値とエクストラストアのクローン処理を調整
    • 最終チェーンの期待値を10要素に更新(より長いチェーンに対応)

パフォーマンスへの影響

影響なし(テストの安定性向上のみで、ランタイム動作への変更なし)

関連Issue

#130947

その他

注記事項:

  • このはテスト修正であり、ライブラリの公開APIやランタイムの動作変更ではありません
  • Windows 11 25H2 26200.8893で検証済み
  • Copilotのレビューコメント指摘:RetryHelper.Executeがアサーション失敗を含むすべての例外で再試行するため、キャッシング動作により予期しない結果が生じる可能性があります。アサーション失敗以外のみに再試行を限定することを検討する価値があります

#131239 Fill WASM SIMD gaps: Base64 vectorization and byte/ushort LeadingZeroCount

概要

WebAssembly SIMD(PackedSimd)カバレッジを拡大する変更。Base64エンコード/デコードをPackedSimdで加速し、byte/ushort型のLeadingZeroCountに対して、ビット操作とPopCountを用いたソフトウェアベクトル フォールバックを追加します。RyuJIT WASM バックエンドに基づく監査で、x86/Armのみ対応していたコードがWASM上でスカラパスに落ちていた本質的なギャップを修正します。

変更内容

  • Base64EncoderHelper.cs: Vector128エンコードゲートにPackedSimdを追加。SimdShuffle→PackedSimd.Swizzle、SubtractSaturate→PackedSimd.SubtractSaturateへのマッピングを実装。pmaddubsw/pmaddwd操作をビットシフトで エミュレートしSSSE3/AdvSimd同等の動作をPackedSimdで再現。
  • Base64DecoderHelper.cs: Vector128デコードゲートにPackedSimdを追加。PackedSimdベースのSwizzle実装でSSSE3/AdvSimdシーマンティクスに合わせる。
  • TensorPrimitives.LeadingZeroCount.cs: byte/ushort型のソフトウェアベクトルフォールバックを追加。MSBを下位ビットまで伝播させてからPopCountで先頭ゼロ数を計算。uint/ulongはハードウェアベクトルclz経路を維持(レーン数が少なく、ソフトウェアフォールバックはコストが高い)。

新しいPackedSimdブランチはJIT時に定数値に畳み込まれるため、x86/Armコード生成への影響はなし(オフWASMで削除)。

パフォーマンスへの影響

Base64: WASM上で以前はスカラパスに落ちていたコードがベクトル化され、エンコード/デコード性能が向上。

LeadingZeroCount:

  • byte: 3.27倍 改善(16レーン/V128)
  • ushort: 1.45倍 改善(8レーン/V128)
  • uint/ulong: 単命令スカラ型clz(x86 lzcnt、WASM i32/i64.clz)との比較で、シリアル依存チェーンのコスト見合いが悪いため、ハードウェアclz非対応環境でもスカラのまま。

関連Issue

なし

その他

  • Base64のエミュレーション(pmaddubswなど)はSse2/Ssse3イントリンシクスに対して、ランダム入力でビット完全一致検証済み。
  • 監査対象68ファイルのうち、既にWASM明示対応24ファイル、クロスプラットフォーム対応20ファイル、本PR修正4ファイル。残りはスカラ性質またはx86専用最適化(PackedIndexOf関連など、Arm回帰リスクのため有意的にx86限定)。

#131238 Disable FullPdbThrower test in ilasm round trip testing

概要

FullPdbThrowerテストプロジェクトをilasm round-trip テストから除外する変更です。ilasmはポータブルPDBのみをサポートしているのに対し、このプロジェクトはWindows形式の「Full」(クラシック)PDBを生成するため、互換性がありません。

変更内容

  • FullPdbThrower.csproj: <IlasmRoundTripIncompatible>true</IlasmRoundTripIncompatible>を追加し、ilasm round-trip テスト対象外に指定
  • プロジェクト設定周辺のコメントを更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更はテスト設定の修正であり、ランタイムやコンパイラの動作には影響しません。ilasmとの互換性の問題を排除することで、テストスイートの適切な実行を確保します。


#131237 JIT: Fix WASM scalar extraction from SIMD parameters

  • 作成者: @lewing
  • 作成日時: 2026年07月22日 21:54:30(UTC)
  • マージ日時: 2026年07月23日 02:29:07(UTC)
  • ラベル: area-VM-coreclr

概要

WASM JITコード生成のバグを修正しました。SIMD レジスタパラメータからスカラーフィールドを抽出する際に、不正なv128型が生成されていた問題を解決しています。

修正内容:SIMD ローカルからスカラーを抽出する際、WASM ではgtNewSimdGetElementNodeを使用して明示的なレーン抽出を行うことで、ネイティブターゲットの暗黙的な型再解釈に依存しない実装に改めました。

// 例:SIMD パラメータからスカラーフィールド抽出時
// 修正前:v128 ローカルを直接スカラー型として読み取り(型エラー)
// 修正後:extract_lane 操作を用いた明示的な抽出

変更内容

  • src/coreclr/jit/lower.cpp(+16/-0)
    • Lowering::FindInducedParameterRegisterLocalsにTARGET_WASM固有のパスを追加
    • SIMD ローカルがスカラー型として読み取られる場合、gtNewSimdGetElementNodeでレーン 0 からのスカラー抽出を生成
    • 非 WASM ターゲットは既存の動作を保持

パフォーマンスへの影響

影響なし(正確なコード生成によるWASM移植性の向上が目的)

関連Issue

#130444、#131174

その他

  • 検証済み:WASM JIT コンパイルおよびコード形式チェック完了
  • 現在、WASM R2R用の CI 検証ステップがないため、専用の回帰テストは未実装
  • GitHub Copilot の支援により作成されたPR

#131236 Fix nested exception handler reachability in ILLink

概要

ILLink の到達不可能ブロック最適化器における例外ハンドラの到達可能性分析を修正しました。従来は handlers が1回のみスキャンされていたため、ネストされたハンドラがそれを囲むハンドラ本体の走査前に到達不可能と分類され、必要なクリーンアップコードが誤って削除されていました。修正により、新たに到達可能になったハンドラボディによって追加のネストされた保護領域が公開されるまで、handlers を反復的に再スキャンするようになります。

変更内容

  • UnreachableBlocksOptimizer.cs: 例外ハンドラ(およびフィルタ)ブロックの到達可能性分析を改善。新たに到達可能になったハンドラボディを反復的にキューに追加し、固定点に達するまでスキャンを繰り返すことで、ネストされた保護領域の正確な検出を実現。
  • NestedFinallyInFinallyHandler.cs: ネストされた finally ブロック を持つ async メソッドの回帰テストを追加。ipconstprop 有効時にネストされたクリーンアップの実行を検証します。
  • ILTrimExpectedFailures.txt: テストケース関連の更新。

パフォーマンスへの影響

影響なし

関連Issue

#131088

その他

  • テスト実績: Mono.Linker UnreachableBlock テスト 22 件合格、全テストスイート 1,134 件合格・30 件スキップ
  • 修正により、ipconstprop 有効・無効に関わらず、元のスタンドアロン再現ケースが同一動作を示すことを確認

#131235 Fix handling of non-ASCII data in indefinite strings

概要

CborReader.TryReadTextStringにおいて、非ASCII UTF-8データを含む不定長連結テキスト文字列の処理を修正しました。チャンクごとの宛先スパン進行が、チャンクのバイト長ではなく、実際に書き込まれた文字数で行われるよう改正し、ReadTextStringとTryReadTextStringの動作を一致させます。

変更内容

  • CborReader.String.cs: TryReadIndefiniteLengthTextStringConcatenated内のスパン進行ロジックを修正。チャンクのバイト長ではなくchunkCharsWritten(実際の文字数)でスライスするよう変更
  • CborReaderTests.TextString.cs: テストベクトルの拡張。Latin-1、ドイツ語ウムラウト、キリル文字などの非ASCIIケースを複数追加。TryReadTextStringとReadTextStringのパリティ検証を強化(非正規長、不正データ、サイズ超過、空入力、無効なUTF-8チャンキングなど)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正は、多バイトUTF-8シーケンスを含む不定長連結テキスト文字列処理におけるバグ修正です。これまでTryReadTextStringの動作がReadTextStringと異なっていた問題を解決し、APIの一貫性を確保しています。


#131227 JIT: recognize generic Vector128 intrinsics on wasm

概要

WebAssemblyプラットフォーム上のJITコンパイラが、ジェネリック型のVector128<T>(型名:Vector128\1)をVector128組み込み関数として認識できるように拡張した変更です。従来は非ジェネリックのVector128`のみに対応していました。

変更内容

  • src/coreclr/jit/hwintrinsicwasm.cpp: Compiler::lookupInstructionSetメソッドをWASMターゲット向けに拡張し、"Vector128\1"(ジェネリック型)をInstructionSet_Vector128`として認識するように対応。これにより、importerが提示するジェネリックベクトルクラス名と一貫性を持たせました。

パフォーマンスへの影響

影響なし(JIT認識拡張に伴う構造的な最適化ではなく、型名マッピングの補完)

関連Issue

なし

その他

この変更は、WebAssemblyプラットフォーム上でジェネリックVector128<T>を使用する際の組み込み関数の認識をより適切に行うための内部実装の修正です。公開APIには影響を与えません。


#131224 [release/11.0-preview7] Update BootJsonData generation to account for runtimeconfig.dev.json

概要

WebAssembly BootJSON データの生成を、runtimeconfig.dev.json ファイルを考慮するように更新します。これは PR #130825 の release/11.0-preview7 ブランチへのバックポートです。

変更内容

  • GenerateWasmBootJson.cs: BootJSON 生成ロジックを拡張し、runtimeconfig.dev.json ファイルの存在と内容を処理するよう変更(+35/-6)
  • GenerateWasmBootJsonTests.cs: 新規テストファイルを追加、BootJSON 生成時の runtimeconfig.dev.json 対応をカバー(+183 行)
  • Microsoft.NET.Sdk.WebAssembly.Browser.targets: ビルド構成を調整(+2/-1)
  • プロジェクトファイル: テスト参照と依存関係を追加

パフォーマンスへの影響

影響なし

関連Issue

#130825

その他

本変更は backport PR であり、.NET 11.0-preview7 への取り込みです。WebAssembly Pack タスク関連の修正で、開発時のランタイム設定ファイルが正しく BootJSON に反映されるようになります。


#131212 Replace Newtonsoft with System.Text.Json for generating RID graph

  • 作成者: @kasperk81
  • 作成日時: 2026年07月22日 13:16:08(UTC)
  • マージ日時: 2026年07月23日 17:12:52(UTC)
  • ラベル: area-Meta

概要

Newtonsoft.Jsonの依存関係をSystem.Text.Jsonに置き換え、RID(Runtime Identifier)グラフ生成ツールを更新しました。これにより、不要な外部依存関係を削除し、.NETの標準JSON処理ライブラリを活用します。

変更内容

  • Microsoft.NETCore.Platforms.csproj: Newtonsoft.Json NuGetパッケージ参照を削除
  • UpdateRuntimeIdentifierGraph.cs: JSON処理をSystem.Text.Jsonを使用するよう変更(+10/-12行)
  • PortableRuntimeIdentifierGraph.json: 生成されたRIDグラフJSON(+490/-490行、フォーマット変更の可能性)

パフォーマンスへの影響

影響なし(ビルド時ツールの変更であり、ランタイムパフォーマンスには影響なし)

関連Issue

なし

その他

  • System.Text.Jsonへの置き換えにより、ビルド時の依存関係が簡潔化されます
  • JSONフォーマットの変更(行数変動)は、System.Text.Jsonの標準的なシリアライゼーション動作によるものと考えられます

#131205 Fix exponent/significand cohort comparison for differing byte lengths

概要

TotalOrderIeee754Comparer<T>の汎用比較ロジックにおいて、指数と仮数のバイト長が異なる場合の正確性バグを修正します。カスタムIFloatingPointIeee754<T>実装でGetExponentByteCount()が可変長の値を返す場合、従来の MSB フリップ + SequenceCompareTo トリックが正しい符号付き二進法補数の順序を保証していませんでした。本修正により、異なるバイト長のビッグエンディアン符号化を正確に比較し、さらに効率的な高速パスを追加します。

変更内容

  • System/Numerics/TotalOrderIeee754Comparer.cs

    • 新しい共有ヘルパーCompareMagnitudeBigEndian(x, y, fill)を追加:異なる長さのビッグエンディアン大きさを正確に比較(短い方のスパンをfillで符号/ゼロ拡張)
    • CompareExponentに最短ビット長ベースの高速パスを追加:ビット長不一致で同一符号の比較を即決、ビット長 0 でゼロ値を直ちに識別
    • CompareSignificandの等ビット長分岐を新しいヘルパーを使用するよう更新
  • System.Runtime.Tests/System/Numerics/TotalOrderIeee754ComparerTests.cs

    • StubFloatingPointIeee754Cohortを追加:同一長・異なる長・クロスサイン・反転・ゼロビット長高速パスをテスト
    • SingleWrapper/DoubleWrapperテスト型を追加:実float/doubleをラップして汎用パスを強制し、binary32/64 の totalOrder セマンティクスと結果を検証

パフォーマンスへの影響

改善点:

  • ビット長ベースの高速パス追加により、異なるバイト長の指数比較で完全なバイト走査を回避可能
  • ゼロビット長(ゼロ値)の直接判定により、ゼロ値との比較が即座に決定される

影響範囲:

  • 組み込み型(float、double、Half、BFloat16など)には影響なし(Compareで先に高速パスされる)
  • 汎用パスに到達するカスタムIFloatingPointIeee754<T>実装のみが対象

関連Issue

#131087

その他

  • テスト検証:修正前のコードを戻すと8つの失敗が再現される(符号の反転バグ)、修正後は全188テストがパス
  • 本修正はカスタム浮動小数点型の実装者のみに影響し、標準的なfloat/doubleユーザーへの影響はありません

#131191 [release/11.0-preview7] Throw PNSE for Extended Protection on unsupported platforms

概要

NegotiateStream と NegotiateAuthentication が Extended Protection をサポートしていないプラットフォームで PlatformNotSupportedException (PNSE) を正しく投げるように修正しました。ドキュメント化された動作に合わせるための変更です。

変更内容

  • System.Net.Security/src/Resources/Strings.resx: Extended Protection 非サポート時のエラーメッセージを追加(3行追加)
  • System.Net.Security/src/System/Net/Security/NegotiateAuthentication.cs: Extended Protection が利用不可なプラットフォームで PlatformNotSupportedException を投げるロジックを追加(6行追加)
  • System.Net.Security/tests/UnitTests/NegotiateAuthenticationTests.cs: 新しいテストケースを追加し、非サポートプラットフォームでの例外投出動作を検証(8行追加)

パフォーマンスへの影響

影響なし

関連Issue

#131144(本PRのバックポート元)

その他

  • これは release/11.0-preview7 ブランチへのバックポートです
  • リスクレベルは低く、変更内容が限定的で理解しやすいものとなっています
  • 回帰なしと判定されています

#131186 Fix incorrect fprintf format string

概要

Windows環境でのICU shimコンポーネントにおけるfprintfフォーマット文字列の不一致を修正しました。GetLastError()の値を出力する際に、正しい長さ修飾子を使用するようにしました。

変更内容

  • src/native/libs/System.Globalization.Native/pal_icushim.c: Windows固有のPER_FUNCTION_BLOCKエラーパスで、GetLastError()の出力フォーマット指定子を%uから%luに変更(1行修正)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

clangコンパイラの警告により検出されたWindows固有の問題です。ネイティブコード(C言語)の修正であり、System.Globalization.Nativeライブラリ(内部実装)に影響します。


#131183 Fix issues flagged by compiling clr.aot with clang on Windows

概要

clang を使用して Windows 上で clr.aot をコンパイルする際に発生する符号付き/符号なし整数型の比較に関する警告を修正しました。主に型キャストやリテラル値の型指定を調整して、Windows コンパイラの厳密な警告設定(/we4018、-Wsign-compare)に対応しています。

変更内容

  • src/coreclr/jit/utils.cpp: 符号付き/符号なし整数型の比較を修正
  • src/coreclr/nativeaot/Runtime/windows/CoffNativeCodeManager.h: 型キャスト調整
  • src/coreclr/nativeaot/Runtime/windows/PalMinWin.cpp: 型の不一致を修正
  • src/coreclr/utilcode/debug.cpp: 符号付き/符号なし比較の修正
  • src/coreclr/utilcode/pedecoder.cpp: 型キャストまたはリテラル値の型指定調整
  • src/coreclr/utilcode/stacktrace.cpp: 符号付き/符号なし比較の修正
  • src/native/minipal/guid.c: 型キャスト調整
  • src/native/minipal/xoshiro128pp.c: リテラル値の型指定調整

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は内部実装(JIT、ネイティブ AOT ランタイム、ユーティリティコード)の修正であり、公開 API に影響しません。clang による Windows ビルド時のコンパイラ警告解決が主な目的です。


#131172 Fix Mono LLVM lowering of MinNumber/MaxNumber to preserve the sign of zero

概要

Mono LLVM バックエンドにおける MinNumber/MaxNumber の実装を修正し、IEEE 754-2019 の minimumNumber/maximumNumber セマンティクスに準拠させました。特に、ゼロの符号を正しく保持するよう改善しました。例えば MinNumber(+0.0, -0.0) は -0.0 を返すようになります。従来は llvm.minnum/maxnum を使用していましたが、ゼロの符号が未指定であったため、x86 上で minnum(+0, -0) が +0 を返していました。新たに llvm.minimumnum/maximumnum に変更し、符号を保持しつつ NaN も正しく抑制します。

変更内容

  • src/mono/mono/mini/mini-llvm.c: OP_*MINNUM/OP_*MAXNUM を llvm.minimum/llvm.maximum と明示的な NaN 修正の合成に変更。ゼロの符号を正しく処理し、AArch64 では単一の fminnm/fmaxnm 命令にコンパイルされます。
  • src/mono/mono/mini/llvm-intrinsics.h: MINNUM/MAXNUM イントリンシック定義を削除し、新しいセマンティクスに対応。
  • src/mono/mono/mini/intrinsics.c: MinNumber/MaxNumber の LLVM イントリンシック処理に関するコメントを更新。
  • src/tests/JIT/Regression/JitBlue/Runtime_130831/Runtime_130831.cs: 回帰テスト Runtime_130831 から [SkipOnMono] を削除し、Mono LLVM AOT 構成でも実行されるようにしました。

パフォーマンスへの影響

影響なし。AArch64 では引き続き単一の fminnm/fmaxnm 命令にコンパイルされ、コード生成に変化はありません。

関連Issue

#131130、#130832

その他

LLVM 20 以降で llvm.minimumnum/llvm.maximumnum が利用可能であり、Mono は LLVM 23 を使用しているため対応可能です。Min/Max は既に llvm.minimum/llvm.maximum を使用しており、正しく動作するため変更はありません。


#131171 Fix 130437 testcase for gcstress

概要

GCストレステスト時のポインタピニング問題を修正しました。テストケース GitHub_130437 で、アンマネージドポインタ型の int32* pinned ではピニングが正しく機能していなかったため(GC型でないため無視される)、マネージド byref 型の uint32& pinned / int64& pinned に変更しました。SVE2 gather 組み込み関数の呼び出し時には conv.u 命令でbyrefをアンマネージドポインタに変換して対応しています。

変更内容

  • src/tests/JIT/Regression/JitBlue/GitHub_130437/GitHub_130437.il
    • ローカル変数宣言を uint32* pinned → uint32& pinned、int64* pinned → int64& pinned に変更
    • SVE2 gather 組み込み関数呼び出し時に conv.u 命令を追加して pinned byref をアンマネージドポインタに変換

パフォーマンスへの影響

影響なし(テストケースの修正)

関連Issue

#130993、#130437

その他

この変更はJITリグレッションテストの修正であり、GCストレス条件下でのピニングの正確性確保を目的としています。アンマネージドポインタではなくマネージド byref を使用することで、ガベージコレクターによるピニングが正しく認識・尊重されるようになります。


#131163 Fix EH - throw from catch in UnmanagedCallersOnly

概要

Windows上でUnmanagedCallersOnly属性が付与されたメソッドのcatch句から例外がthrowされた場合、例外のアンワインド分類が誤って逆P/Invoke遷移として処理される問題を修正しました。この問題により同じcatch句が繰り返し呼び出され、無限ループとスタックオーバーフローが発生していました。

変更内容

  • src/coreclr/vm/exceptionhandling.cpp: EHスタックウォーク時にfunclet内のアンワイド中は逆P/Invoke GC情報のデコードをスキップするロジックを追加。funcletフレームをネイティブ遷移として誤分類することを防止します(+14/-7)
  • src/tests/baseservices/exceptions/exceptioninterop/ExceptionInterop.cs: UnmanagedCallersOnlyコールバック内のcatch句からthrowされた例外をカバーする回帰テストを追加。ネイティブ例外とマネージド例外の両方のケースに対応(Windows固有、+81/-0)

パフォーマンスへの影響

影響なし

関連Issue

#123579

その他

この修正はWindows限定の問題であり、CoreCLRの例外処理(EH)フレームワークの内部実装に関わります。UnmanagedCallersOnly属性を使用した逆P/Invokeシナリオでcatch句から例外をthrowする場合の信頼性向上につながります。


#131153 Add an experimental option to avoid partitioning the connection pool by SNI

概要

SocketsHttpHandlerのコネクションプールをSNI(Server Name Indication)で分割しない実験的オプションを追加します。これにより、異なるホストに対するTLSコネクションでも、同一IPアドレスのような共有インフラストラクチャ環境では、コネクション再利用が可能になります。

[UnsafeAccessor(UnsafeAccessorKind.Method)]
private static extern void ExperimentalDangerousDoNotPartitionConnectionPoolBySni(HttpRequestMessage request);

現在は内部APIとしての提供で、.NET 12での公開API化は将来的な検討対象です。

変更内容

  • HttpRequestMessage.cs: 内部フラグと内部メソッドを追加し、リクエストごとにSNIベースのプール分割を無効化可能
  • HttpConnectionPoolManager.cs: オプトインリクエストの場合、プールキー計算時にSslHostNameを除外
  • SocketsHttpHandlerTest.cs: HTTP/1.1、HTTP/2、HTTP/3における異なるHost/SNI変動時のコネクション再利用動作と、オプトイン非オプトイン混在時の動作を検証する機能テストを追加
  • ILLink.Descriptors.LibraryBuild.xml: UnsafeAccessor経由で呼び出される実験的メソッドをILLinkトリミングから保護

パフォーマンスへの影響

共有インフラストラクチャ環境でのコネクション再利用により、新規コネクション確立のオーバーヘッドが削減される可能性があります。ただしベンチマーク結果の具体的数値は提供されていません。

関連Issue

#128653を置き換え

その他

  • 実験的APIであり、破壊的変更の可能性あり: .NET 12での公開API化を検討する段階で仕様が変更される可能性
  • セキュリティに関する注意: メソッド名に"Dangerous"が含まれており、異なるホストのコネクション共有には慎重な判断が必要
  • UnsafeAccessorを使用した呼び出しのため、リフレクション経由での呼び出しが必要

#131115 Enable CoreCLR for linux-bionic platforms and include singlefilehost in AppHost pack

  • 作成者: @Copilot
  • 作成日時: 2026年07月20日 23:17:22(UTC)
  • マージ日時: 2026年07月23日 22:22:33(UTC)
  • ラベル: area-Host

概要

linux-bionicプラットフォーム(Termux on Android)でのシングルファイル自己完結型バイナリが、singlefilehostではなくapphostに誤ってフォールバックしていた問題を修正します。CoreCLRをlinux-bionicで有効化し、singlefilehostをAppHost packに含めることで、正常に機能する~30MBのバンドルを生成できるようにします。

変更内容

  • eng/Subsets.props:

    • linux-bionicのarm64/x64アーキテクチャでCoreClrSupportedを有効化(Androidパターンに準拠、arm/x86は除外)
    • CoreCLR対応時のDefaultSubsetsをclr+mono+libs+host+packsに更新、非対応アーキテクチャはNativeAOT-onlyにフォールバック
    • DefaultCoreClrSubsetsを追加(Android/Apple Mobileと同様:clr.native+clr.corelib+clr.tools+clr.nativecorelib+clr.packages+clr.nativeaotlibs+clr.crossarchtools)
    • linux-bionic用のRuntimeFlavor=CoreClrConditionを追加
  • src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Host.sfxproj:

    • singlefilehostのNativeRuntimeAssetアイテムから'$(TargetsLinuxBionic)' != 'true'ガードを削除(ビルド対象となるため)

パフォーマンスへの影響

影響なし(バイナリサイズの問題修正のため、バイナリサイズは適正化されます:非機能的な11MBから30MBへ)

関連Issue

なし

その他

  • この変更はlinux-bionicのarm64/x64のみを対象としており、arm/x86は引き続きNativeAOT-onlyとして処理されます
  • Androidプラットフォームのパターンに準拠した実装となっており、既存のモバイルプラットフォーム対応との一貫性を保ちます

#131049 [mono][wasm][AOT] Generate gsharedvt out-sig wrappers for Nullable<T>.Box/Unbox

  • 作成者: @lewing
  • 作成日時: 2026年07月19日 23:33:04(UTC)
  • マージ日時: 2026年07月23日 13:41:20(UTC)
  • ラベル: area-Codegen-AOT-mono

概要

Mono wasm AOT (llvmonly) 環境で、非プリミティブ構造体の Nullable<T> を非ジェネリックインターフェース(例:IEnumerator.Current → object)経由でボックス化する際にランタイムトラップが発生する問題を修正します。root cause は Nullable<T>.Box/Unbox が合成メソッドであり AOT コンパイラに見落とされ、必要な gsharedvt out-sig ラッパーが生成されないことです。修正では add_generic_class_with_depth に Nullable<T>.Box/Unbox を明示的に追加して確実に AOT コンパイルさせます。

変更内容

  • src/mono/mono/mini/aot-compiler.c: add_generic_class_with_depth 関数に Nullable<T>.Box と Nullable<T>.Unbox の合成メソッドを明示的に追加。既存の Comparer<T>/EqualityComparer<T> の特殊ケース処理に倣い、具体的な Nullable<T> インスタンス化それぞれに対してコンパイル対象に含める(+30 行)。
  • src/libraries/System.Text.Json/tests/Common/NumberHandlingTests.cs: Browser 環境でのみスキップされていた NullableInt128s/NullableUInt128s/NullableHalfs テストケースのスキップ条件を削除し、問題解決に伴い再有効化(+3/-7)。

パフォーマンスへの影響

影響なし。この修正は AOT コンパイル時に必要なラッパー関数を生成することで、ランタイムトラップを防ぎます。追加のコンパイル対象(Nullable<T>.Box/Unbox)はサイズ増加をもたらす可能性がありますが、機能性の確保が優先です。

関連Issue

#119143

その他

  • この PR は Int128、Guid、decimal、DateTime、Vector128<byte> などの新規構造体ペイロードに対応しており、以前のカノニカル構造体シェイプ衝突に依存した限定的なカバレッジの問題を解決します。
  • 同様の gsharedvt out-sig ラッパー未生成問題の別ケース(#130545 の PixelOperations<Rgba32>、#117557 の by-ref struct など)は本 PR では対象外です。
  • 17 ケースのマトリックステスト(非ジェネリック IEnumerable 経由でのボックス化)で、すべての以前は失敗していた Nullable<struct> ケースが合格し、従来動作していたケース(プリミティブ、裸の struct、Nullable<primitive>)は継続稼働を確認。

#131016 [wasm][coreCLR] R2R: VM-side load of a flat webcil composite image

概要

WebAssembly環境でフラットなWebcil形式のR2R(ReadyToRun)複合イメージをランタイムが読み込めるようにするための、最小限なVM側の変更を実装するPRです。crossgen2が生成するWasm用R2R複合イメージはフラットなWebcil形式ですが、既存のR2R/PEデコーダはマップされたPE形式を想定していたため、ランタイムがR2Rヘッダやセクションを見つけられない問題を解決します。

変更内容

  • nativeimage.cpp: RTR_HEADERエクスポートが存在しない場合、デコーダのGetReadyToRunHeader()にフォールバック
  • readytoruninfo.cpp: フラットなWebcilイメージをRVA直接アドレッシング可能として扱う(既存のIsMapped()と並列してIsWebcilFormat()チェック)
  • peimagelayout.inl: IsComponentAssembly()をデコーダディスパッチ(DECODER_DISPATCH)経由でルーティング
  • peimagelayout.cpp: ホスト側で検証されたWebcil R2Rイメージの共有バッファに対して、ベースリロケーションの二重適用を防ぐガード機構を追加
  • その他: Crstタイプ定義とWebcilデコーダヘッダの追加

パフォーマンスへの影響

影響なし(ランタイムの負荷経路を調整する変更で、実行時パフォーマンスへの直接的な影響はない)

関連Issue

その他

  • TARGET_WASM/FEATURE_PORTABLE_ENTRYPOINTSでガードされており、ブラウザとWaSI環境の両方を同じコードパスで対応
  • 設計上の懸念事項として、リロケーション適用ガード(peimagelayout.cpp)が挙げられています。ホスト側で検証されたWebcil R2Rイメージは単一の共有メモリバッファに基づいており、アセンブリバインダが同じバッファ上で独立した複数のPEImage/レイアウトオブジェクトを開くと、各オープンでApplyBaseRelocationsが再実行され、WASM テーブルインデックスのリロケーションが加算的(index += tableBase)であるため、二重適用時に不正な値になる問題を、VM-ローカルなセットでキャッシング(INTERIM実装)して対応
  • WASI R2Rプロトタイプで検証済み(システム.Private.CoreLib R2Rイメージ、約49k R2R関数が正常にロードされた)
  • 単体での動作テストは未実施(#129850で追跡される実行ゲート(QCall/PInvoke、クラス初期化など)が必要)

#130980 Add ARM64 FP register debug info support

概要

ARM64プラットフォーム上でのデバッガサポートを拡張し、浮動小数点レジスタ(V0–V31)のデバッグ情報対応を追加するものです。これにより、単一レジスタのFP検査と、2つのレジスタで表現されるHFA/HVA戻り値の検査が可能になります。ReadyToRun形式のメジャー/最小バージョンを26に引き上げています。

変更内容

  • ARM64 RegNum拡張: primitives.hで浮動小数点レジスタV0–V31を追加(+36行)
  • デバッグプロトコル更新: cordebuginfo.hでレジスタピース情報構造体を追加(+35行)
  • JIT/コード生成: codegencommon.cpp、scopeinfo.cpp、ee_il_dll.cppでARM64レジスタマッピングを更新
  • DBI(Debugger Base Interface): rsthread.cppでレジスタ操作ロジックを修正
  • ReadyToRun/R2Rダンプ: readytorun.h、Registers.csでARM64レジスタマッピングを追加
  • DWARF/CodeView: ネイティブAOTのシンボル生成でARM64浮動小数点レジスタ対応を追加
  • cDAC: ARM64Context.cs、ClrDataFrame.csでコンテキスト取得時のレジスタ処理を拡張
  • バージョン管理: jiteeversionguid.hでJITEEバージョンを更新、ReadyToRun形式を26に変更

パフォーマンスへの影響

影響なし

関連Issue

#129992(前提作業) #130979(4バイト/16バイトレジスタピースと2レジスタ以上の値対応は別途)

その他

  • 破壊的変更: ReadyToRun形式のメジャー/最小バージョンが26に引き上げられるため、旧形式との互換性が失われます
  • スコープ制限: 現在のPRは8バイトレジスタピース(V0–V31)と2レジスタまでのHFA/HVA対応に限定しており、4バイト・16バイトピースや2レジスタを超える値への対応は#130979で別途追跡されます

#130958 [LoongArch64] Fix the m_usComponentSize load in RhpNewArrayFast.

概要

LoongArch64アーキテクチャのRhpNewArrayFast関数におけるm_usComponentSizeロードの修正。PR#130019で導入されたMaxArrayElementSizeに関連するSIGBUSエラーを解決し、ダンプ時のGC情報出力機能を追加します。

変更内容

  • src/coreclr/runtime/loongarch64/AllocFast.S: RhpNewArrayFast内のm_usComponentSizeロード処理を修正(2行変更)
  • src/coreclr/jit/emitloongarch64.cpp: ダンプ出力時のGC情報プリント機能を追加(6行追加)
  • src/coreclr/gc/gcinternal.h: GC関連定義の軽微な修正(1行追加、1行削除)

パフォーマンスへの影響

影響なし

関連Issue

#130019で導入されたMaxArrayElementSizeに関連

その他

  • LoongArch64ランタイムのメモリアロケーション処理に関連する内部実装の修正です
  • SIGBUSエラー(メモリアラインメント不正)の修正のため、ハードウェア固有の問題対応と考えられます

#130932 Fix address sanitizer issues

  • 作成者: @janvorli
  • 作成日時: 2026年07月16日 22:50:59(UTC)
  • マージ日時: 2026年07月23日 11:57:25(UTC)
  • ラベル: area-VM-coreclr

概要

Address Sanitizerが検出した2つのメモリ管理の問題を修正します:

  1. 基底クラスのポインタに対して::スコープ解決演算子を使用したdelete呼び出しを修正(サイズ付き削除で実際の型ではなく基底クラスのサイズを使用していた問題)
  2. 配列の誤った非配列削除演算子での削除を修正

変更内容

  • src/coreclr/utilcode/ex.cpp: 不正なdelete呼び出しを削除(5行削除)
  • src/coreclr/vm/ceeload.cpp: 配列削除をdelete[]に修正(2行追加、2行削除)

パフォーマンスへの影響

影響なし

関連Issue

#130031

その他

これらは現在のところ実装的には害をもたらしていませんが、Address Sanitizerの警告を解消し、コード品質を向上させます。


#130824 Compact NativeAOT dispatch cell info encoding

概要

NativeAOT環境において、インターフェースメソッドとジェネリック仮想メソッド(GVM)のディスパッチセル情報エンコーディングをNative Layoutを使用した、より圧縮された形式に変更します。複数のディスパッチセルが同じディスクリプタ(辞書+セルごとのインデックス)を共有する場合、辞書ベースのエンコーディングを使用し、より小さい場合は既存の直接エンコーディングにフォールバックします。

変更内容

  • InterfaceDispatchCellInfoSectionNode.cs / GvmDispatchCellInfoSectionNode.cs: インターフェースおよびGVMディスパッチ情報を、直接エンコーディングと辞書ベースエンコーディングのいずれかで生成するロジックを追加
  • DispatchCellNode.cs: 辞書サイズ/インデックスエンコーディング決定の共有ヘルパーを導入
  • Dispatch.cs: 新しい直接/辞書レイアウト形式に対応したデコーディングロジックを更新(54行追加/69行削除)
  • NativeFormatReader.cs / NativeFormatWriter.cs: Native Format処理の拡張
  • ExternalReferencesTable.cs: 外部参照テーブルの機能拡張
  • テスト追加: Interfaces.cs、GenericVirtualMethods.csにおいて、同じディスクリプタを共有する複数のディスパッチコールサイトを生成するテストを追加

パフォーマンスへの影響

バイナリサイズ削減が見込まれます。複数のディスパッチセルが同じディスクリプタを共有する場合、辞書ベースのエンコーディングにより、エンコーディングサイズが小さくなる場合は自動的にそちらが選択されます。ランタイムデコーディングロジックの改善により、実行時のディスパッチ解決パフォーマンスへの悪影響なし。

関連Issue

#130824

その他

  • コンパイラ側での最適化判断(直接 vs 辞書エンコーディングの選択)により、ビルド時間への影響は最小限に設計
  • 後方互換性は保持され、ランタイムは両方のエンコーディング形式に対応

#130758 Implement channel binding support on Unix

  • 作成者: @rzikm
  • 作成日時: 2026年07月15日 08:10:39(UTC)
  • マージ日時: 2026年07月23日 08:26:46(UTC)
  • ラベル: area-System.Net.Security

概要

Unix(GSSAPI)プラットフォームにおけるNegotiateサーバー側認証にTLSチャネルバインディング(CBT)対応を追加します。マネージドコード層からNegotiateAuthenticationPal.Unixを通じてチャネルバインディングトークンをネイティブレイヤーに渡し、GSSAPIのgss_accept_sec_contextで検証されるようにします。バインディング不一致はGSS_S_BAD_BINDINGSとして検出され、既存のクライアント側動作と一致します。

変更内容

  • pal_gssapi.c/h: NetSecurityNative_AcceptSecContextをチャネルバインディング対応に拡張し、cbtおよびcbtSizeパラメータを追加してGSSAPI層に転送
  • Interop.NetSecurityNative.cs: LibraryImportでチャネルバインディング機能を有するオーバーロードを追加
  • NegotiateAuthenticationPal.Unix.cs: サーバーパスで_channelBindingをAcceptSecurityContextに渡し、GSS_S_BAD_BINDINGSをBadBindingにマップ
  • ExtendedProtectionPolicy.cs: OSSupportsExtendedProtectionをLinuxでもtrueに変更
  • テスト追加: 新ファイルNegotiateAuthenticationKerberosTest.ChannelBindings.csでKerberos向けの一致/不一致シナリオのファンクショナルテストを追加

パフォーマンスへの影響

影響なし

関連Issue

#130758

その他

互換性について: PR説明では新しいNetSecurityNative_AcceptSecContextExエントリポイントを追加して既存のNetSecurityNative_AcceptSecContextを互換性ラッパーとすることが述べられていますが、実装では既存エントリポイントの署名そのものを拡張しており、レビューコメントで指摘されている通り、インプレースサービシング環境での古いマネージドコードとの互換性に対する懸念があります。


#130506 Add runtime async tests for catching non-Exception throws

  • 作成者: @Copilot
  • 作成日時: 2026年07月10日 17:27:25(UTC)
  • マージ日時: 2026年07月23日 06:40:55(UTC)
  • ラベル: area-VM-coreclr

概要

Runtime async (async2) とコンパイラ状態マシン async (async1) の動作を検証するため、System.Exceptionを継承しないオブジェクトのスロー時の挙動をカバーするテストを追加。RuntimeCompatibilityAttribute(WrapNonExceptionThrows)がRuntimeWrappedExceptionでのラッピング動作を制御する場面での両者の一致/乖離を確認します。

// async1 (state machine) vs async2 (runtime async)
public static async Task ThrowAfterYieldAsync2()
{
    await Task.Yield();
    NonExceptionThrower.ThrowNonException(); // IL経由で文字列をスロー
}

[RuntimeAsyncMethodGeneration(false)]
public static async Task ThrowAfterYieldAsync1()
{
    await Task.Yield();
    NonExceptionThrower.ThrowNonException();
}

変更内容

  • 新テストプロジェクト (src/tests/async/runtime-wrapped-exception/):
    • runtime-wrapped-exception.cs — async1/async2の比較テスト(サスペンションポイント前後でのスロー、WrapNonExceptionThrowsの両設定)
    • NonExceptionThrower.il — IL定義で文字列(非Exception)をスロー(C#では表現不可)
    • NoWrapThrowers.cs — [RuntimeCompatibility(WrapNonExceptionThrows = false)]でマークされたヘルパーアセンブリ
    • プロジェクトファイル (.csproj/.ilproj) とDirectory.Build.props更新

パフォーマンスへの影響

影響なし(テストコードのみ追加)

関連Issue

#123194(既知の乖離ケースを[ActiveIssue]で無効化)

その他

観察結果(テスト結果より):

  • WrapNonExceptionThrows = true(既定): async1とasync2が一致 — 全ケースでRuntimeWrappedExceptionを観察
  • WrapNonExceptionThrows = false: サスペンション前のスローとasync2のサスペンション後は一致するが、async1がサスペンション後にスロー場合に乖離 — async1は生オブジェクトをスレッドプール上に露出させてプロセスをクラッシュさせるため、該当テストCatchAfterYield_NoWrap_Async1は無効化

7つのテストが実行される予定です。


#130413 [r2r] Add support for compiling szarray methods

  • 作成者: @BrzVlad
  • 作成日時: 2026年07月09日 15:31:02(UTC)
  • マージ日時: 2026年07月23日 05:28:47(UTC)
  • ラベル: area-ReadyToRun

概要

ReadyToRun(R2R)コンパイラがSZArray型のメソッドをコンパイルサポートするよう拡張した変更です。配列型がジェネリック・コレクション・インターフェース(IList<T>など)の呼び出しを解決する際、実行時にSZArrayHelperメソッドにディスパッチされるメソッドを検出・コンパイルできるようになります。条件付き依存関係を活用することでコンパイル対象メソッドを約6倍削減し、フレームワークサイズ増加は0.1%未満に抑制しています。

変更内容

  • ArrayInterfaceMethodsNode.cs(新規): 配列のジェネリック・インターフェース・メソッドとSZArrayHelperメソッドの対応付けを行う条件付き依存関係ノードを実装
  • ReadyToRunCodegenNodeFactory.cs: AddVirtualMethodDiscoveryDependenciesヘルパーメソッドを追加し、配列固有のパス含むvirtual dispatch検出を一元化
  • TypeFixupSignature.cs、GenericLookupSignature.cs、NewArrayFixupSignature.cs: 共有ヘルパーメソッドを呼び出すよう統合し、virtual dispatch依存関係の検出を統一
  • ILCompiler.ReadyToRun.csproj: 新規ノードをビルドに追加

パフォーマンスへの影響

  • コンパイル対象メソッド数:約6倍削減(条件付依存関係による最適化)
  • フレームワークサイズ増加:0.1%未満
  • EmptyTakeSelectToArray等のベンチマーク性能向上

関連Issue

#130413

その他

本変更は内部実装(R2Rコンパイラの依存関係分析)への改善であり、公開APIには影響ありません。


#130372 System.Native: Stop using EV_RECEIPT in the kevent code

概要

System.NativeのkeventコードでEV_RECEIPTフラグの使用を廃止します。EV_RECEIPTは変更リスト登録失敗の詳細な検出やエラー時の処理停止に用いられますが、本コードではこれらの機能が必要ないため、フラグを削除することで FreeBSD/OpenBSD向けの回避コードを廃止できます。

変更内容

  • src/native/libs/System.Native/pal_networking.c: kevent呼び出しからEV_RECEIPTフラグを削除(-21行)

パフォーマンスへの影響

影響なし

関連Issue

#26633

その他

  • FreeBSD/OpenBSD固有の回避策が削除されることで、プラットフォーム間での実装の一貫性が向上します
  • 変更の技術的根拠はFreeBSDバグトラッカー(bugs.freebsd.org bugzilla #229741)に記載されています

#130366 Add low-level TLS state machine API (TlsContext / TlsSession)

  • 作成者: @wfurt
  • 作成日時: 2026年07月08日 17:40:17(UTC)
  • マージ日時: 2026年07月23日 09:47:32(UTC)
  • ラベル: area-System.Net.Security

概要

System.Net.Securityに実験的な低レベルTLS状態機械API(TlsContext、TlsSession、TlsBufferSession、TlsSocketSession、TlsOperationStatus)を導入します。呼び出し元がバッファ管理とI/Oスケジューリングを制御する非ブロッキング、呼び出し元駆動のTLSフローを実現し、高パフォーマンスシナリオに対応します。OpenSSL、SChannel、Apple Network.frameworkをサポートしており、Linux、macOS、Windows、FreeBSDで動作します。

変更内容

  • 新しい公開API(実験的、SYSLIB5007警告付き)

    • TlsContext: TLS設定と文脈を管理する型
    • TlsSession: 汎用TLS状態機械インターフェース
    • TlsBufferSession: バッファ駆動型セッション
    • TlsSocketSession: ソケット結合型セッション
    • TlsOperationStatus: 操作ステータス列挙型
  • OpenSSL PAL拡張(pal_ssl.h/c、pal_bio.h/c)

    • ファイルディスクリプタ結合(SSL_set_fd)
    • ハンドシェイク駆動サポート
    • ClientHelloプリフェッチ用ソケットBIO
    • TLSレコード検査API
  • Apple Network.framework PAL更新(pal_networkframework.m/h)

    • サーバー側TLSサポート(ID配線、サーバーブートストラップ)
    • セッション毎キューイング調整
  • SslStream統合初期実装(SslStream.TlsSessionWedge.cs)

    • ハンドシェイクトークン生成をTlsSessionを経由するよう経路変更
    • 既存SslStreamハンドシェイクパスの動作変更を伴う
  • インターオプ拡張

    • OpenSSLシム関数の新規P/Invoke
    • プロトコルサポート、証明書検証コールバック動作の調整

パフォーマンスへの影響

  • 非ブロッキングAPI: 呼び出し元がI/Oスケジューリングを制御可能になり、高パフォーマンスシナリオでスループット向上の可能性あり
  • ClientHello検査: ソケットBIOによるプリフェッチ機構により不要な読み込みを削減
  • 具体的な数値: ベンチマーク結果なし

関連Issue

#128871

その他

互換性への影響

  • 新API群はすべて[Experimental(SYSLIB5007)]属性付きで、コンパイル時に警告が発せられます
  • SslStream.Protocol.NextMessageの経路変更は既存コードの動作を変える可能性があり、Copilotレビューから懸念が指摘されています(AppContextスイッチなどでのゲーティングが必要の可能性)

設計上の懸念

  • Copilotレビューで指摘:TlsContextの破棄時にTlsSessionが保有する証明書リソースの参照カウント方式に関する仕様の明確化が必要

今後の予定

  • 作成者が指摘するとおり、本PR

#130007 Clear some stale GTF_ORDER_SIDEEFF flags

概要

JITコンパイラのGTF_ORDER_SIDEEFFフラグの管理を改善し、不正に伝播した順序制約をクリアして、if-conversionとbool最適化をより有効に機能させる変更です。

動機となった例:o.GetType() == typeof(int) || o.GetType() == typeof(uint) || o.GetType() == typeof(long)のように、副作用フラグが残存していたブロックのためにOR結合できなかったケースを最適化します。

変更内容

  • src/coreclr/jit/gentree.cpp: gtUpdateStmtSideEffectsに、オペランドにGTF_ORDER_SIDEEFFフラグを持つものがない場合、ノード自体が順序付き副作用をサポートしていなければフラグをクリアするロジックを追加(+18行)
  • src/coreclr/jit/morph.cpp: 関連する副作用フラグ処理の調整(+4行)
  • src/coreclr/jit/fgdiagnostic.cpp: 診断出力の微調整(+9/-2)

パフォーマンスへの影響

  • if-conversionとbool最適化がより多く実行されることで、一般的なケースでの最適化向上が期待される
  • ブロックレイアウト変更によってLSRA(ライブレンジ解析)のスピル挙動が若干変化する可能性がある
  • 既知の問題として、optimize bools実行後にedge-likelihoodsが正しく再計算されない場合があり、パフォーマンススコアへの悪影響が報告されている(別途修正予定)

関連Issue

#130007

その他

  • 内部実装(JITコンパイラの木構造フラグ管理)の変更であり、公開APIへの影響なし
  • コンパイラの最適化フェーズに関連する変更のため、既存コードの挙動は変わらないが、生成されるコードの効率性が改善される
  • edge-likelihood再計算の問題は別途対応予定

#129761 Add ISOSDacInterface18 for GCInfo inspection APIs

概要

ISOSDacInterface18 COM インターフェースを追加し、GCInfo検査APIをSOS DAC経由で公開します。このPRは、GCヘッダー、セーフポイント、割り込み可能範囲、スロットライフタイムをネイティブDACおよびマネージドcDACから検査可能にします。同時にARM Thumbビット関連のバグ修正を含みます。

変更内容

ISOSDacInterface18の追加(パブリックAPI)

  • GetGCInfoHeader -- GCバージョン、コードサイズ、プロローグ、スタックベースレジスタ、GSクッキー、PSPシンボル、ジェネリックスコンテキストなどのヘッダフィールド
  • GetGCInfoInterruptibleRanges -- GCが実行割り込み可能なコード領域
  • GetGCInfoSafePoints -- ポイントインタイムGCスロット活性情報の固有オフセット
  • GetGCInfoSlotLifetimes -- レジスタ+スタック統合スロットライフタイム範囲(SOSGCSlotLifetimeとIsRegister弁別子)

IGCInfo契約の変更(マネージドAPI)

  • GetHeader、GetSafePoints、GetSlotLifetimesをマネージドIGCInfo/IGCInfoDecoderに追加
  • GetStackBaseRegisterとGetSizeOfStackParameterAreaをGCInfoHeaderに統合(同一のDecodePoints.ReversePInvoke深度が必要なため)
  • GetCodeLengthは単体メソッド維持(DecodePoints.CodeLengthでのデコードのみ必要で、ホットパスで使用)
  • GetCalleePoppedArgumentsSizeは単体メソッド維持(x86以外はデコード不要)

x86 GCInfo実装

  • x86プラットフォーム用のGetHeader/GetSafePoints/GetSlotLifetimes実装
  • セーフポイント専用メソッドはライブスロット別に[safePointOffset, safePointOffset+1)を発行

ARMバグ修正

  • EEJitManager.GetMethodInfoとInterpreterJitManager.GetMethodInfoにおいて、ARM Thumb-2での相対オフセット計算が不正確でした。TargetCodePointerのThumbビット(ビット0)がcodeStartに含まれていなかったため、オフセットが1ずれていました
  • CodePointerUtils.AddressFromCodePointerでThumbビットをストリップして修正
  • ReadyToRunJitManagerは既に正しく処理済み

その他の変更

  • 全プラットフォーム(x86、ARM、ARM64、AMD64、RISC-V、LoongArch64、Interpreter)のGCInfo特性にPSPシンボルスタックスロットエンコーディングベースを追加
  • GenericsContextKind.Noneをデフォルト列挙値として追加
  • GSCookieValidRangeは存在時のみ設定(修正)
  • ネイティブDAC(レガシー)はISOSDacInterface18に対してE_NOINTERFACEを返却(cDAC専用)

パフォーマンスへの影響

  • スロットライフタイム単一パスチャンクデコーダで、O(codeLength)からO(transitions)へ改善
  • GetCodeLengthをスタンドアロン保持により

#129019 Call into PerfMap logic exclusively in preemptive mode

  • 作成者: @davidwrighton
  • 作成日時: 2026年06月04日 22:18:07(UTC)
  • マージ日時: 2026年07月23日 18:18:06(UTC)
  • ラベル: area-VM-coreclr

概要

このPRはPerfMapロジックの呼び出しをプリエンプティブGCモードでのみ実行するよう修正します。WindowsでのPerfMap API利用可能化に伴い、プリエンプティブ遷移(GCX_PREEMP/GCX_MAYBE_PREEMP)を戦略的に追加して、GCコントラクト要件を満たします。また、多くの呼び出しサイトから#ifdef FEATURE_PERFMAPガードを削除し、機能有効時は実装、無効時はスタブを提供する形に統一しました。

変更内容

主要な変更:

  • MethodDesc/スロット解決API: GetMethodDescForSlotなど複数の関数のコントラクトをMODE_ANYからMODE_PREEMPTIVEに変更
  • スタブ生成と呼び出し: virtualcallstub.cpp、fptrstubs.cpp、reflectioninvocation.cppなどで、MethodDesc取得前にプリエンプティブ遷移を追加
  • PerfMapAPI統一: perfmap.hでFEATURE_PERFMAP無効時のスタブクラスを定義し、44ファイルから条件付きガードを削除
  • QCall調整: comdelegate.cppのDelegate_AdjustTarget署名を更新、runtimehandles.cppでコーペラティブ領域を縮小
  • マネージドコード変更: System.Private.CoreLib側でBindToMethodDetails構造体の初期化やライフタイム管理を調整

影響を受けるコンポーネント:

  • 内部実装(VM呼び出しパス、スタブ生成、リフレクション)
  • 公開APIには直接的な変更なし

パフォーマンスへの影響

影響なし。変更はGCモード遷移を追加していますが、既にプリエンプティブモード内で実行される軽量な操作に限定されており、パフォーマンス測定結果は提供されていません。

関連Issue

なし

その他

レビュー指摘(低信頼度含む):

  • comdelegate.cpp内でBindToMethodDetailsのいくつかのフィールド(methodPtrAuxなど)が閉じられたデリゲートパスで初期化されていない可能性
  • RuntimeHandles.csのIRuntimeMethodInfo.GetValueがレイアウトコントラクト(Unsafe.As<RuntimeMethodInfoStub>)に依存しており、脆弱
  • Delegate.CoreCLR.csのKeepAliveの条件化がライフタイム意味論を変更する可能性

これらは設計レビューで確認が推奨されます。


#126733 [ILLink] Add regression test for KeyNotFoundException crash in async partial methods with capturing lambdas

概要

ILLinkトリマーが、ジェネリック型パラメータをキャプチャするラムダを含むasync partialメソッドのコンパイラ生成型を解析する際にKeyNotFoundExceptionでクラッシュする問題の回帰テストを追加しました。

Roslyn がこれらのメソッドに [AsyncStateMachineAttribute] を出力せず、ILLink の TryGetStateMachineType がこの属性に依存しているため、状態マシン型が generatedTypeToTypeArgs に追加されません。その結果、ラムダの表示クラスの所有者が見つからない状態マシン型を参照する場合、MapGeneratedTypeTypeParameters がクラッシュします。

partial class PartialAsyncMethodWithLambda
{
    public async partial Task<T> GetData<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] T>() where T : new()
    {
        var tcs = new TaskCompletionSource<T>();
        Action<T> callback = (result) =>
        {
            _ = typeof(T).GetMethods();
            tcs.TrySetResult(result);
        };
        callback(new T());
        return await tcs.Task;
    }
}

変更内容

  • CompilerGeneratedTypes.cs — ジェネリック async partial メソッドが捕捉ラムダを含む場合のクラッシュを再現する PartialAsyncMethodWithLambda テストケースを追加(+30行)

パフォーマンスへの影響

影響なし

関連Issue

#122800、#109821

その他

  • このPRはGitHub Copilotの支援を受けて作成されました
  • テストケースは既存のテストハーネスに組み込まれています
  • アナライザーテスト(ILLink.RoslynAnalyzer.Tests)での検証済み

目次