注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #136023 Add ILVerify tests for exception-handling errors
- #136019 Report byref-like struct arguments to the GC in helper-based tail calls
- #136018 Fix malformed XML doc comments under src/coreclr/tools
- #136014 [wasm] Bump chrome for testing - linux: 155.0.8059.84, windows: 155.0.8059.85, mac: 155.0.8059.85
- #136013 Use memory.copy for the memmove QCall on browser-wasm
- #135994 ilverify: allow ldsflda of initonly static fields outside the cctor
- #135993 Managed ilasm: do not refer to native ilasm in comments
- #135974 Use geometric body buffer growth in HTTP loopback servers
- #135943 [NativeAOT] Hash relocations in method body folding keys
- #135911 Remove support for BigInteger in generated ASN types
#136023 Add ILVerify tests for exception-handling errors
- 作成者: @pcshrosbree
- 作成日時: 2026年10月18日 03:57:20(UTC)
- マージ日時: 2026年10月18日 06:08:00(UTC)
- ラベル: area-Tools-ILVerification community-contribution
概要
ILVerify (ILVerification.Tests) に、例外処理関連の VerifierError コード5件のテストを追加するPRです。main 時点で、どの _Invalid_ / _InvalidType_ テスト名にも含まれていない42件のエラーコードを埋める小規模バッチの第1弾です。本番コードの変更はなく、テストILのみの追加です。
変更内容
src/coreclr/tools/ILVerification.Tests/ILTests/ExceptionRegionTests.il(+112行)に以下を追加しています。
| 追加テスト | 期待されるエラー |
|---|---|
Rethrow.InFinally_Invalid_Rethrow |
Rethrow |
Catch.EndsWithEndfinally_Invalid_Endfinally |
Endfinally |
Catch.BranchOut_Invalid_BranchOutOfHandler |
BranchOutOfHandler |
Filter.HandlerEndsWithEndfilter_Invalid_Endfilter |
Endfilter |
Filter.ExceptionLeftOnStack_Invalid_EndfilterStack |
EndfilterStack |
Rethrow.InCatch_Valid(有効ケース) |
エラーなし |
- 各 Invalid テストは「ちょうど1つのエラー」を期待します。そのため、期待エラーが出ない場合や他のエラーも同時に報告される場合は失敗します。
- 追加前は
rethrowを使うテストがなく、catch ハンドラ内のrethrowが受理されることは検証されていませんでした。Rethrow.InCatch_Validはこれを補います。
対象外としたコード(再現するILを書けなかったもの):
FilterOrCatchUnexpectedStack/FinOrFaultNonEmptyStack: ハンドラ先頭への有効な分岐はハンドラ内部からのみで、その時点では入口スタックが設定済みのため、深さの不一致はPathStackDepthとして報告されます。CatchByRef: catch 句の型トークンが byref 型に解決されず、先にBadTypeSpecで拒否されます。
パフォーマンスへの影響
影響なし(テストのみの追加)。
関連Issue
なし
その他
- 検証結果(linux-x64、SDK 11.0.100-rc.1.26420.103、
main42118298a26 ベース):- 変更前 502/502、変更後 508/508 で成功。
- 各新規テストが失敗し得ることの確認(一時的な編集のため PR には含まれません):
ILImporter.Verify.csで該当エラーの検出を無効化すると、各回 507/508 でそのテストのみ失敗します。ImportRethrowの catch ハンドラ用の早期returnを無効化すると、Rethrow.InCatchのみRethrowエラーで失敗します。- テスト名の期待エラーを別コードに変えると、各回 507/508 でそのテストのみ失敗し、元のエラーが報告されます。
- 作成者は、AI支援(Anthropic Claude、OpenAI Codex)を用いて作成し、投稿前にレビューしたと記載しています。
- Copilotのレビューでは、未解決の指摘なしで承認推奨とされています(ビルドとテストはレビュー中には再実行していません)。
#136019 Report byref-like struct arguments to the GC in helper-based tail calls
- 作成者: @EgorBo
- 作成日時: 2026年10月18日 02:26:19(UTC)
- マージ日時: 2026年10月18日 18:47:30(UTC)
- ラベル: 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 として報告するため、それを利用できます。
変更内容
src/coreclr/vm/tailcallhelp.cpp(+2/-1):GenerateGCDescriptorで byref-like 構造体を GC ポインタを持つ構造体と同様に扱うよう条件を変更src/tests/JIT/Regression_2/Runtime_136010/Runtime_136010.il(+117/-0):Span<int>引数を持つヘルパーベースの tail call を行う最小限の IL 回帰テストを追加src/tests/JIT/Regression_2/Runtime_136010/Runtime_136010.ilproj(+9/-0): 上記テスト用のプロジェクトファイルを追加
パフォーマンスへの影響
影響なし(提供された情報にベンチマーク結果の記載はありません)
関連Issue
#136010(本PRで修正)
その他
- ランタイム内部(CoreCLR VM)の実装修正であり、公開 API や互換性への影響に関する記載はありません。
- 追加された回帰テストは、tail call のスタブ間で GC が発生しないと失敗を再現できないため、主に GC ストレス実行のテスト構成で検出されるとのことです。
#136018 Fix malformed XML doc comments under src/coreclr/tools
- 作成者: @pcshrosbree
- 作成日時: 2026年10月18日 02:19:19(UTC)
- マージ日時: 2026年10月18日 07:38:33(UTC)
- ラベル: area-ReadyToRun community-contribution
概要
src/coreclr/tools 配下の7ファイルにある、XMLドキュメントコメント9箇所の不正なXMLや無効な参照を修正するクリーンアップPRです(コメントのみの変更で、コード変更はありません)。これらのプロジェクトは GenerateDocumentationFile を有効にしていないため現在は無視されますが、有効化すると警告となり、警告をエラー扱いにしている場合はビルドが失敗します。作成者はドラフトの任意クリーンアップとしており、不要であればクローズしてよいとしています。
変更内容
MethodIL.cs:MethodILScope.OwningMethodの空のcrefにMethodILScopeを指定DefType.FieldLayout.cs: コメント内のVector<T>をVector<T>にエスケープ(2箇所)CustomAttributeTypeNameParser.cs:CustomAttributeTypeNameFormatterへのcrefを<c>テキストに変更(ILVerificationがパーサーをフォーマッタなしでコンパイルするため)CustomAttributeTypeNameFormatter.cs:GetTypeByCustomAttributeTypeNameへのcrefに4つのパラメータをすべて明記UnmanagedPdbSymbolReader.cs:<paramref="punk" />を<paramref name="pUnk"/>に修正ILEmitter.cs: オーバーロードが複数あるILEmitter.NewTokenへの曖昧なcrefを、ILEmitterへのリンクとNewTokenの<c>テキストに変更AccessVerificationHelpers.cs:paramrefのcurrentClassを正しいパラメータ名currentTypeに修正(2箇所)
パフォーマンスへの影響
影響なし(コメントのみの変更)
関連Issue
その他
- 検証:
-p:GenerateDocumentationFile=true -p:TreatWarningsAsErrors=falseを指定して ILVerification と ILCompiler.TypeSystem をReleaseビルドした結果、src/coreclr/tools配下のファイルにドキュメント関連の診断は出ませんでした。通常のReleaseビルドは警告0・エラー0で、ILVerification.Tests は501件中501件が成功しています。 - ILCompiler.TypeSystem のビルドで参照される
src/tools/illinkには別のドキュメントコメント問題が残っていますが、本PRの対象外です。 - 背景: #135989 での、Microsoft.ILVerification にXMLドキュメントファイルを同梱すべきかという議論の中で見つかったものです。メンテナーからは、共有型システムは他者が依存できるものとして文書化すべきではないとの説明がありました。
#136014 [wasm] Bump chrome for testing - linux: 155.0.8059.84, windows: 155.0.8059.85, mac: 155.0.8059.85
- 作成者: @github-actions[bot]
- 作成日時: 2026年10月18日 00:10:45(UTC)
- マージ日時: 2026年10月18日 21:51:01(UTC)
- ラベル: arch-wasm area-Infrastructure-mono
概要
WebAssembly(wasm)テストで使用する Chrome for Testing のバージョンを更新する自動PRです(作成者: github-actions[bot])。各OS向けの更新後バージョンは以下のとおりです。
- Linux: 155.0.8059.84
- Windows: 155.0.8059.85
- macOS: 155.0.8059.85
変更内容
eng/testing/BrowserVersions.props(+6/-6)- ブラウザテストで利用する Chrome のバージョン定義を、上記の値に更新しています。
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
なし
#136013 Use memory.copy for the memmove QCall on browser-wasm
- 作成者: @lewing
- 作成日時: 2026年10月17日 23:54:51(UTC)
- マージ日時: 2026年10月18日 23:46:35(UTC)
- ラベル: arch-wasm area-VM-coreclr os-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はオーバーラップするバッファをmemmoveQCall に渡すため、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のパスがあるため影響を受けません。
変更内容
src/coreclr/vm/qcallentrypoints.cpp(+21/-0): browser 向けのmemmoveQCall を__builtin_memmoveを呼ぶラッパーにバインドするよう変更。emsdk に emscripten-core/emscripten#27654(__builtin_wasm_memory_copyによる memmove、emscripten 6.0.10+)が入ったらラッパーを削除する旨の TODO を記載。src/libraries/System.Private.CoreLib/src/System/SpanHelpers.ByteMemOps.cs(+2/-0): 変更行数は +2 のみで、内容は提供情報からは不明です。
パフォーマンスへの影響
composite R2R の browser-wasm publish(PublishReadyToRun=true)、Release、node 上で、オーバーラップするバイト CopyTo(dest = src + 1)を計測した結果(1呼び出しあたり ns):
| Size | Before | After |
|---|---|---|
| 1024 | 292 | 29 |
| 3000 | 782 | 44 |
| 6000 | 1520 | 74 |
| 12000 | 3030 | 136 |
- 非オーバーラップの対照ケースは変化なし(3000で約43ns、6000で約125ns)。
- ベンチマークは dotnet/performance の
Span<T>.CopyToOverlap形式です。 - 計測は arm64 macOS 1台のみで、同一マシン上で Mono は計測していません。
関連Issue
#136012(emsdk のバンプを追跡)
その他
- 検証内容: browser-wasm Release で
clr.nativeとclr+libs+packsをビルドし、オブジェクトにmemory.copyが含まれることを確認。上記の R2R publish ベンチマークも実行。 - 未実施: ライブラリ/ランタイムのテストスイートの実行、WASI のビルド・テストは行っていません。
- 本PRの説明文は GitHub Copilot の支援で作成されたものです。
#135994 ilverify: allow ldsflda of initonly static fields outside the cctor
- 作成者: @lagudafuadtosin
- 作成日時: 2026年10月17日 06:38:50(UTC)
- マージ日時: 2026年10月18日 00:55:50(UTC)
- ラベル: area-Tools-ILVerification community-contribution
概要
ILVerifyにおいて、initonly な静的フィールドに対する ldsflda を、静的コンストラクタ(cctor)外でも許可するよう変更するPRです。インスタンスフィールドの ldflda と同様に InitOnly チェックを外し、ストア命令(stsfld 等)のチェックは従来どおり維持されます。
変更内容
src/coreclr/tools/ILVerification/ILImporter.Verify.cs:ldsfldaに対するInitOnlyチェックを削除(+1/-2)src/coreclr/tools/ILVerification.Tests/ILTests/FieldTests.il: 新しいテストケースを追加(+9/-1)。作成者によると、このケースは main では失敗し、修正後は成功しますdocs/design/specs/Ecma-335-Augments.md: 仕様の補足ドキュメントを追記(+5)
影響範囲は ILVerify(検証ツール)の内部実装であり、ランタイムの実行時動作や公開APIの変更は提供情報からは確認できません。
パフォーマンスへの影響
影響なし
関連Issue
その他
ldsfldaでinitonlyフィールドのアドレスを取得する場合、cctor外でも検証エラーにならなくなります。書き込み(ストア)側のチェックは維持されます。- 提供情報からは、互換性への影響(破壊的変更・非推奨化)、セキュリティ修正、ベンチマーク結果の有無は確認できません。
#135993 Managed ilasm: do not refer to native ilasm in comments
- 作成者: @pcshrosbree
- 作成日時: 2026年10月17日 06:24:15(UTC)
- マージ日時: 2026年10月18日 00:47:31(UTC)
- ラベル: area-ILTools-coreclr community-contribution
概要
managed ilasm(src/tools/ilasm)のコメントから、ネイティブ ilasm への言及を取り除く変更です。#135932 のレビューで @jkotas が「コメントはネイティブ ilasm を参照せず、それ単体で理解できるようにすべき(互換性のために残している不自然な挙動を除く)」と指摘したことを受け、#135311、#135297、#135289 で追加したコメントに適用しています。
ネイティブ ilasm との比較で説明していたコメントは、コードが従うルールそのものを記述する形に書き換え、単なる補足(「As in native ilasm, ...」など)だった記述は削除しています。互換性維持のための挙動を説明していたコメントは対象に含まれていません。
変更内容
ILAssembler配下:GrammarActions.BuildImage.cs、GrammarActions.MethodBodies.Locals.cs、ILAssemblerPEBuilder.cs、Options.cs、PdbDocumentTable.csのコメントを修正ilasm配下:OutputFileWriter.cs、Program.csのコメントを修正- テスト:
CompilerOptionsTests.cs、LocalScopeTests.cs、LocalTests.cs、PdbDocumentTests.cs、SourceDirectiveTests.cs、およびGeneratedCases/LocalScopeCaseGenerator.cs、GeneratedCases/PdbCaseGenerator.csのコメントを修正 - テスト名の変更:
SlotGapReusedSlotAndShadowedNameInTryAndCatchBodies_GiveTheRowsOfNativeIlasmの接尾辞をGiveARowForEachScopeに変更(他にこの名前を参照する箇所はないとのこと) - 上記のテスト名変更を除き、コメントのみの変更です。
パフォーマンスへの影響
影響なし(コメントとテスト名の変更のみで、動作の変更はありません)
関連Issue
その他
- 同種のコメント 12 行は本 PR の対象外です。うち 6 行は #135312 に含まれる変更に関わるため同 PR 側で修正済みとされ、残り 6 行は #135932 ですでに同様の修正が行われています。
- 作成者によれば、この変更は AI(Anthropic Claude と OpenAI Codex)の支援のもとで作成され、投稿前に作成者本人がレビューしています。
#135974 Use geometric body buffer growth in HTTP loopback servers
- 作成者: @agocke
- 作成日時: 2026年10月16日 19:53:17(UTC)
- マージ日時: 2026年10月18日 01:05:46(UTC)
- ラベル: area-System.Net.Http
概要
HTTP/1.1のチャンク形式リクエストおよびHTTP/2のDATAフレームのボディ受信バッファを、チャンク/フレームごとに正確なサイズで再確保する方式から、容量を幾何級数的に拡大する方式へ変更しています。従来は固定サイズの断片を受信するたびに蓄積済みボディ全体をコピーしていたため、2次関数的なコピーコストが発生していました。この変更により、ループバックサーバーで大きなペイロードを扱う一部のテストが、作成者の環境で「数分から数秒」に短縮されたとのことです。
変更内容
src/libraries/Common/tests/System/Net/Http/GenericLoopbackServer.cs(+13/-0): バッファ拡張用の共通処理が追加されています(詳細な実装内容は提供情報からは不明)。src/libraries/Common/tests/System/Net/Http/Http2LoopbackConnection.cs(+9/-6): HTTP/2のDATAフレームのボディバッファを幾何的に拡張する方式に変更しています。src/libraries/Common/tests/System/Net/Http/LoopbackServer.cs(+9/-6): HTTP/1.1のチャンク形式リクエストのボディバッファを幾何的に拡張する方式に変更しています。
主な技術的ポイント:
- 使用済み長と容量を別々に管理します。
- 容量が不足する場合は倍増させ、より大きな断片が来た場合は必要サイズまで直接拡張します。
- 戻り値を返す直前に1回だけトリミングします。
- 返却されるボディの長さ、および null と空の扱いは従来どおり維持されます。
- 投機的な容量は配列長の上限で頭打ちにし、必要長の計算にはcheckedな算術を使用します。
なお、変更対象はすべてテスト用ヘルパー(Common/tests配下)であり、公開APIやランタイム/ライブラリ本体の実装への影響はありません。
パフォーマンスへの影響
- テスト用ループバックサーバーの処理が対象です。ボディ蓄積時のコピーが2次関数的から償却線形へ改善され、大きなペイロードを使うテストが作成者のマシンで数分から数秒に短縮されたと報告されています。
- 具体的なベンチマーク数値は提供されていません。
- 容量を投機的に確保するため、一時的に必要量以上のメモリを使用する可能性がありますが、返却前にトリミングされます。
- ランタイム本体の性能への影響はありません。
関連Issue
なし
その他
- 互換性への影響(破壊的変更・非推奨化)に関する記載はありません。
- セキュリティ脆弱性修正やCVEに関する記載はありません。
#135943 [NativeAOT] Hash relocations in method body folding keys
- 作成者: @andrew-kulikov
- 作成日時: 2026年10月16日 11:23:35(UTC)
- マージ日時: 2026年10月18日 01:43:35(UTC)
- ラベル: community-contribution area-NativeAOT-coreclr
概要
NativeAOT (ILCompiler) のメソッド本体フォールディング(重複排除)において、MethodInternKey のハッシュにリロケーション(再配置情報)を含めるよう変更しました。従来はコードバイト・GC情報・フレーム情報・EHバイトのみをハッシュしていたため、リロケーション先だけが異なるメソッド本体が同一ハッシュ値となり、同じ HashSet バケットに集中して AreSame の比較が O(n²) になっていました。特に最適化済みコードでは、async メソッドごとに生成されるステートマシン構造体のため、AsyncStateMachineBox<TResult, TSM>.MoveNext や AsyncMethodBuilderCore.Start<TSM> などがバイト列同一のコピーとして大量に発生し、この問題が顕著になります。
変更内容
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/MethodBodyDeduplicator.cs(+29/-2)- ハッシュ計算にリロケーション情報を追加し、
MethodInternComparer.AreSameの比較ロジックと整合させています。- リロケーション種別とオフセット:
AreSameで厳密比較されるため、そのままハッシュに含めます。 MethodReadOnlyDataNodeのターゲット:AreSameが内容比較するため、データバイトをハッシュに含めます(比較対象の部分集合)。- その他のターゲット: 前回パスのリマッピングを通した後のターゲットの同一性(identity)をハッシュします。
AreSameはremapping[t1] == t2(またはその逆)を等価とみなしますが、リマッピングの値はキーにならない(キーになるのは既存の本体と一致した本体のみで、セット内の本体はキーにならない)ため、双方ともid(t2)をハッシュします。
- リロケーション種別とオフセット:
Equalsが受理するペアの集合は不変で、バケット分布のみが変わります。反復順序は従来どおりソート済みのGetCompiledMethodBodies()で、ISymbolNodeはすでに identity でハッシュされます。そのため出力は変わりません。
- ハッシュ計算にリロケーション情報を追加し、
パフォーマンスへの影響
コンパイル時間(ILC実行時間)が大幅に改善されます(v10.0.13 に同変更を適用、osx-arm64 ホスト・M1 Pro での計測)。
| 変更前 | 変更後 | |
|---|---|---|
| iOSアプリ(約12,000 async メソッド)ILC実行時間 | 約1200秒 | 247〜252秒 |
同、--methodbodyfolding:none |
252秒 | |
8000個の async Task<int> メソッドのサンプル dotnet publish |
271秒 | 16秒 |
| 同サンプル、4000メソッド | 47秒 | 9秒 |
- すべてのケースで、生成されるオブジェクトファイルは未修正コンパイラとバイト単位で同一でした(iOSアプリの 1.19 GB の
.o(2回実行)およびサンプルの.o)。 __managedcodeはフォールディングによるサイズ削減効果を維持しています(フォールディングなし 80.0 MB に対し 69.3 MB)。
関連Issue
その他
- 再現用リポジトリ: https://github.com/andrew-kulikov/runtime-samples/tree/master/nativeaot-async-folding
- 本PRは出力の変更を伴わない、コンパイラ内部のハッシュ分布改善です。
#135911 Remove support for BigInteger in generated ASN types
- 作成者: @bartonjs
- 作成日時: 2026年10月16日 00:39:04(UTC)
- マージ日時: 2026年10月18日 21:17:13(UTC)
- ラベル: area-System.Security
概要
生成されるASN.1型における BigInteger のサポートを削除するPull Requestです。DssParms を除けば、基本的に Int32 または ReadOnlyMemory が必要とされるため、BigInteger を必要とする箇所(DSAキー処理)のみで変換を行い、ジェネレーター側のコードを削減しています。
変更内容
asn.xslt:BigInteger用の生成テンプレートを削除asn.xsd: 整数フィールドに対して明示的なバッキング型の指定を必須化DssParms.xml/DssParms.xml.cs: DSAパラメーターをエンコード済み整数のバイト列(span)として保持・デコードするよう変更DSAKeyFormatHelper.cs: エンコード済みDSAパラメーターを、この箇所でローカルにBigIntegerへ変換するよう変更CertificationRequestInfoAsn.xml/CertificationRequestInfoAsn.xml.cs: 証明書要求のバージョンをintとして扱い、整数のバッキング型を指定
パフォーマンスへの影響
影響なし(提供された情報にはパフォーマンスに関する記述やベンチマーク結果はありません)。
関連Issue
なし
その他
- Copilotのレビューでは、コレクション用スキーマ(
IntegerCollectionType)がジェネレーターで非対応となったBigInteger定義を依然として受け付けてしまう点が指摘されています(重要度: High)。バッキング型をintまたはReadOnlyMemoryに制限することが推奨されています。