注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #135976 Fix R2RDump path casing in HalfEstimateR2R test
- #135957 Avoid tagged shared dynamic-interface vtable entries on WASM
- #135953 Provide NativeAOT WASM interface dispatch resolver
- #135950 Exclude unsupported NativeAOT WASM native-library tests
- #135948 Align NativeAOT Vector<T> to 16 bytes on WASM
- #135946 JIT: Don't assert when printing open generic method names in disasm
- #135934 Validate ZstandardStream constructor arguments and prevent ArrayPool buffer leak on failure
- #135931 [manual] Merge release/8.0-staging into release/8.0 to unblock MSRC internal-to-public builds
- #135924 ilverify: report boxing of byref-like types
- #135917 Add the missing SwitchTests.ilproj to ILVerification.Tests
- #135909 Split NativeAOT thread startup by multithreading support
- #135908 Keep hostpolicy context alive for the lifetime of the process after coreclr has been loaded
- #135907 [manual] Merge release/9.0-staging into release/9.0 to unblock MSRC internal-to-public builds
- #135899 Keep negative cast results in R2R when they can't change across versions
- #135883 [release/8.0-staging] Update MsQuic to 2.5.12
- #135877 Fix missing ILVerify messages for LdftnCtor and TailStackEmpty
- #135869 Add CompExactlyDependsOn to some methods so that they are compiled on wasm
- #135865 [QUIC] Disable QUIC test on OSX with mono runtime
- #135861 [QUIC] Remove timeout
- #135857 Swallow ObjectDisposedException when restoring blocking mode after connect async
- #135851 JIT: Propagate rejectNegativeConst through lcl + cns in monotonicity check
- #135850 JIT: Treat stores to EH-live locals as visible when hoisting
- #135798 ILVerify error cleanup
- #135789 Wait for the OOB byte in IOControl_SIOCATMARK_Unix_Success
- #135724 JIT: Keep volatile loads when folding full-range relational comparisons
- #135650 Fix concurrent CCW vtable and IID publication
- #135519 cDAC: skip empty assembly-list slots in Loader_1.GetModuleHandles
- #135471 [cDAC] Handle GettingReJITParameters state
- #135413 [browser][wasi] Allow uncontended synchronous waits and un-gate Roslyn workspace tests
- #135311 Managed ilasm: honour explicit local slots, scope local names lexically, and emit LocalScope/LocalVariable rows
- #135276 Fix suspend of CLR initialization thread when started from dispatch queue on apple
- #134978 [wasi] Enable EventPipe (FEATURE_PERFTRACING) for CoreCLR WASI
- #134082 Handle parameterized ILTrim interop types
#135976 Fix R2RDump path casing in HalfEstimateR2R test
- 作成者: @jtschuster
- 作成日時: 2026年10月16日 21:30:54(UTC)
- マージ日時: 2026年10月16日 22:58:47(UTC)
- ラベル: 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' が報告されていました)。
変更内容
src/tests/readytorun/HardwareIntrinsics/X86/HalfEstimateR2R.cs(+1/-1)- R2RDump のパス表記を
R2RDump/R2RDump.dllに修正。 - 既存の命令セットの前提条件チェックと逆アセンブリのアサーションは変更なし。
- R2RDump のパス表記を
PR作成者によると、Linux x64 で以下を確認済みです。
- 修正前は同一の失敗(テスト終了コード 101)を再現し、修正後は成功(期待値 100、実際 100)。
clr+libs+libs.pretestのビルドは警告・エラーともに 0 件。
パフォーマンスへの影響
影響なし(テストコードのパス表記修正のみ)。
関連Issue
#135963(Resolves)
その他
なし
#135957 Avoid tagged shared dynamic-interface vtable entries on WASM
- 作成者: @MichalStrehovsky
- 作成日時: 2026年10月16日 13:57:30(UTC)
- マージ日時: 2026年10月16日 22:42:39(UTC)
- ラベル: arch-wasm area-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 ディスパッチのランタイムサポートではありません。サポートにはジェネリックコンテキストを渡す、シグネチャ的に正しい方法が必要で、ポインタのエンコーディング変更だけでは不十分とされています。
変更内容
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/SealedVTableNode.cs(+7/-0)- WASM ターゲットで shared な dynamic-interface 実装の sealed vtable エントリを null として出力
- 未サポートのシナリオであることを示す TODO を追加
- その他の sealed vtable エントリおよび WASM 以外のターゲットは変更なし
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 検証は、他の未マージの enablement を含むローカルの NativeAOT WASI bringup ツリーで実施されています。
.\build.cmd clr.tools -rc Checked -lc Release -os wasi -arch wasmが成功- Determinism テストで存在しない funclet 参照のエラーが発生しなくなった
- オブジェクト検査により、shared な dynamic-interface vtable 2 つは relocation のないゼロエントリになり、他の 4 つの vtable は関数 relocation を保持していることを確認
- 別の resolver/linker bringup 修正と合わせて、再ビルドした Determinism と AttributeTrimming が Wasmtime 上で 100 を返した
- このブランチには
mainから cherry-pick した本コミットのみが含まれ、単独ではビルドされていません。 - 未サポートの shared dynamic-interface ディスパッチ自体は実行されていません。
#135953 Provide NativeAOT WASM interface dispatch resolver
- 作成者: @MichalStrehovsky
- 作成日時: 2026年10月16日 13:57:26(UTC)
- マージ日時: 2026年10月16日 22:45:05(UTC)
- ラベル: arch-wasm area-NativeAOT-coreclr
概要
NativeAOT の WASM 向けに、固定シグネチャの RhpDispatchResolve エクスポートを提供する変更です。ジェネリック仮想メソッド(GVM)のヘルパーパスはこのリゾルバーを参照しますが、WASM には対応するネイティブアセンブリ実装がありませんでした。そこで WASM 専用のマネージド実装をエクスポートし、既存の RhpResolveInterfaceMethod のキャッシュ/ワーカーパスへ委譲します。
- レシーバーが null の場合は明示的に例外をスローし、ディスパッチヘルパーの従来の挙動を維持します。下位のリゾルバーは他のコンテキストでは意図的に null に対して 0 を返すため、この挙動はそちらでは提供できないとされています。
- このヘルパーはターゲットポインターを解決して返すだけで、任意シグネチャの転送トランポリンではありません。新しい呼び出し規約は導入されていません。
変更内容
src/coreclr/nativeaot/Runtime.Base/src/System/Runtime/CachedInterfaceDispatch.cs(+13/-0): WASM 専用のRhpDispatchResolveマネージド実装を追加。
パフォーマンスへの影響
影響なし(記載なし)。
関連Issue
なし
その他
- 作成者による検証は、未マージの他の有効化変更を含むローカルの NativeAOT WASI 統合ツリー上で行われています。
clr.nativeaotlibs(wasi/wasm)のビルドが成功。- Determinism テストのビルドが強制再生成後に成功し、未定義だった
RhpDispatchResolveのリンクエラーが解消。 - 再ビルドした Determinism と AttributeTrimming は Wasmtime 上でいずれも 100 を返却。
- このブランチは
mainからチェリーピックした本コミットのみを含み、単独ではビルドされていません。 - Determinism はオブジェクトファイルの同一性を確認するもので、ランタイムでのジェネリック仮想ディスパッチの正当性を検証するものではありません。
#135950 Exclude unsupported NativeAOT WASM native-library tests
- 作成者: @MichalStrehovsky
- 作成日時: 2026年10月16日 13:57:23(UTC)
- マージ日時: 2026年10月16日 22:46:46(UTC)
- ラベル: arch-wasm area-NativeAOT-coreclr
概要
NativeAOT WASM(WASI/browser)で現状サポートされていない4つのテスト構成を、CLRTestTargetUnsupported でマークして除外するPRです。除外条件は TargetsWasm に基づいており、デスクトップ向けのテストカバレッジには影響しません。
除外の理由(PR説明より):
AggregateLibrary、CustomMainWithStubExe、SharedLibrary: 共有ライブラリのサポートが必要だが、NativeAOT WASMは現状これを提供していないCustomMain: ネイティブアーカイブが必要だが、既存のWASMネイティブテスト用CMakeトラバーサルでビルドされない
変更内容
以下の4つのテストプロジェクトに、各+2行(TargetsWasm 条件付きの CLRTestTargetUnsupported 指定)を追加しています。
src/tests/nativeaot/AggregateExecutableLibrary/AggregateLibrary.csprojsrc/tests/nativeaot/CustomMain/CustomMain.csprojsrc/tests/nativeaot/CustomMainWithStubExe/CustomMainWithStubExe.csprojsrc/tests/nativeaot/SmokeTests/SharedLibrary/SharedLibrary.csproj
テスト用プロジェクトのみの変更で、ランタイム/コンパイラ/ライブラリの実装や公開APIには影響しません。ネイティブテストのCMakeトラバーサルの変更や、PInvokeなど無関係なテストの除外は行っていません。
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 検証内容(ローカルの、他の未マージ対応を含むNativeAOT WASIブリングアップ環境での結果):
- MSBuildのプロパティ評価で、4プロジェクトがWASI/wasmおよびbrowser/wasmで除外され、Windows/x64では有効のままであることを確認
.\src\tests\build.cmd nativeaot checked tree nativeaot wasm wasiで、共有ライブラリおよびCustomMainのアーカイブ欠落に起因する失敗が報告されなくなった- 一方、統合ツリーでの最新の実行では、既存の
UnitTestsのlowering assertionによる失敗とCのmath ABI警告が残っている
- 本ブランチは
mainからcherry-pickした単一コミットのみを含み、単独ではビルドされていません。browserおよびデスクトップでの実行は行われていません。 - PR説明はGitHub Copilotにより生成された旨が記載されています。
#135948 Align NativeAOT Vector<T> to 16 bytes on WASM
- 作成者: @MichalStrehovsky
- 作成日時: 2026年10月16日 13:57:20(UTC)
- マージ日時: 2026年10月16日 22:44:12(UTC)
- ラベル: arch-wasm area-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独自のレイアウトアルゴリズムには反映されていなかったことへの対応です。
変更内容
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/VectorOfTFieldLayoutAlgorithm.cs(+4/-1): WASMターゲットでのみVector<T>のフィールドアラインメントを16バイトに上書きするよう変更
パフォーマンスへの影響
影響なし。ABI要件に合わせたレイアウト補正であり、パフォーマンス改善を目的とした変更ではありません。
関連Issue
- #131328(crossgen2/VM側の先行する補正。参照として言及)
その他
- 検証はローカルのNativeAOT WASIブリングアップ環境(未マージの他の対応を含む統合ツリー)で実施されています。
- 修正前は、PreinitializationとReflection_FromUsageの両テストが
WasmLowering.IsWasmV128Typeのアラインメントアサーションで失敗しました。 - 修正後は
clr.toolsのビルドが成功し、対象の2プロジェクトのコンパイルとリンクも成功しました。ただしツリー全体では、既存のUnitTestsのロワリングアサーションで失敗が残っており、C数学関数のABI警告も残っています。 - AttributeTrimmingとDeterminismは、Wasmtime上で再ビルド後に終了コード100を返しました。
- 修正前は、PreinitializationとReflection_FromUsageの両テストが
- このブランチは
mainからcherry-pickした本コミットのみを含み、単独ではビルドされていません。また、影響を受けるベクターのテストは実行されていません。
#135946 JIT: Don't assert when printing open generic method names in disasm
- 作成者: @EgorBo
- 作成日時: 2026年10月16日 13:35:24(UTC)
- マージ日時: 2026年10月16日 18:21:54(UTC)
- ラベル: area-CodeGen-coreclr
概要
Checked JITが、オープンジェネリックメソッド(例: ジェネリックメソッド定義の ldtoken)のdisasmコメントを出力する際にassertで失敗する問題の修正です。このメソッドのシグネチャには CORINFO_TYPE_UNDEF 型が含まれるため、assertが発生していました。この問題により、FSharp.Core.dll に対する jit-diff --pmi が失敗していました。
eePrintMethod と eeGetMethodFullName が CORINFO_TYPE_UNDEF を許容し、<UNDEF> として出力するようになりました。
変更内容
src/coreclr/jit/eeinterface.cpp(+6/-3)eePrintMethodとeeGetMethodFullNameでCORINFO_TYPE_UNDEFを扱えるようにし、<UNDEF>と表示するよう変更
パフォーマンスへの影響
影響なし(JITのdisasm出力用の診断コードの変更であり、生成コードや実行時の性能には関係しません)
関連Issue
なし
その他
- 対象はChecked JITでのassert回避であり、公開APIや互換性への影響はありません。
- 主に
jit-diffなどJIT開発・解析ツールの動作を改善する変更です。
#135934 Validate ZstandardStream constructor arguments and prevent ArrayPool buffer leak on failure
- 作成者: @austinaviv
- 作成日時: 2026年10月16日 08:12:34(UTC)
- マージ日時: 2026年10月16日 11:08:38(UTC)
- ラベル: area-System.IO.Compression community-contribution
概要
ZstandardStream のコンストラクタにおける引数検証の不備と、失敗時に ArrayPool から借りた内部バッファが返却されない(リークする)問題を修正するPRです。
ZstandardCompressionOptionsにnullを渡した場合にArgumentNullExceptionを送出するようにしました。- 不正な
CompressionLevel列挙値は、バッファを借りる前にArgumentOutOfRangeExceptionを送出するようにしました。 - ネイティブのエンコーダー/デコーダーのコンテキスト確保・設定が失敗した場合に、内部バッファ(
_buffer)を破棄するようにしました。
変更内容
ZstandardStream.Compress.csZstandardStream(Stream, ZstandardCompressionOptions, bool)でInit呼び出し前にArgumentNullException.ThrowIfNull(compressionOptions)を追加し、XMLドキュメントを更新しました。ZstandardStream(Stream, CompressionLevel, bool)でInitの前にqualityを解決するよう変更しました。これにより、不正なCompressionLevelの場合は内部の64KBバッファをレンタルする前にArgumentOutOfRangeExceptionが送出されます。Init後のエンコーダー確保処理を try-catch で囲み、例外時に_bufferを破棄するようにしました。
ZstandardStream.Decompress.csInit後のデコーダー確保処理を try-catch で囲み、例外時に_bufferを破棄するようにしました。
ZstandardStream.cs- 上記の変更に伴う共通部分の修正を行いました。
CompressionStreamUnitTests.Zstandard.csnullの圧縮オプションと、範囲外の圧縮レベルを検証するユニットテストを追加しました。
パフォーマンスへの影響
影響なし。ArrayPool バッファのリークを防ぐ修正であり、失敗時にバッファが適切に返却される点が改善されます。ベンチマーク結果の記載はありません。
関連Issue
#135933(Fixes)
その他
なし
#135931 [manual] Merge release/8.0-staging into release/8.0 to unblock MSRC internal-to-public builds
- 作成者: @ViveliDuCh
- 作成日時: 2026年10月16日 07:43:14(UTC)
- マージ日時: 2026年10月16日 15:44:58(UTC)
- ラベル: NO-SQUASH Servicing-approved area-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に反映する
変更内容
eng/Versions.props: MsQuic パッケージのバージョン指定を更新(+1/-1)
パフォーマンスへの影響
影響なし
関連Issue
なし(関連 PR: #135883)
その他
- 作成者の記載によると、
System.Net.Quicを対象にしたローカルでの restore はNU1603なしで成功している - この変更が
release/8.0に入り、internal-to-public マージが更新されれば、パブリック CI で依存関係を通常どおり restore できる見込み
#135924 ilverify: report boxing of byref-like types
- 作成者: @lagudafuadtosin
- 作成日時: 2026年10月16日 06:43:02(UTC)
- マージ日時: 2026年10月16日 22:25:41(UTC)
- ラベル: area-Tools-ILVerification community-contribution
概要
ILVerify が byref-like 型(ref struct)の boxing を検出できていなかった問題(#132954)を修正する PR です。ref struct の boxing は検証エラーとなり、ランタイムが許容する box シーケンスのみ例外として扱われます。また ref struct の配列作成も検証エラーとなります。
変更内容
src/coreclr/tools/ILVerification/ILImporter.StackValue.cs(+1/-3): 共有の検証チェックを拡張し、型メタデータを通じて byref-like 型を認識するように変更。src/coreclr/tools/ILVerification.Tests/ILTests/ValueTypeTests.il(+55/-0): boxing が拒否されるシーケンスおよび ref struct の配列作成に対する回帰テストを追加。
影響範囲は ILVerify(コンパイラ/検証ツール側)の内部検証ロジックで、公開 API の変更は提供情報からは確認できません。
パフォーマンスへの影響
影響なし(提供情報にパフォーマンスに関する記載はありません)。
関連Issue
その他
- 互換性: これまで ILVerify を通過していた ref struct の boxing / 配列作成を含む IL が、今後は検証エラーとして報告されるようになります(ランタイムが許容する box シーケンスを除く)。
- Copilot のレビュー概要では「承認推奨」とされ、未解決の指摘はないとされています。ただしビルドとテストはレビュー中には実行されていません。
#135917 Add the missing SwitchTests.ilproj to ILVerification.Tests
- 作成者: @pcshrosbree
- 作成日時: 2026年10月16日 05:22:19(UTC)
- マージ日時: 2026年10月16日 22:33:49(UTC)
- ラベル: area-Tools-ILVerification community-contribution
概要
ILVerification.Tests は ILTests\*.ilproj を使ってILテストケースをアセンブルしますが、ILTests/SwitchTests.il だけ対応する .ilproj が存在せず、10個のswitchテストメソッドがアセンブルも実行もされていませんでした。本PRは欠落していた SwitchTests.ilproj を追加し、これらのテストが実行されるようにします。テスト基盤のみの変更で、ランタイム/ライブラリの実装や公開APIへの影響はありません。
変更内容
src/coreclr/tools/ILVerification.Tests/ILTests/SwitchTests.ilprojを新規追加(+9行)ShiftTests.ilprojなど、追加オプション不要な他のテストプロジェクトと同一の内容
作成者による検証結果(linux-x64、SDK 11.0.100-rc.1.26420.103、main 1d7bc42efc3 ベース):
| 状態 | 結果(成功/全体) |
|---|---|
main 未変更 |
484/484 |
| 本変更適用後 | 494/494 |
本変更 + Switch.Int32Value_Valid のswitch値を ldnull に一時変更 |
493/494(Switch.Int32Value が StackUnexpected で失敗) |
本変更 + Switch.IntoTryMiddle の期待値を BranchOutOfTry に一時変更 |
493/494(実際のエラーは BranchIntoTry) |
- 新たに含まれた10ケースはすべて成功
- 下2行は新規ケースが実行され失敗もしうることを示すための一時的な編集で、本PRには含まれません
パフォーマンスへの影響
影響なし
関連Issue
なし
(PR説明内で言及されている過去の変更: dotnet/corert#6307、dotnet/runtimeの #35038)
その他
- 欠落の経緯は、2018年のdotnet/corert#6307で個別プロジェクトが追加された際に
SwitchTests.ilが漏れたことで、ILVerifyがこのリポジトリへ移動した後もプロジェクトが存在しなかったとのことです。 - 作成者によれば、本PRはAI支援(Anthropic Claude、OpenAI Codex)を用いて作成され、投稿前にレビュー済みです。
#135909 Split NativeAOT thread startup by multithreading support
- 作成者: @MichalStrehovsky
- 作成日時: 2026年10月16日 00:15:09(UTC)
- マージ日時: 2026年10月16日 04:19:54(UTC)
- ラベル: arch-wasm area-NativeAOT-coreclr
概要
NativeAOTのスレッド起動処理を、マルチスレッドサポートの有無で分割するPRです。CoreCLRのmultithreading/single-threadingのpartialパターンに倣い、マルチスレッドが無効な場合はスレッド生成用ヘルパーとブートストラップのスレッドエントリスロットを除外し、シングルスレッド用のThreadプリミティブを提供します。
変更内容
src/coreclr/nativeaot/Bootstrap/main.cpp(+6/-0): マルチスレッド無効時にブートストラップのスレッドエントリスロットを除外するための変更src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj(+5/-0): 新しい partial ファイルのビルドへの組み込みThread.NativeAot.Multithreading.cs(新規, +114): 既存のThread.NativeAot.csから切り出したスレッド生成まわりのコード(マルチスレッド有効時用)Thread.NativeAot.SingleThreading.cs(新規, +23): シングルスレッド用のThreadプリミティブの実装Thread.NativeAot.cs(+1/-101): スレッド生成関連のコードを上記ファイルへ移動Thread.NativeAot.Unix.cs/Thread.NativeAot.Windows.cs(各 +2/-0): partial 分割に伴う小規模な調整
パフォーマンスへの影響
影響なし(提供された情報にはパフォーマンスに関する記述やベンチマーク結果はありません)。なお、マルチスレッド無効時にスレッド生成ヘルパー等が除外される構成のため、そのような構成ではコード量が減る可能性がありますが、具体的な数値は提供されていません。
関連Issue
なし
その他
- 内部実装(NativeAOTの
System.Private.CoreLibおよびブートストラップ)の再構成であり、公開APIの変更や破壊的変更に関する記載はありません。 - 作成者による概要のみで、Copilotによる概要はありません。
#135908 Keep hostpolicy context alive for the lifetime of the process after coreclr has been loaded
- 作成者: @elinor-fung
- 作成日時: 2026年10月15日 23:59:38(UTC)
- マージ日時: 2026年10月16日 12:40:56(UTC)
- ラベル: area-Host
概要
hostpolicy コンテキストの寿命を変更するPRです。ホスト・ランタイム間のコントラクトで提供されるコールバックや値はプロセスの生存期間中ずっと有効であるべきため、CoreCLR のロード後は、hostpolicy コンテキストをプロセス終了まで保持するようになります。CoreCLR のロード前に解放されるコンテキストは、従来どおり削除されます。
変更内容
src/native/corehost/hostpolicy/hostpolicy.cpp(+7/-1)- CoreCLR ロード後は hostpolicy コンテキストをプロセス終了まで保持するよう変更
パフォーマンスへの影響
影響なし(提供された情報にベンチマーク結果や性能に関する記載はありません)。なお、CoreCLR ロード後はコンテキストがプロセス終了まで解放されなくなります。
関連Issue
dotnet/dotnet の Issue #10115 を修正します(https://github.com/dotnet/dotnet/issues/10115)。
その他
- 変更対象は公開APIではなく、ネイティブホスト(corehost/hostpolicy)の内部実装です。
- 互換性や破壊的変更に関する記載は提供情報にはありません。
#135907 [manual] Merge release/9.0-staging into release/9.0 to unblock MSRC internal-to-public builds
- 作成者: @ViveliDuCh
- 作成日時: 2026年10月15日 23:09:21(UTC)
- マージ日時: 2026年10月16日 07:28:37(UTC)
- ラベル: NO-SQUASH Servicing-approved area-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 できる見込みです。
変更内容
eng/Versions.props: 1行変更(+1/-1)。提供された情報からは、MsQuic パッケージ(Microsoft.Native.Quic.MsQuic.Schannel)のバージョンを2.5.12に更新する変更と考えられますが、差分の詳細は提供されていません。
パフォーマンスへの影響
影響なし(提供された情報にパフォーマンスに関する記載はありません)
関連Issue
- #135884(
release/9.0-stagingを2.5.12に更新する PR。Issue ではなく PR)
その他
- 公開 API・互換性への影響に関する情報は提供されていません。
- 手動マージ([manual])の PR で、内容は依存パッケージのバージョン更新に限られます。
#135899 Keep negative cast results in R2R when they can't change across versions
- 作成者: @lewing
- 作成日時: 2026年10月15日 22:03:35(UTC)
- マージ日時: 2026年10月16日 19:29:12(UTC)
- ラベル: arch-wasm area-ReadyToRun os-ios os-tvos os-maccatalyst os-wasi os-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 クラスは除外)
変更内容
src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs: R2R 用#if READYTORUNブロックで、無条件にMustNot→Mayへ変換していた処理を、新しい判定関数を介する形に変更src/coreclr/tools/aot/ILCompiler.ReadyToRun/JitInterface/CorInfoImpl.ReadyToRun.cs:IsNegativeCastResultVersionResilientを追加(+38行)src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/TestCases/CastFolding/CastFolding.cs: キャスト畳み込みを検証する新規テストフィクスチャ(+117行)src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/TestCases/R2RTestSuites.cs:CastFoldingRespectsVersionBubbleテストを追加(per-assembly ビルドと input-bubble ビルドの2パターンで実行)src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/TestCasesRunner/R2RDriver.cs:Crossgen2Option.InputBubbleが渡していた不正なオプション--input-bubbleを、正しい--inputbubbleに修正
パフォーマンスへの影響
- 対象は、R2R コードが上位ティアで再コンパイルされない環境(CoreCLR on WebAssembly、iOS、tvOS)や
TieredCompilation=falseのアプリ。MacCatalyst は未確認。それ以外ではティア再コンパイルで既に畳み込まれるため、効果は起動時・コールドコードに限られる。 - issue の再現コード
CallSame(char): osx-arm64 で 180 B → 20 B、browser-wasm で 415 B → 23 B - browser-wasm(R2R composite, Node/V8, 中央値):
IndexOfAnyInRange('!', '#')len=16: 89.2 ns → 11.6 ns- 同 len=1024: 114.9 ns → 42.7 ns
IndexOfAnyInRange/IndexOfAnyExceptInRange(char) の割り当て: 48 B → 0 B
- その他36ベンチマークの変化比の中央値は 0.998(範囲 0.96–1.13)。
SearchValues<string>len=1024 は 91.1 → 103.3 ns と遅く見えるが、ホットメソッドのコードは変更前後でほぼ同一(relocation アドレスのみ差)で、実行順序依存の測定アーティファクトと説明されている(V8 でのマシンコード配置の変化が推定原因)。- コードサイズ: 12,409 メソッド中 14 メソッドが縮小(計 −4,927 B)、増加なし(例:
DefaultInterpolatedStringHandler.AppendFormatted<bool>1146 → 429 B)。
関連Issue
#135892(Resolves)。副次的に見つかった where T : struct ジェネリックの char インスタンス化がインライン化されない問題は #135906 で別途対応。
その他
- 健全性の根拠: 新たなキャスト判定ロジックは追加せず、crossgen2 が既に計算し、ランタイム JIT/NativeAOT が既に畳み込んでいる
MustNotの結果が、バージョン間で変わらないと判断できる場合にのみ保持する。 - 他の JIT 側の
compareTypesForCast利用箇所は、否定結果を畳み込む前に正確なソース型を要求するため安全。 - 検証: 新規テスト
CastFoldingRespectsVersionBubble(バブルルールの4つのガードのいずれを外しても失敗)、R2R テストスイート全体(149 passed、15 skipped)、osx-arm64 の既存ランタイムテスト、CoreLib 再ビルド+TieredCompilation=0でのSystem.Runtime.Tests/System.Collections.Testsが全て通過。 - 未検証: x64/arm/wasm でのランタイムテスト、バブルルール付き composite フレームワークでのランタイムテスト、ランタイムテスト全体。
#135883 [release/8.0-staging] Update MsQuic to 2.5.12
- 作成者: @ViveliDuCh
- 作成日時: 2026年10月15日 18:38:10(UTC)
- マージ日時: 2026年10月16日 07:29:49(UTC)
- ラベル: Servicing-approved area-Infrastructure-libraries
概要
release/8.0-staging ブランチで使用する MsQuic を、非公開の 2.5.11-ci.159417053 から公開パッケージの 2.5.12 に更新します。非公開の MSRC 向けパッケージを参照したままだと、公開 CI で restore が NU1603 で失敗してビルドが通らなくなる問題への対応です。マネージドコードの変更はなく、パッチバージョンの依存関係更新(1行)のみです。
変更内容
eng/Versions.props: MsQuic のバージョン指定を 2.5.12 に更新(+1/-1)
パフォーマンスへの影響
影響なし
関連Issue
その他
- 公開 API や互換性(破壊的変更・非推奨化)への影響は、記載された情報からは確認できません。
- 作成者の記載によるリスクは Low で、
System.Net.Quic.csprojの restore が NU1603 なしで 2.5.12 を解決することをローカルで確認済みです。機能テストは CI に委ねるとのことです。 - パッケージプロジェクトやパッケージのメタデータは変更せず、固定されているネイティブ依存のバージョンのみを更新します。
#135877 Fix missing ILVerify messages for LdftnCtor and TailStackEmpty
- 作成者: @pcshrosbree
- 作成日時: 2026年10月15日 18:28:17(UTC)
- マージ日時: 2026年10月16日 22:33:00(UTC)
- ラベル: area-Tools-ILVerification community-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.
変更内容
src/coreclr/tools/ILVerification/Strings.resx- エントリ名
LdftnConstructorをLdftnCtorにリネーム TailStackEmptyエントリを追加(文言はVerifierError.csのコメント "Stack not empty after tail call." と同じ)
- エントリ名
src/coreclr/tools/ILVerification.Tests/VerificationResultTests.csVerificationResultTests.EveryErrorHasMessageテストを追加。Noneを除くすべてのVerifierErrorについて、Strings.resxに空でないエントリがあることを検証します(文言の内容は検証しません)。
enum メンバーではなく resx のエントリをリネームしているため、公開 VerifierError と、エラー名にマッチする CLI の --ignore-error パターンは変更されません。リポジトリ内に LdftnConstructor を参照する他の箇所はないとのことです。
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 作成者によれば、ILVerification.Tests は修正前後で Release/Debug とも通過しています(
mainは 484/484、本変更では 485/485)。 - 新規テストは、修正を戻した場合や
TailStackEmptyエントリを外した場合に失敗し、不足しているエラー名を列挙することが確認されています。 - 作成者は、リソース修正に対してこのテストの価値は低いと見なされるなら削除してよいとコメントしています。
- 本 PR は AI(Anthropic Claude と OpenAI Codex)の支援を受けて作成され、作成者がレビューしたと記載されています。
#135869 Add CompExactlyDependsOn to some methods so that they are compiled on wasm
- 作成者: @BrzVlad
- 作成日時: 2026年10月15日 16:57:17(UTC)
- マージ日時: 2026年10月16日 05:38:14(UTC)
- ラベル: arch-wasm area-ReadyToRun
概要
CompExactlyDependsOn 属性を一部のメソッドに追加し、WebAssembly (wasm) 向けにコンパイルされるようにする変更です。複数の CompExactlyDependsOn が付いたメソッドは、指定された命令セットのうち少なくとも1つがサポートされている場合にのみコンパイルされます(すべてのISAが実行時に決定的にサポート/非サポートであることも前提)。対象メソッドはすでに PackedSimd に依存する他のメソッドの文脈で使われているため、不足していた属性を追加するだけでコンパイルが有効になります。
変更内容
いずれも System.Private.CoreLib 内で、属性の追加のみ(ロジック変更なし)です。
Buffers/Text/Base64Url/Base64UrlDecoder.cs: 属性を3行追加SearchValues/Strings/AsciiStringSearchValuesTeddyBucketizedN2.cs: 属性を2行追加SearchValues/Strings/AsciiStringSearchValuesTeddyBucketizedN3.cs: 属性を2行追加SearchValues/Strings/AsciiStringSearchValuesTeddyNonBucketizedN2.cs: 属性を2行追加SearchValues/Strings/AsciiStringSearchValuesTeddyNonBucketizedN3.cs: 属性を2行追加
公開APIの変更はなく、内部実装(ランタイムのコンパイル対象選択)に影響する変更です。破壊的変更や互換性への影響は記載されていません。
パフォーマンスへの影響
wasm 上で対象メソッドがコンパイルされるようになることで、たとえば System.Text.RegularExpressions.Tests.Perf_Regex_Common.ReplaceWords が約100倍高速化されるとのことです(作成者による記載)。
関連Issue
なし
その他
なし
#135865 [QUIC] Disable QUIC test on OSX with mono runtime
- 作成者: @ManickaP
- 作成日時: 2026年10月15日 14:16:03(UTC)
- マージ日時: 2026年10月16日 13:31:24(UTC)
- ラベル: area-System.Net.Quic
概要
OSX 上の mono runtime(MiniJIT)で発生する QUIC テストのタイムアウト対策として、該当テストを mono 環境で無効化する変更です。mono MiniJIT 専用のプラットフォーム検出が存在しないため、絞り込まず mono 全般でスキップする方針が取られています(絞り込むには yaml から msbuild 経由でテストプロセスへ環境変数を渡す必要があり、過剰と判断されています)。#133373 に関連します。
変更内容
src/libraries/System.Net.Quic/tests/FunctionalTests/ 配下のテストファイルのみの変更で、ランタイムやライブラリ本体、公開 API への影響はありません。
MsQuicCipherSuitesPolicyTests.cs(+1/-1)MsQuicRemoteExecutorTests.cs(+1/-1)MsQuicTests.cs(+1/-1)QuicConnectionTests.cs(+1/-1)QuicListenerTests.cs(+1/-1)QuicStreamConnectedStreamConformanceTests.cs(+1/-1)QuicStreamTests.cs(+1/-1)QuicTestBase.cs(+2/-0)
各テストファイルでは1行が差し替えられ、QuicTestBase.cs では2行が追加されています。具体的な差分内容は提供情報に含まれていません。
パフォーマンスへの影響
影響なし(テストコードのみの変更)
関連Issue
その他
mono 全般でテストを無効化するため、OSX 以外の mono 環境でも対象テストがスキップされる可能性があります。
#135861 [QUIC] Remove timeout
- 作成者: @ManickaP
- 作成日時: 2026年10月15日 11:29:14(UTC)
- マージ日時: 2026年10月16日 08:54:24(UTC)
- ラベル: area-System.Net.Quic
概要
QUICのテストにおける不安定さの修正です。WaitAsync に設定されていた3秒のタイムアウトが、キャンセル処理が完了する前に切れてしまうことがありました。その場合、クライアントストリームが破棄(graceful close)され、abortではなく例外が発生しない結果になっていました。このタイムアウトを削除しています。
なお、テスト自体は RunClientServer によるタイムアウトを既に持っているため、個別のタイムアウトがなくてもテストのハングは防止されます。
変更内容
src/libraries/System.Net.Quic/tests/FunctionalTests/QuicStreamTests.cs:WaitAsyncの3秒タイムアウトを削除(+1/-1)
パフォーマンスへの影響
影響なし(テストコードのみの変更)
関連Issue
その他
- テストコードのみの変更であり、公開APIやライブラリ本体の実装、互換性への影響はありません。
#135857 Swallow ObjectDisposedException when restoring blocking mode after connect async
- 作成者: @rzikm
- 作成日時: 2026年10月15日 10:45:31(UTC)
- マージ日時: 2026年10月16日 07:26:47(UTC)
- ラベル: area-System.Net.Sockets
概要
ConnectAsync 完了後にソケットのブロッキングモードを元に戻す処理で、並行して Dispose が呼ばれると、すでに破棄された SafeHandle を使用して ObjectDisposedException が発生しうる問題を修正します。ブロッキングモードの復元はベストエフォートの最適化にすぎないため、並行 Dispose に起因する ObjectDisposedException は握りつぶす(無視する)ようにしています。
変更内容
src/libraries/System.Net.Sockets/src/System/Net/Sockets/SafeSocketHandle.Unix.cs(+2/-2)src/libraries/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncContext.Unix.cs(+9/-2)- ブロッキングモード復元処理における
ObjectDisposedExceptionの扱いを変更(詳細な差分内容は提供情報に含まれていません)
- ブロッキングモード復元処理における
パフォーマンスへの影響
影響なし
関連Issue
その他
- 変更対象は Unix 向け実装(
*.Unix.cs)です。 - 公開 API の変更や互換性への影響に関する記載はありません。
#135851 JIT: Propagate rejectNegativeConst through lcl + cns in monotonicity check
- 作成者: @EgorBo
- 作成日時: 2026年10月15日 09:43:26(UTC)
- マージ日時: 2026年10月16日 14:13:19(UTC)
- ラベル: 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 をそのまま引き継ぐようにしました。
変更内容
src/coreclr/jit/rangecheck.cpp(+3/-3):lcl + cnsケースの再帰呼び出しでrejectNegativeConstを伝播するよう変更src/coreclr/jit/rangecheck.h(+1/-1): ヘルパー関数の宣言にフラグを追加src/tests/JIT/Regression_ro_2/Runtime_134454.cs(+30/-0): 負のseedを持つ回帰テストを追加(期待値は-3)
パフォーマンスへの影響
影響なし。libraries.pmi ではasm diffはありませんでした(作成者の記載)。いくつかのdiffは正確性に関するものとされています。
関連Issue
#134454(本PRで修正)
その他
- 本件はJITの誤最適化(誤ったコード生成)による正確性の修正です。
- Copilotのレビュー概要では、最適化を有効にした回帰テストの実行は未検証とされており、修正前に失敗し修正後に成功することを人間のレビューで確認する必要があるとされています。
#135850 JIT: Treat stores to EH-live locals as visible when hoisting
- 作成者: @EgorBo
- 作成日時: 2026年10月15日 09:42:50(UTC)
- マージ日時: 2026年10月16日 23:52:04(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITのループ不変コード移動(hoisting)において、例外ハンドラ内で参照されるローカル変数へのストアが「外部から可視」と扱われていなかったため、後続のthrowしうる式(a / b)がプリヘッダへ誤ってhoistされ、catchハンドラが古い値を観測してしまう問題を修正します。
HoistVisitor はローカルがアドレス公開(address-exposed)されている場合のみストアをグローバルに可視と見なしていたため、state = i + 1 の後も m_canHoistSideEffects が true のままでした。本修正では、ブロックがハンドラへ例外をスローしうる場合に、ハンドラへlive-in/outなローカル、または untracked なローカルへのストアも可視として扱います。
変更内容
src/coreclr/jit/optimizer.cpp(+5/-1): ストアの可視性判定を拡張し、ハンドラにlive、または untracked なローカルへのストアも、例外ハンドラへの後続を持つブロックでは可視として扱うようにしました。src/tests/JIT/Regression_ro_2/Runtime_134938.cs(+37/-0): 除算で例外が発生した後、catchハンドラが更新後のローカル値を観測できることを検証する回帰テストを追加しました。
パフォーマンスへの影響
作成者によると、libraries.pmi では asm diff はありません。一部のdiffは作成者がAzure DevOpsのビルド結果として共有していますが、具体的な数値は提供情報に含まれていません。
hoistingがより保守的になるため、該当パターンでは最適化機会が減る可能性があります。ただし、正しさを優先した修正です。
関連Issue
#134938(Fixes)
その他
- Copilotのレビュー概要では、例外に敏感なJITのコード移動であるため、メンテナによる確認とチェック付きランタイムでの回帰検証が必要とされています(このレビュー内では未実施)。未解決の指摘事項は0件です。
#135798 ILVerify error cleanup
- 作成者: @jkotas
- 作成日時: 2026年10月14日 21:33:22(UTC)
- マージ日時: 2026年10月16日 16:16:30(UTC)
- ラベル: area-Tools-ILVerification
概要
ILVerifyのエラー整理に関するPRです。unaligned. プレフィックスのアライメントオペランドが現状では検証されていなかったため、そのチェックを追加し、回帰テストを加えています。あわせて、既存の検証器が別のエラーコードでカバー済みの旧診断コメントアウト項目を削除しています。Closes #37393。
変更内容
src/coreclr/tools/ILVerification/ILImporter.Verify.cs(+1/-0):unaligned.のアライメントオペランドを検証する処理を追加(Copilotの概要によると、有効な値は 1, 2, 4 のみ)。src/coreclr/tools/ILVerification/VerifierError.cs(+1/-68): 旧診断のコメントアウト項目を削除し、新しいエラーコードUnalignedAlignmentを追加。既存コードの番号振り直しは行わない。src/coreclr/tools/ILVerification/Strings.resx(+3/-0): 診断メッセージ用のリソースを追加。src/coreclr/tools/ILVerification.Tests/ILTests/PrefixTests.il(+18/-0): 有効なアライメント値のテストと、不正値(3)を拒否する回帰テストを追加。
パフォーマンスへの影響
影響なし
関連Issue
#37393(Closes)
その他
- 互換性: ILVerifyの検証ツール側の変更であり、ランタイムの実行時挙動や公開APIへの影響は記載されていません。
- Copilotレビューでは「承認推奨」とされていますが、不正なアライメント値に対する診断メッセージのリソース文言に関する指摘が1件(重要度Low、ブロッキングではない)残っています。
- ビルドとテストは実行されていないと記載されています。
#135789 Wait for the OOB byte in IOControl_SIOCATMARK_Unix_Success
- 作成者: @caraioniurie47
- 作成日時: 2026年10月14日 20:09:30(UTC)
- マージ日時: 2026年10月16日 07:33:09(UTC)
- ラベル: area-System.Net community-contribution
概要
IOControl_SIOCATMARK_Unix_Success テストの不安定さ(flaky)を修正するテスト専用の変更です。Unix では SIOCATMARK はデータ到着前から 0 であるため、既存のスピン待機が即座に終了してしまいます。その状態でクライアントが帯域内(in-band)バイトを先に読むと、帯域外(OOB)バイトがまだ届いておらずマークが存在しません。結果として SIOCATMARK == 1 を期待するアサートが 0 で失敗していました(OSSupport.cs:151)。
修正として、2 回の送信の後に Socket.Select(クライアントを error リストに指定、タイムアウト 10 秒)で OOB バイトの到着を待機し、クライアントがリストに残っていることをアサートします。既存のアサートはすべて維持されています。
変更内容
src/libraries/System.Net.Sockets/tests/FunctionalTests/OSSupport.cs(+7/-0)- 送信後、
Socket.Selectで OOB データの到着を待機するコードを追加 - 既存のスピン待機は OOB 到着後に実行されるため、「OOB データ受信済み、読み取りポインタはマーク位置にない」という確認が意図どおりの状態に対して機能する
- 送信後、
設計上の判断:
client.Poll(..., SelectMode.SelectError)は不採用です。macOS のpollは OOB データをPOLLPRIとして報告せず、macOS CI の 2 構成(OSX.15.Amd64.Open、OSX.26.Arm64.Open)でタイムアウトしました。- Linux では
Socket.SelectはPOLLPRIをポーリングし、Apple プラットフォームではselectを使用して、macOS では例外セットが保留中の OOB データを報告します。 - 「帯域内読み取り後に
SIOCATMARKが 1 になるまでスピンする」案も検討されましたが、「マーク位置にある」アサートが待機に変わり、「マーク位置にない」チェックが OOB 到着前に実行され得るため不採用です。 - Windows 版のテストは変更なしです(データ送信前から
SIOCATMARKが 1 であるため、既存のスピンが OOB 到着を待つ)。
パフォーマンスへの影響
影響なし(テストコードのみの変更)。
関連Issue
#135787(Resolves)
その他
- 検証(Linux): ループバックの TCP セグメントのうち URG フラグ付きのものだけを 20/100/300 ms 遅延させた環境(NFQUEUE ヘルパーと iptables ルール使用)で、変更前のテストは毎回
OSSupport.cs:151でExpected: 1/Actual: 0により失敗し、変更後のテストは毎回成功しました。遅延なしでは両方成功します。System.Net.Sockets の機能テスト(outer-loop 除く)は変更の有無にかかわらず Linux で成功し、テストプロジェクトはnet11.0-windowsでもビルドできます。 - 未検証:
Socket.Select版は macOS およびその他の非 Linux Unix では実行されていません。Windows の .NET テストも実行されていません。 - 作成者の注記によると、本 PR の説明は AI により生成され、作成者のレビューを経ています。
#135724 JIT: Keep volatile loads when folding full-range relational comparisons
- 作成者: @EgorBo
- 作成日時: 2026年10月13日 20:48:01(UTC)
- マージ日時: 2026年10月16日 23:53:23(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITのfgOptimizeRelationalComparisonWithFullRangeConstが、volatileByte >= 0のようなフルレンジ比較を定数に置き換える際、副作用チェックにGTF_SIDE_EFFECTのみを使っていたため、非フォールトのvolatileロード(GTF_ORDER_SIDEEFFのみ保持)が捨てられ、acquireセマンティクスが失われる問題を修正します。その結果、後続のロードがスピンループの外へホイストされる可能性がありました。判定をGTF_OBS_EFFECTに変更することで、volatileロードが保持されるようになります。
変更内容
src/coreclr/jit/morph.cpp: 定数畳み込みの副作用チェックをGTF_OBS_EFFECTベースに変更(+1/-1)src/tests/JIT/Regression_ro_2/Runtime_134477.cs: volatileロードのacquireセマンティクスを検証するスレッドを用いた回帰テストを追加(+33)
パフォーマンスへの影響
影響なし(記載された情報の範囲では、パフォーマンスに関する言及はありません)。ただし、volatileロードが畳み込みで除去されなくなるため、該当パターンでは本来必要なロードが保持されます。
関連Issue
その他
- Copilotのレビューでは、回帰テストがマルチスレッドを使用するため、シングルスレッド構成(例:マルチスレッド非対応の環境)ではテストをゲートする必要があるとの指摘(Medium)が1件オープンになっています。
- レビュー結果は「Changes recommended」です。
#135650 Fix concurrent CCW vtable and IID publication
- 作成者: @Copilot
- 作成日時: 2026年10月12日 23:07:59(UTC)
- マージ日時: 2026年10月16日 22:35:54(UTC)
- ラベル: area-Interop-coreclr
概要
CCW(COM Callable Wrapper)の vtable とディスクリプタの初期化・公開が並行クエリ間で競合し、準備完了フラグが初期化完了前に観測される問題を修正するPRです。また、レイアウトフラグや遅延IIDフラグの競合更新でビットが失われ、使用中の vtable が再構築されうる問題も修正します。
変更内容
src/coreclr/vm/comcallablewrapper.cpp(+33/-52)- 共有フラグを acquire 読み取りし、既存ビットを保持するポインタ幅の CAS で更新するようにしました。
- クラスの準備完了の公開を、ディスクリプタの割り当てとアロケーション所有権のコミット後に行うようにしました。
- 遅延IIDは、既存の Crst の外でプライベートに生成し、ロック下で再確認したうえで不変のIIDを1つだけコミットします。成功した読み取り側はロックフリーのままです。
src/coreclr/vm/comcallablewrapper.h(+22/-38)- フラグオフセットのアライメントをコンパイル時に強制するようにしました。
- CMT の表現とコントラクト上で参照されるビットは変更していません。
- カバレッジとして、新規型に対する並行クラスレイアウト/IID検索と、明示的インターフェースのレイアウトのストレスケースを追加し、その後にネイティブ呼び出しを行うとされています。ただし、提示された変更ファイルにはテストファイルは含まれていません。
パフォーマンスへの影響
ベンチマーク結果の記載はありません。IIDの読み取りパスはロックフリーのまま維持され、IID生成はロックの外で行われるため、ロック保持範囲が縮小します。
関連Issue
その他
なし
#135519 cDAC: skip empty assembly-list slots in Loader_1.GetModuleHandles
- 作成者: @pcshrosbree
- 作成日時: 2026年10月09日 16:41:22(UTC)
- マージ日時: 2026年10月16日 17:08:34(UTC)
- ラベル: community-contribution area-Diagnostics-cdac
概要
cDAC の Loader_1.GetModuleHandles が、collectible アセンブリのアンロード後に AppDomain のアセンブリリスト内に残る空スロット(NULL)を読み込んで例外を投げる問題を修正します(Fixes #135518)。AppDomain::RemoveAssembly はアンロード時にスロットを NULL にしますが、ネイティブの AppDomain::AssemblyIterator::Next_Unlocked はこれをスキップします。Loader_1 も同様に null エントリをスキップするようにし、残りのモジュールを返せるようにしました。
変更内容
Loader_1.cs:GetModuleHandlesで null のアセンブリポインターをスキップする処理を追加 (+4)docs/design/datacontracts/Loader.md: 疑似コードに同じ null チェックを追加。また、Tenured 判定の条件の反転を修正(疑似コードでは module がTenuredの collectible アセンブリをスキップしていましたが、ネイティブおよびLoader_1では Tenured でない場合にスキップします)LoaderTests.cs:GetModuleHandles_SkipsEmptySlotsを追加。mock AppDomain のリスト[empty, A, empty, B, empty]を列挙し、[A, B]が返ることを検証しますMockDescriptors.Loader.cs:AddAppDomainが空スロットとしてnullを受け取れるようにし、3つの AppDomain データ型の登録を共通ヘルパーに集約
パフォーマンスへの影響
影響なし
関連Issue
#135518(本PRで修正)。#135516 がマージ済みで、そこで追加された mock AppDomain をテストが利用しています。
その他
- 修正前は、新規テストが mock の全4アーキテクチャで
VirtualReadException: Failed to read pointer at 0x10(32bit では0x8)により失敗します。これはアドレス 0 にあるAssemblyのAssembly.Errorのオフセットです。 - 修正後は、リベース済みコミットで linux-x64、osx-arm64、windows-x64 の
Microsoft.Diagnostics.DataContractReader.Tests(3361 テスト)が成功したと報告されています。テスト変更のみを適用した場合は、各環境でこの4ケースのみが失敗します。 - 作成者によると、本変更は AI(Anthropic Claude、OpenAI Codex によるチェック)の支援で作成され、作成者がレビューと計測を行っています。
#135471 [cDAC] Handle GettingReJITParameters state
- 作成者: @pcshrosbree
- 作成日時: 2026年10月09日 06:34:38(UTC)
- マージ日時: 2026年10月16日 17:15:15(UTC)
- ラベル: community-contribution area-Diagnostics-cdac
概要
ReJIT のパラメータ設定中に IL コードバージョンが取る状態 RejitFlags::kStateGettingReJITParameters (1)(例: プロファイラの GetReJITParameters コールバック実行中)を、cDAC の ReJIT コントラクトが扱えず InvalidOperationException を投げていた問題を修正します。ダンプ取得やライブアタッチがこの状態のメソッドを捕捉すると、SOS/DBI のクエリが失敗していました。
修正後は、Requested/Active 以外の未知の状態値(状態 1 を含む)を新設の RejitState.Unknown にマップし、例外を投げずにレガシー DAC と同様の挙動にします。
変更内容
IReJIT.cs:RejitState.Unknownを追加ReJIT_1.cs: 認識できない状態値を例外ではなくUnknownにマップSOSDacImpl.cs:GetReJITInformationとGetMethodDescData経由のCopyNativeCodeVersionToReJitDataで、UnknownをkUnknownとして報告GetReJITInformationの未処理状態パスのDebug.Assert(true, ...)(実質 no-op)をDebug.Failに変更- 既存の
Requested/Active比較を使う呼び出し元は、Unknownに対してレガシー DAC と同じ挙動にGetPendingReJITIDはS_FALSEを返すGetRejitIdsは該当バージョンをスキップGetProfilerModifiedILInformation/GetMethodsWithProfilerModifiedILは ReJIT で変更されたバージョンとして扱うGetActiveRejitILCodeVersionNodeはアクティブなノードなしと報告
ReJIT.md: 仕様を更新し、「認識できない値はUnknown」というルールを明記- テスト:
ReJITTests.cs/MockDescriptors.ReJIT.cs: 状態 1 と未定義値 3 でGetRejitStateが例外なくUnknownを返すことを検証SOSDacInterface7ReJITTests.cs: 状態 1 のバージョンでGetReJITInformationが成功しkUnknownを報告することを検証
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 作成者によるテスト結果: linux-x64 で UnitTests 3300/3300 が成功。
GetRejitStateのUnknown分岐を元の throw に戻すと、追加した 2 テストの全 12 行のみが失敗することを確認済み。CdacUsageGraph docs --checkと Usage.Tests も成功。 - 作成者の補足: レガシー
GetPendingReJITIDはS_FALSE時に*pRejitIdを -1 に設定しますが、cDAC は値を変更しません(本 PR では未対応)。 - 本 PR は AI(Anthropic Claude、OpenAI Codex によるレビュー)の支援で作成されたと記載されています。
#135413 [browser][wasi] Allow uncontended synchronous waits and un-gate Roslyn workspace tests
- 作成者: @lewing
- 作成日時: 2026年10月08日 09:14:28(UTC)
- マージ日時: 2026年10月16日 23:47:31(UTC)
- ラベル: arch-wasm area-System.Threading os-wasi os-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 注釈を維持(ブロックするかどうかは実行時状態に依存するため)
変更内容
- ランタイム/CoreLib
System.Private.CoreLibのCondition.cs、ManualResetEventSlim.cs、Monitor.cs、SemaphoreSlim.cs、Task.cs(+44/-29 と最大の変更)を修正し、実際にブロックする経路でのみ PNSE を投げるよう変更- Mono 側
Monitor.Mono.csも修正 src/mono/wasm/threads.mdにドキュメントを追記
- テストの追加
SemaphoreSlimTests、ManualResetEventSlimTests、MonitorTests、TaskRtTests_CoreにWait_SingleThreaded系のテストを追加
- テストのゲート解除
ConfigBindingGenTestDriver.cs、GeneratorTests.Incremental.cs(Configuration.Binder)、Options のSourceGeneration.Unit.Tests/Main.csとEmitterTests.csからIsMultithreadingSupported条件を削除
- WASI で引き続きスキップ
UpgradeToGeneratedRegexAnalyzerTestsは WASI でスキップ継続。理由は、Roslyn のReferenceAssemblies.ResolveAsyncが nuget.org への外向き通信を必要とし、WASI テストサンドボックスでは利用できないため
パフォーマンスへの影響
影響なし(ベンチマーク結果の記載なし)。ブロックを伴わない同期待機を許可する動作変更が中心で、イベントループのデッドロック保護は維持されます。
関連Issue
- #134972(Resolves)
- 関連: #123329、#135335、#135778、#135887、#135888、#135889
その他
- 互換性(単一スレッド Browser): #123329 で PNSE になっていた「利用可能な
SemaphoreSlim」「セット済みManualResetEventSlim」「ゼロタイムアウト待機」は、.NET 10 の #123329 以前と同様に成功/通常結果を返すようになります。条件未成立で正のタイムアウトまたは無限待機は引き続き PNSE です。 - テスト結果
- Browser:
System.Threading.Testsは 640 実行、552 成功、88 スキップ、0 失敗 - WASI CoreCLR(Release, interpreter): Roslyn 系3プロジェクトのベースライン201件の失敗(
SemaphoreSlim.Wait由来の PNSE)が本変更で全て成功 - 成功から失敗に変わったテストはなし
- Browser:
MutexTests.NameOptionsApiCompatibilityTestの3件の失敗は本変更の有無に関わらず発生(#135778 起因、#135887 で追跡)- Mono の WASI 実行は未検証
#135311 Managed ilasm: honour explicit local slots, scope local names lexically, and emit LocalScope/LocalVariable rows
- 作成者: @pcshrosbree
- 作成日時: 2026年10月06日 20:43:30(UTC)
- マージ日時: 2026年10月16日 01:59:49(UTC)
- ラベル: area-ILTools-coreclr community-contribution
概要
マネージド版ilasm(src/tools/ilasm)をネイティブilasmの代替とするための一環として、ローカル変数の扱いにある3つの欠陥を修正するPRです。これにより、PortablePdbテスト(src/tests/ilasm/PortablePdb)のTestPortablePdbLocalScope4ケースが通るようになります(修正前は10ケース中6ケースのみ成功、修正後は全ケース成功)。
- LocalScope/LocalVariableの行が未出力だった問題: PDB要求時、名前付きローカルを宣言する字句スコープごとに、
{から}のオフセット範囲でLocalScope行を出力し、各名前付きローカルにLocalVariable行(Index=スロット、属性0)を出力します。メソッド本体全体、.try/catch/filter/finally/faultの各本体もスコープとして扱われます。行は開始オフセット順、同一開始なら長い範囲が先にソートされます。 - 明示スロットが無視されていた問題:
.locals init ([3] int32 x)の[n]がスロットnとして扱われ(テーブルはパディング)、[n]なしのローカルは最大スロットの次を使用します。スコープを閉じて解放されたスロットは同じ型で再宣言可能です。ネイティブ同様の診断("Local var slot n is in use"警告、"type conflict"/"Undefined type of local var slot"エラー)を出力します。.locals内の...センチネルはスロットを消費しなくなりました。 - ネストしたブロックで名前がスコープされない問題: ブロックごとに名前スコープを持ち、最内側から検索します。同スコープ内では最初の宣言が優先され、名前は大文字小文字を区別します。
変更内容
GrammarActions.MethodBodies.Locals.cs(新規、+362): ローカルのスロット割り当て・スコープ管理ロジックGrammarActions.BuildImage.cs: LocalScope/LocalVariable行の出力処理GrammarActions.MethodBodies.Directives.cs/.ExceptionHandling.cs: ブロック(.try/catch等)のスコープ開始・終了への対応GrammarActions.Conversions.cs/.Instructions.cs/.Signatures.Actions.cs、CILParser.SemanticValues.Signatures.cs: スロット指定・名前解決に伴う変更Diagnostic.cs、EntityRegistry.cs: 新規診断およびローカル管理に関する追加MANAGED-ILASM-FIXES.md: ネイティブとの意図的な差異を追記- テスト追加:
LocalTests(33件)、LocalScopeTests(38件)、LocalScopeCaseGenerator/LocalScopeGeneratedCaseTests(シード付き200プログラム生成、5 theory・1,000行)
互換性への影響: 項目2・3により、スロットが飛び飛び・再利用されている、名前がシャドーイング/スコープ外で使われている、.localsにセンチネルがある入力では、出力ILが変わります。ブロック内で宣言した名前をブロック外で使うとエラーになります(ネイティブと同様)。
ネイティブとの意図的な差異:
- 命令を持たないスコープにはLocalScope行を出力しない(ネイティブは長さ0で出力するが、仕様は正の長さを要求)
- 同一スコープ内で名前が重複する場合、最初の宣言のスロットに対する行のみ出力(仕様が禁じる重複した名前/インデックスを避けるため)
- スロット範囲は0〜65535。範囲外の明示スロット(
[-1]を除く)は報告され、次のスロットが使われる
パフォーマンスへの影響
影響なし(PDB専用のアロケーション制御があるが、出力は変わらない)。
関連Issue
- #135212(マネージドilasmをネイティブilasmの代替にする議論)
- #135297(PDBドキュメント、マージ済み)、#135289(別ファイル
.pdb、マージ済み) - #135314(ネイティブとの未対応の差異の追跡)
その他
- 作者からの質問: 仕様ではメソッドの最初のスコープは本体全体に及ぶとされているが、ネイティブ同様、メソッドレベルの
.localsが名前を持たない場合は全体スコープを出力していない(TestLocalScopes3がその挙動を期待)。常にルートスコープを出力すべきか。 TestLocalScopes4.ilはネイティブ同様に"in use"警告を出すようになるが、CLIの診断表示が位置情報としてソース全文を出力する問題は別途修正が必要。- ネイティブilasmとの比較では、ツリー外で実行した14件の
IlasmPortablePdbTesterケースが両ilasmとも全て成功。 - 本変更はAI支援(Anthropic Claude、OpenAI Codex)により作成され、作者がレビュー済み。
#135276 Fix suspend of CLR initialization thread when started from dispatch queue on apple
- 作成者: @BrzVlad
- 作成日時: 2026年10月06日 14:36:13(UTC)
- マージ日時: 2026年10月16日 05:29:28(UTC)
- ラベル: area-VM-coreclr
概要
Apple プラットフォームで、dispatch_async 経由で起動されたスレッド上から CoreCLR を初期化した場合、GC サスペンドに使うシグナル(INJECT_ACTIVATION_SIGNAL)がマスクされたままになり、そのスレッドが GC で停止せずアプリがハングし得る問題を修正します。
従来、外部スレッドをランタイムにアタッチする AllocatePalThread 経路ではシグナルのマスク解除が行われていましたが、CoreCLR 初期化スレッド自体には行われていませんでした。本 PR でこの初期スレッドにも同様のマスク解除を行います。作成者によれば、macios は CoreCLR をこのようなワーカースレッドから初期化しないため、モバイルのテストランナーなど主にテスト用途向けの修正です。
変更内容
src/coreclr/pal/inc/pal.h: +6 行(PAL 側の公開宣言/定義の追加)src/coreclr/pal/src/exception/signal.cpp: +4/-4(シグナル関連処理の変更)src/coreclr/pal/src/include/pal/signal.hpp: -10 行(内部宣言の削除)src/coreclr/pal/src/init/sxs.cpp: -4 行src/coreclr/pal/src/arch/wasm/stubs.cpp: +2/-1(wasm 向けスタブの調整)src/coreclr/vm/threads.cpp: +4 行(初期化スレッドに対する処理の追加)src/tests/JIT/Regression/CLR-x86-JIT/V2.0-Beta2/b425314/b425314.cs、b426654/b426654.il: 各 -1 / -5 行(テストファイルの変更)
内部実装(PAL / VM)の修正であり、公開 API の変更や互換性への影響は提供情報からは読み取れません。
パフォーマンスへの影響
影響なし
関連Issue
その他
- 対象は Apple プラットフォーム上で
dispatch_asyncにより起動されたスレッドから CoreCLR を初期化するケースです。 - テストファイルの変更内容の詳細は提供情報からは不明です。
#134978 [wasi] Enable EventPipe (FEATURE_PERFTRACING) for CoreCLR WASI
- 作成者: @lewing
- 作成日時: 2026年09月30日 20:11:59(UTC)
- マージ日時: 2026年10月16日 22:25:24(UTC)
- ラベル: arch-wasm area-Tracing-coreclr os-wasi
概要
CoreCLR の WASI ビルドで EventPipe(FEATURE_PERFTRACING)を有効化する PR です。従来は無効だったため、EventPipe 経由の機能が動作せず、特に EventSource.CurrentThreadActivityId が常に Guid.Empty を返していました。browser CoreCLR と同様に、スレッドレス EventPipe(FEATURE_PERFTRACING_DISABLE_THREADS)を使って有効化します。
変更内容
- 機能の有効化:
src/coreclr/CMakeLists.txtの WASI 向けオーバーライドと、clr.featuredefines.propsのFeaturePerfTracing=falseを削除し、ネイティブランタイムと CoreLib の設定を一致させました。 - WASI 用コールヘルパーの再生成 (
src/coreclr/vm/wasm/wasi/): 旧テーブルには[UnmanagedCallersOnly] EventPipeEventProvider.Callbackのリバース thunk や、EventPipe /NativeRuntimeEventSourceの QCall 用 interp-to-native thunk がなく、EventSource使用時にunknown thunkでクラッシュしていました。generate-coreclr-helpersで再生成しています(今後のずれを防ぐ CI チェックは #135156 で追加)。 - 診断サーバー PAL: WASI には
AF_UNIXがないため、TCP 版(FEATURE_PERFTRACING_PAL_TCP)をビルドしてdebug-palにリンクしました(#130383 で追跡されていたリンク無効化を解除)。ただしリッスン/接続ポートはすべて無効(Mono WASI と同じ設定)のため、EventPipe はプロセス内でのみ動作し、外部ツールからのアタッチはできません。 - WASI イベントループからの EventPipe ジョブ実行: WASI にはホストのイベントループがないため、
ep_rt_queue_jobがネイティブのリストにジョブを積みます(eventpipeinternal.cpp)。ThreadPoolWorkQueue.Dispatch()の前にWasiEventLoopがEventPipeInternal_WasiHasPendingJobsで保留ジョブを確認し、あればマネージドのポンプ(WasiEventPipeJobs.cs)を起動します。ポンプはEventPipeInternal_WasiRunJobsを呼び、Task.Delayで 100ms ごとに再ポーリングし、ジョブがなくなると停止します。 - シャットダウン時のトレース完結:
ep_rt_shutdownで WASI のみキュー済みジョブを一度実行し、ストリーミングセッションの参照を解放して、end-of-stream タグの書き込みとファイルクローズを行います。 - 共有コード
ep-session.cの修正:ep_rt_queue_job失敗時はジョブ用に取得した参照を解放し、書き込み失敗後はstreaming_loop_tickがジョブを保持して次の tick でセッション参照を解放します(リーク防止。browser のこの経路の挙動も変わります)。 - テスト:
ActivityTrackingから #134963 の[ActiveIssue]4 件を削除しました。Mono WASI はSystem.Diagnostics.Tracing.Testsを実行しないため影響はありません。またEventPipeListenerハーネスはDiagnosticsClientIPC が必要なため、browser と同様に WASI では除外しています。 - ビルド関連:
eng/native.wasm.targets、qcallentrypoints.cpp、eventpipeadapter.h、System.Private.CoreLib.Shared.projitems、EventPipeEventDispatcher.Wasm.csなども変更されています。
パフォーマンスへの影響
ベンチマーク結果は示されていません。メモリについては、セッションのバッファマネージャーが上限までオンデマンドで確保します。上限は起動時ファイルセッションで DOTNET_EventPipeCircularMB(既定 1024 MB)、プロセス内 EventListener セッションで 10 MB です。既定の Drop モードでは上限超過分のイベントは破棄されます(バッファ済みデータは上書きされません)。Block モードはドレインスレッドが必要なため、シングルスレッドビルドでは拒否されます。Main が同期の場合はポンプが動かず、イベントは上限までバッファされ、シャットダウン時にセッション無効化とともに書き出されます。
関連Issue
- #134963(Resolves)
- #130383(診断サーバーのリンク無効化の追跡)
- #135156(コールヘルパーのずれを防ぐ CI チェック)
- #134813(
[ActiveIssue]隔離を追加した PR)
その他
- 検証(macOS arm64、Debug ランタイム、Release ライブラリ、WASI SDK 34、wasmtime 49.0.1):
System.Diagnostics.Tracing.Testsは 39 件実行、37 件成功、0 件失敗、2 件スキップでした。隔離を外したActivityTrackingの 4 テストも成功しています。- チェックイン済みのコールヘルパーで構築した corerun でも同じ結果です(再生成前は
unknown thunk for unmanaged callers only methodでクラッシュしていました)。 - ドレイン確認(マージ前、wasmtime 45
#134082 Handle parameterized ILTrim interop types
- 作成者: @jtschuster
- 作成日時: 2026年09月16日 17:43:49(UTC)
- マージ日時: 2026年10月16日 16:45:10(UTC)
- ラベル: linkable-framework area-Tools-ILLink
概要
ILTrimにおいて、PInvokeメソッドのシグネチャに含まれるパラメータ化された型(配列・ポインター・byref など)を再帰的に要素型へ正規化してから、フィールドおよびアロケーションの保持処理を適用するようにする変更です。これにより、パラメータ化型を経由して渡されるinterop型のフィールドが正しく保持されることを狙っています。
変更内容
src/coreclr/tools/ILTrim.Core/DependencyAnalysis/TokenBased/MethodDefinitionNode.cs: PInvokeメソッドのシグネチャ中の型を要素型まで再帰的に正規化する処理を追加(+7/-3)。src/tools/illink/test/Mono.Linker.Tests.Cases/Interop/PInvoke/UnusedFieldsOfTypesAreNotRemoved.cs: パラメータ化型を含むinterop型のテストケースを追加(+87/-1)。作成者によると、構造体は既定で Sequential のため常にフィールドが保持され、既存の「interop型のフィールドを保持する」テストでは今回の変更対象コードを検証できません。そのため追加テストでは構造体にAutoを指定しています。これは現実的なシナリオではないものの、正しさの検証には有効とのことです。
検証結果(作成者による記載):
- Release ILTrim: 合計928件、成功424件、スキップ504件、失敗0件、エラー0件
./build.sh tools+tools.ilasm+tools.illinktests+tools.cdactests -testは警告0・エラー0で成功- ILCompiler.Compiler の Release ビルドは警告0・エラー0で成功
パフォーマンスへの影響
影響なし(パフォーマンスに関する記載はありません)。
関連Issue
なし
その他
- 本PRはGitHub Stacks CLIで作成されたスタックの一部です。
- 変更はILTrim(トリミングツール)の内部実装とテストに限られ、公開APIの変更や互換性への影響に関する記載はありません。