Pull Request on 2026年10月02日

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

注意点

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


目次

  1. #135121 Support /FOLD in managed ilasm
  2. #135101 Fix PEAssembly layout in native DAC builds
  3. #135083 Isolate SslStream certificate validation tests from TLS resumption
  4. #135082 Quarantine async NXDOMAIN test on Windows Server 2025
  5. #135080 Delete __SwitchToThread method
  6. #135072 JIT: Remove dead/redundant GTF_* flags
  7. #135071 [release/11.0] Fix DateTime.ToUniversalTime for invalid local times in the DST gap
  8. #135069 [release/11.0] JIT - Fix 'OperIs...' assert during forward substitution
  9. #135062 Disable PreHash tests on AZL4 and fix external-mu on AZL4
  10. #135060 Fix tensor shape consistency and native-width traversal
  11. #135059 [cDAC] Return no debug info for ReadyToRun images without a DebugInfo section
  12. #135055 [cDAC][wasm] Register platform GC-info decoding
  13. #135053 [release/10.0] Fix build error with latest MSVC
  14. #135052 [release/11.0] Fix build error with latest MSVC
  15. #135051 [browser] Default Webcil V1 unless UseMonoRuntime is true
  16. #135049 Return Complete from RequestClientCertificate when the client didn't offer post-handshake auth
  17. #135044 [cDAC][wasm] Fix stack walks and MethodDesc naming on WebAssembly
  18. #135040 [release/11.0] Fix generic struct field marshalling
  19. #135033 [wasi] Return parsed IP literals from Dns.GetHostAddressesAsync
  20. #135022 Fix msl wait time extraction in GC
  21. #135000 [release/11.0] Fix NativeAOT EventPipe use-after-free by waiting for active writers
  22. #134999 [release/10.0] Fix NativeAOT EventPipe use-after-free by waiting for active writers
  23. #134982 Fix direct thread-static alignment fallback
  24. #134969 JIT: Skip unrolling tests stored in locals
  25. #134966 Remove CoreCLR Reflection.Emit's ceefilegen dependency
  26. #134965 Skip interpreter selection when dynamic compilation is unavailable
  27. #134964 [wasi] Pass runtimeconfig properties to the runtime in wasihost
  28. #134843 Simplify nativeaot typeloader
  29. #134709 [release/11.0] JIT: handle redefined enumerators in conditional escape analysis
  30. #134642 [browser] Move .NET callbacks off Module
  31. #134600 [release/11.0] Allow variable page sizes in codesign output in Microsoft.NET.HostModel.Tests
  32. #134599 [release/10.0] Allow variable page sizes in codesign output in Microsoft.NET.HostModel.Tests
  33. #134185 JIT: preserve local access type in relop assertion propagation
  34. #133662 Use shared managed thunks for reflection invocation
  35. #133487 [release/10.0] Fix Linux FileSystemWatcher silent stop after unpaired IN_MOVED_FROM
  36. #132346 Convert managed ilasm to use ANTLR actions instead of visiting the parse tree

#135121 Support /FOLD in managed ilasm

  • 作成者: @Copilot
  • 作成日時: 2026年10月02日 18:24:07(UTC)
  • マージ日時: 2026年10月02日 22:46:02(UTC)
  • ラベル: area-ILTools-coreclr

概要

Managed ilasm の /FOLD オプションで、バイト単位で同一のメソッドボディ(ヘッダーと例外領域を含む)を検出し、既存のボディのオフセットを再利用することでコード重複を排除する機能を実装しました。これにより、IL出力ファイルのサイズ削減が期待できます。

変更内容

  • EntityRegistry.cs: メソッドボディの重複検出・再利用ロジックを追加(46行追加)
  • GrammarActions.BuildImage.cs: /FOLD オプション適用時の処理を修正
  • Options.cs: /FOLD オプション関連の記述を整理
  • CompilerOptionsTests.cs: /FOLD オプションの動作テストを追加(84行追加)
  • InstructionTests.cs: 命令テスト関連の更新
  • KNOWN-ISSUES.md: 既知の問題から関連記述を削除

パフォーマンスへの影響

IL出力ファイルサイズの削減が期待できます。同一のメソッドボディを持つメソッド群が存在する場合、ボディを1回のみエミットして複数メソッドから参照されるため、バイナリサイズが縮小されます。実行時パフォーマンスへの直接的な影響はありません。

関連Issue

なし

その他

  • /FOLD オプションが有効な場合のみこの最適化が適用されます
  • 完全なボディ(ヘッダー・例外領域を含む)がバイト単位で同一である場合にのみ再利用されるため、正確性が保証されます
  • /FOLD オプションが無効な場合は既存の動作が保持されます

#135101 Fix PEAssembly layout in native DAC builds

概要

PEAssemblyのm_pImporterとm_pEmitterフィールドをガードするマクロをPROFILING_SUPPORTEDからPROFILING_SUPPORTED_DATAに変更しました。前回の変更でDAC(Debugging Diagnostic Assistant Companion)ビルドで定義されていないマクロが使用されたため、後続フィールド(m_pAssemblyBinderなど)のレイアウトがズレ、dumpalcコマンドが失敗していました。PROFILING_SUPPORTED_DATAを使用することで、プロファイリング有効ランタイムとそのDAC間でレイアウトを保ちながら、DAC内ではプロファイラ機能を有効化しません。

変更内容

  • src/coreclr/vm/peassembly.h: m_pImporterとm_pEmitterフィールドのガード条件を#ifdef PROFILING_SUPPORTEDから#ifdef PROFILING_SUPPORTED_DATAに変更(2行の変更)

パフォーマンスへの影響

影響なし

関連Issue

#135075

その他

  • Windows x64 Release ビルド(.\build.cmd -subset clr.runtime -c Release)で検証済み
  • 修正前:dumpalcが「Failed to get the AssemblyLoadContext」エラーを報告
  • 修正後:修正されたDAC(mscordaccore.dll)を使用すると「Name: System.Runtime.Loader.DefaultAssemblyLoadContext」を正常に取得
  • この変更はネイティブDAC ビルド内のメモリレイアウトに関する重要な修正です(内部実装の変更)

#135083 Isolate SslStream certificate validation tests from TLS resumption

  • 作成者: @rzikm
  • 作成日時: 2026年10月02日 08:01:44(UTC)
  • マージ日時: 2026年10月02日 16:49:46(UTC)
  • ラベル: area-System.Net.Security

概要

TLS再開時に証明書検証コールバックがスキップされることにより、複数のSslStreamテストが不安定になる問題を修正しました。証明書検証に焦点を当てたテストに対して完全なハンドシェイクを強制し、セッションキャッシュの影響を排除します。これはテストのみの変更で、ランタイム動作やストリームI/Oヘルパーの機能には影響しません。

変更内容

  • CertificateValidationClientServer.cs: 空のターゲットホスト名ケースで完全なハンドシェイクを強制
  • CertificateValidationRemoteServer.cs: リモート検証/OCSPテストに完全なハンドシェイク要件を追加し、コールバック実行アサーションを強化
  • ClientAsyncAuthenticateTest.cs: クライアント証明書チェーンおよび遅延証明書選択テストで完全なハンドシェイクを要求
  • SslStreamAllowRenegotiationTests.cs: 再交渉テストに完全なハンドシェイク要件を追加
  • SslStreamNetworkStreamTest.cs: 接続情報とSNIテストで完全なハンドシェイクを強制、不正なサーバー名テストに一意のホスト名不一致を追加
  • SslStreamSniTest.cs: SNI検証テストで完全なハンドシェイクを要求
  • SslStreamStreamToStreamTest.cs: カスタム信頼テストの調整

パフォーマンスへの影響

影響なし(テストのみの変更)

関連Issue

#135057 #135031

その他

  • 検証: Windows x86でChecked CoreCLRおよびDebugライブラリを使用してテスト実施
  • 機能テスト: 5,289件合格、36件スキップ
  • ユニットテスト: 117件合格、4件スキップ
  • 繰り返しクライアント証明書チェーンテストは認証情報キャッシュをカバーしますが、TLSセッション再開はカバーしません

#135082 Quarantine async NXDOMAIN test on Windows Server 2025

  • 作成者: @rzikm
  • 作成日時: 2026年10月02日 07:41:11(UTC)
  • マージ日時: 2026年10月02日 10:48:52(UTC)
  • ラベル: area-System.Net

概要

Windows Server 2025環境で非同期DNS解決テストResolveAddresses_NonExistent_ReturnsNxDomainがNxDomainではなくServerFailureを返す問題に対応。同期・非同期ケースを分離し、非同期ケースのみにActiveIssue属性を復元する変更。ネイティブDNS障害の根本原因は確認中。

変更内容

  • src/libraries/System.Net.NameResolution/tests/FunctionalTests/DnsResolverTest.cs:
    • ResolveAddresses_NonExistent_ReturnsNxDomainテストを同期・非同期の2つのテストファクトに分離
    • 非同期ケースにActiveIssue属性(KBE #131188対応)を追加し、Quarantine復元
    • 同期ケースは有効なままで、前回のHelix実行では成功しているため除外しない
    • 既存のアサーション処理は共有

パフォーマンスへの影響

影響なし

関連Issue

  • KBE #131188(Windows Server 2025でのNxDomain返却の問題)
  • #132065(前回のQuarantine追加)
  • #134141(前回のQuarantine削除)

その他

  • PlatformDetection.IsWindowsServer2025条件はWindows 11 build 26100にも該当
  • ネイティブDNS障害の根本原因は未確認のまま、環境固有の問題として隔離

#135080 Delete __SwitchToThread method

  • 作成者: @jkotas
  • 作成日時: 2026年10月02日 03:34:27(UTC)
  • マージ日時: 2026年10月02日 05:44:00(UTC)
  • ラベル: area-VM-coreclr

概要

__SwitchToThreadメソッドを削除し、すべての呼び出しをminipal_switch_to_threadまたはminipal_sleepへの直接呼び出しに置き換えるリファクタリング。ランタイムの内部実装(CoreCLRのVM層)における間接呼び出しを排除し、minipal抽象化層への依存を統一する変更です。

変更内容

  • src/coreclr/vm/hosting.cpp: __SwitchToThreadメソッドの定義を削除(24行削除)
  • src/coreclr/vm/spinlock.h: spinlock実装の更新、メソッド呼び出しをminipal_switch_to_thread/minipal_sleepに直接変更
  • その他のVM層ファイル: debugger.cpp、synchronizable.cpp、finalizerthread.cpp、jithelpers.cpp、simplerwlock.cpp、spinlock.cpp、threadsuspend.cpp、syncblk.cpp等で__SwitchToThreadの呼び出しを直接的なminipal関数呼び出しに置き換え
  • src/coreclr/gc/windows/gcenv.windows.cpp: GCのWindows環境別実装での呼び出し置き換え

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は内部実装のみに影響し、公開APIの変更はありません。__SwitchToThreadはprivate/internal関数であるため、破壊的変更にはあたりません。


#135072 JIT: Remove dead/redundant GTF_* flags

  • 作成者: @EgorBo
  • 作成日時: 2026年10月01日 23:17:17(UTC)
  • マージ日時: 2026年10月02日 15:35:42(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラで使用されていないまたは冗長なGenTreeフラグ(GTF_*)を削除するクリーンアップです。以下5つのフラグを削除:

  • GTF_ICON_CIDMID_HDL:設定・読み取りなし
  • GTF_ARRLEN_NONFAULTING等3つ:GTF_IND_NONFAULTINGの別名で静的アサーションのみで参照
  • GTF_DEBUG_VAR_CSE_REF:デバッグ専用でJitDumpフラグ出力のみ
  • GTF_CALL_M_STACK_ARRAY:WellKnownArg::StackArrayLocalと冗長
  • GTF_BOX_VALUE:すべてのGT_BOXノードで設定されるため不要

変更内容

  • gentree.h:フラグ定義の削除とIsBoxedValue()の実装簡略化(OperIs(GT_BOX)に変更)
  • compiler.cpp/compiler.hpp:フラグセット処理と関連コードの削除
  • importer.cpp:GTF_BOX_VALUEのセット処理削除
  • valuenum.cpp:GTF_CALL_M_STACK_ARRAYチェック処理をWellKnownArg確認に変更
  • optcse.cpp/objectalloc.cpp:フラグ参照の削除
  • handlekinds.h:列挙値定義の削除

パフォーマンスへの影響

影響なし(フラグ削除による最小限の変更)

関連Issue

なし

その他

アセンブリ出力の差分は予想されない(純粋なクリーンアップ)。パブリックAPI変更なし、コンパイラ内部実装の整理。


#135071 [release/11.0] Fix DateTime.ToUniversalTime for invalid local times in the DST gap

概要

.NET 11で、夏時間の春時間帯(DST gap)に当たる無効なローカルDateTimeをUTCに変換する際に、オフセットを減算する代わりに加算してしまうバグを修正しました。ToUniversalTime()、DateTimeOffset、GetUtcOffset()が約2倍のUTC オフセット分ずれた値を返していました。これは.NET 11のTimeZoneInfoリライト(#119662)における符号エラーで、.NET 10では正常に動作していた回帰バグです。

変更内容

  • TimeZoneInfo.Cache.cs: DST gap内の無効なローカル時刻の変換ロジックを追加(59行追加)
  • TimeZoneInfo.cs: 無効時刻処理で標準UTC オフセットの減算を正しく実装(9行変更、加算から減算へ修正)
  • TimeZoneInfoTests.cs: spring-forward gap内での時刻変換をカバーするリグレッションテストを追加(42行追加)

パフォーマンスへの影響

影響なし。この変更は極めて限定的なシナリオ(DST spring-forward gap内のローカル時刻)のみに適用され、ホットパスは変更されていません。

関連Issue

#134846(元となる問題) #134871(修正元PR)

その他

  • リスク評価: 低
  • 有効な時刻、曖昧な時刻、現代的なタイムゾーンは完全に影響を受けません
  • 既にサイレント損失(誤ったデータ)を返していた限定的なケースのみが修正対象です
  • backportなため、release/11.0ブランチへの適用です

#135069 [release/11.0] JIT - Fix 'OperIs...' assert during forward substitution

概要

release/11.0向けのバックポート。32ビットアーキテクチャにおいて、forward substitution中に型正規化キャストが生じた場合に、アドレス式を期待するメソッドに渡されてアサーション失敗または不正なコード生成が発生していた問題を修正します。この回帰はPR #133703で導入され、follow-up修正のバックポートが必要なため対応されます。

変更内容

  • src/coreclr/jit/forwardsub.cpp: forward substitution処理において、type-normalizing castがアドレス式の期待値として不適切に渡されるケースを検出・処理するロジックを追加(+11行)
  • src/tests/JIT/Regression_ro_2/Runtime_134818.cs: fuzzing経由で検出されたテストケースを専用の単体テストとして追加(+28行)

パフォーマンスへの影響

影響なし。SPMI diffsで0 diffsが確認されており、コード生成への影響はありません。

関連Issue

#134962(元のバグ修正PR)、#133703(回帰の原因となったPR)

その他

  • 修正は32ビットターゲットのみに影響
  • リスク評価: Low
  • fuzzing およびjitstress-randomパイプラインで検出
  • 修正なしでテストが失敗することを確認、修正後に成功することを確認済み

#135062 Disable PreHash tests on AZL4 and fix external-mu on AZL4

  • 作成者: @vcsjones
  • 作成日時: 2026年10月01日 22:22:15(UTC)
  • マージ日時: 2026年10月02日 02:56:27(UTC)
  • ラベル: area-System.Security

概要

Azure Linux 4(SymCrypt-OpenSSL)環境でのML-DSA実装の制限に対応するパッチです。SymCrypt-OpenSSLが外部乗算(external-mu)とPreHash署名に対応していないため、該当テストをスキップし、外部乗算初期化失敗時に暗号化例外を正しく発生させるよう修正します。

変更内容

  • src/native/libs/System.Security.Cryptography.Native/pal_evp_pkey_ml_dsa.c: 外部乗算初期化が失敗した場合、署名失敗として分類する例外処理を追加
  • src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestHelpers.cs: Azure Linux環境判定ロジックの追加
  • src/libraries/System.Security.Cryptography/tests/MLDsaOpenSslTests.Unix.cs: PreHash機能チェックの条件付きゲート処理を追加
  • src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/MLDsa/MLDsaTestsBase.cs: PreHash統合テストの条件付きスキップ処理を追加

パフォーマンスへの影響

影響なし

関連Issue

#135061(external-mu再有効化のトラッキング)

その他

  • Copilotレビューで、Azure Linux上での外部乗算リグレッションテストを保持することが推奨されています
  • 本変更は内部実装とテストコードのみの修正で、公開APIへの影響はありません
  • SymCrypt-OpenSSLのPreHash・external-mu対応待ちの一時的な対応です

#135060 Fix tensor shape consistency and native-width traversal

概要

System.Numerics.Tensorsライブラリのテンソル形状処理を統一し、ネイティブ幅トラバーサルを修正する包括的な変更。ランク0の空のテンソルを有効な形状[0]として扱い、ブロードキャスト・要素ごとの演算・コピー・等値性・リシェイプ・軸操作・ビュー全般で一貫した動作を実現。内部の10個のAnyスパンカーネルを修正し、空入力のハンドリングを正確にする。ネイティブ幅コピーと最小/最大インデックスリダクションで重複安全性とSIMD意味論を保持。

変更内容

  • TensorShape.cs: 形状正規化、等値性判定、空ビュー処理を集約化。ランク0空値の有効形状[0]の解釈ロジックを追加
  • TensorOperation.cs: ネイティブ幅コピー/リダクションパスを追加。10個のAnyカーネル修正、TensorPrimitivesの最小/最大インデックスリダクションを共有
  • Tensor.cs/TensorSpan_1.cs/ReadOnlyTensorSpan_1.cs: 検証済みビュー形状構築を使用。ブロードキャスト・スタック・連結で一貫した形状解釈を適用
  • TensorDimensionSpan_1.cs/ReadOnlyTensorDimensionSpan_1.cs: デフォルト空値の有効ランクをサポート
  • TensorPrimitives.IIndexOfMinMaxOperator.cs: 共有リダクション実装用の内部公開
  • README.md: 形状・ストレージ・ネイティブ幅動作仕様を文書化
  • TensorTests.cs: 形状・トラバーサル・重複・境界ケースを含む1,000+の回帰テスト追加

パフォーマンスへの影響

  • IndexOfMax改善: ネイティブ幅ブロードキャストビュー[nint.MaxValue/1024, 1024]で、稠密サフィックスプリミティブディスパッチ使用時に295ns対従来の要素ごと4,050ns(約13.7倍改善)。初期NaN終了により効果測定
  • 一般スループット: バリデーション簡略化やメタデータスナップショットでの一般的なスループット改善は報告されず。派遣比較でランク2は326→309ns、ランク6は351→356nsで測定変動範囲内
  • メモリ: 連結・スタック・派遣比較で割当数維持

関連Issue

なし

その他

  • 互換性: 形状の意味論が統一されたため、従来は不一貫だった形状の組み合わせが受け入れられたり拒否されたりするように変更。例:デフォルト空値は[2, 0]に明示的ブロードキャスト可、[0, 2]との二項演算は互換性なしで拒否
  • テスト検証: .NET 11 RC SDKで6,266個のnet11.0テストと200個のnet481テストが全パス。ハードウェア固有機能無効時も同様。149,246ケースを2回の独立した形状/スト

#135059 [cDAC] Return no debug info for ReadyToRun images without a DebugInfo section

概要

ReadyToRun イメージでDebugInfoセクションが存在しない場合、cDAC(Component Debugging Assistant)のReadyToRunJitManager.GetDebugInfoがネイティブ実装と同様にTargetPointer.Nullを返すように修正しました。修正前は、nullチェックなしでアドレス0を参照し、wasmで無効なデータをデコードしてBadImageFormatExceptionを発生させていました。特に#134690でBrowser/WASIのReadyToRun発行物がデフォルトで--strip-debug-infoを指定するようになったため、この修正が必要になりました。

変更内容

  • src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/ExecutionManager/ExecutionManagerCore.ReadyToRunJitManager.cs: ReadyToRunJitManager.GetDebugInfoにDebugInfoSectionがnullの場合の早期リターンを追加し、TargetPointer.Nullを返すように修正(内部実装の変更)
  • docs/design/datacontracts/ExecutionManager.md: R2R GetDebugInfoのドキュメントを更新し、null-sectionの早期リターン動作を記載
  • src/native/managed/cdac/tests/UnitTests/ExecutionManager/ExecutionManagerTests.cs: 新テストExecutionManagerTests.GetDebugInfo_R2R_NoDebugInfoSection_ReturnsNullを追加。4つのアーキテクチャケース(StdArchAllVersions)でテスト実施し、DebugInfoSectionがnullのR2Rモジュールに対して正しくnullポインタを返すことを検証

パフォーマンスへの影響

影響なし

関連Issue

#134690 #133890 #135044 #135055

その他

  • 既存の呼び出し元は変更不要。DebugInfo_1.HasDebugInfo、GetMethodNativeMap、GetMethodVarInfo、GetAsyncSuspensionPointsは既にnullデバッグ情報ポインタを「デバッグ情報なし」として処理しています
  • テスト結果:すべてのテストが成功(UnitTests 3236/3236、DataGeneratorTests 46/46、UsageTests 4/4)、ミューテーション検査でも修正の有効性を確認
  • wasmのスタックウォークと変数位置特定に関する作業は関連Issueに委ねられています

#135055 [cDAC][wasm] Register platform GC-info decoding

概要

WebAssembly(Wasm)プラットフォーム向けのGC情報デコーディング機能をcDAC(Component Diagnostics Across Components)フレームワークに登録します。Wasm32GcInfoEncodingに対応した専用のWasmGCInfoTraitsを実装し、6ビットのコード長エンコーディングと最適化されたヘッダー形式に対応させます。インタプリタは既存の別形式を継続使用します。

変更内容

  • WasmGCInfoTraits.cs(新規): Wasm32GcInfoEncoding用のプラットフォーム特性クラスを追加。6ビットコード長エンコーディングとfat-headerの最適化形式に対応
  • CoreCLRContracts.cs: Wasm GC-infoデコーダーの登録処理を追加
  • GCInfo.md: Wasmプラットフォーム向けのコントラクトドキュメンテーション追加(9行)
  • StackWalkTests.cs: slim/fat-headerの形式判定テストを追加。ストリーム未整列検出とインタラプティブルレンジカウントの検証を含む(46行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 検証状況: managed cDAC構築と3,236ユニットテストで合格。新規4ケースはすべて登録なしで失敗を確認、fat-headerケースで不正なインタラプティブルレンジカウント拒否を検証
  • 注記: NativeAOTパブリッシングおよびライブWasm GCウォークの再実行は本パッチには含まれていません
  • 生成されたコントラクトドキュメンテーションは最新状態です

#135053 [release/10.0] Fix build error with latest MSVC

概要

MSVC(Microsoft Visual C++)の最新版でビルドエラーが発生していた問題を修正するパッチです。 このPRは #134967 の release/10.0 ブランチへのバックポートです。

変更内容

  • src/native/containers/dn-umap.c: 4行の変更(追加2行、削除2行)
    • MSVC最新版のビルドエラーに対応するための修正

パフォーマンスへの影響

影響なし

関連Issue

#134967 のバックポート

その他

  • 内部で発見された問題
  • リスク度:低
  • 回帰なし

#135052 [release/11.0] Fix build error with latest MSVC

概要

release/11.0ブランチへの最新MSVCビルドエラーの修正をバックポート。#134967の変更を反映したもので、内部で発見されたビルド互換性の問題を解決します。

変更内容

  • src/native/containers/dn-umap.c: MSVC最新版の互換性を改善するため、2行を修正(+2/-2)

パフォーマンスへの影響

影響なし

関連Issue

#134967(元の修正PR)

その他

  • リスク評価: 低
  • 回帰: なし
  • 内部で発見された問題のため、顧客報告なし

#135051 [browser] Default Webcil V1 unless UseMonoRuntime is true

  • 作成者: @lewing
  • 作成日時: 2026年10月01日 20:59:56(UTC)
  • マージ日時: 2026年10月02日 12:20:16(UTC)
  • ラベル: area-Build-mono

概要

WebAssembly Browser アプリケーションのビルドターゲットにおいて、Webcil バージョンの選択ロジックを修正します。従来は RuntimeFlavor == 'CoreCLR' の場合のみ Webcil V1 を選択していましたが、shipped SDK では RuntimeFlavor が設定されないため、CoreCLR アプリが意図せず Webcil V0 で出力され起動時にエラーが発生していました。この修正により、デフォルトを V1 とし、UseMonoRuntime == 'true' の場合のみ V0 を選択するように変更します。

変更内容

  • Microsoft.NET.Sdk.WebAssembly.Browser.targets: _WasmWebcilVersion の選択条件を変更
    • 変更前: RuntimeFlavor == 'CoreCLR' のとき V1 を選択
    • 変更後: デフォルトを V1 に設定し、UseMonoRuntime == 'true' のときのみ V0 を選択
    • これにより shipped SDK での CoreCLR Browser アプリが正しく Webcil V1 で出力されるようになります

パフォーマンスへの影響

影響なし

関連Issue

#126876

その他

  • この修正により、UseMonoRuntime=false のみを設定した CoreCLR Browser アプリが Webcil V1 で正しく出力されます(従来は V0 で起動時に unsupported Webcil wrapper version 0; expected 2 エラーが発生していました)
  • SDK デフォルトの Mono Browser アプリは UseMonoRuntime=true のため Webcil V0 として出力され、動作に変化なし
  • in-tree ビルド(WasmApp.InTree.props)では RuntimeFlavor が UseMonoRuntime にマップされるため、既存の動作は維持されます

#135049 Return Complete from RequestClientCertificate when the client didn't offer post-handshake auth

概要

TLS 1.3 のポストハンドシェイク認証(Post-Handshake Authentication)をクライアントが提供していない場合、RequestClientCertificate が例外をスローするのではなく Complete を返すようにしました。OpenSSL と SChannel の両方で NoRenegotiation エラーが報告される場合に対応し、既存の SslStream.NegotiateClientCertificateAsync の動作と統一させます。また TLS 1.2 のローカル無効化構成でも同様に処理されます。

変更内容

  • TlsBufferSession.cs: RequestClientCertificateBufferedCore で NoRenegotiation ステータスを判定し、例外をスローせずに Complete を返すように変更。セッションは完了状態を保持します。
  • TlsSession.cs: RequestClientCertificate のドキュメント更新。クライアント証明書リクエスト拒否時の動作に関する説明を追加し、TLS 1.2・1.3 両プロトコル対応を明記。TLS 1.3 のみという制限条件を削除。
  • TlsSocketSession.cs: Windows パス用の同期ドキュメント更新("On Linux" の記載削除)。
  • TlsSessionTests.cs: 新テスト ServerSession_RequestClientCertificate_Tls13PhaNotOffered_Completes を追加。クライアントがポストハンドシェイク認証を提供しない場合に Complete が返され、0 バイト書き込みで継続する動作を検証。

パフォーマンスへの影響

影響なし

関連Issue

#135047

その他

  • 破壊的変更なし。既存の動作(SslStream.NegotiateClientCertificateAsync など他のパスの動作)との統一が目的。
  • Linux(OpenSSL 3.0.2/1.1.1f)と Windows 11 で検証済み。OpenSSL では SSL_R_EXTENSION_NOT_RECEIVED、SChannel では SECURITY_STATUS.NoRenegotiation を処理。
  • TLS 1.2 でもローカル無効化構成時(Options = NoRenegotiation)に NoRenegotiation が返る場合の改善も含まれています。

#135044 [cDAC][wasm] Fix stack walks and MethodDesc naming on WebAssembly

  • 作成者: @lewing
  • 作成日時: 2026年10月01日 18:56:19(UTC)
  • マージ日時: 2026年10月02日 21:36:00(UTC)
  • ラベル: area-Diagnostics-cdac

概要

WebAssembly(WASM)ターゲットでのcDAC(Compact Debugging and Diagnostics)スタックウォーク実装の四つの主要な不具合を修正します。FEATURE_PORTABLE_ENTRYPOINTSでのMethodDesc検証失敗、Debuggerコントラクト未実装による初期段階での失敗、R2R InlinedCallFrameでの無限ループ、および解釈実行コード(Interpreter-only)での無限ループを解決します。

変更内容

1. MethodDesc検証の失敗修正(#135035関連)

  • PrecodeStubs_2(新版)を実装。FEATURE_PORTABLE_ENTRYPOINTSでprecodestubsが存在しない場合に対応
  • GetMethodDescFromStubAddressがPortableEntryPoint.MethodDescから直接読み取り
  • ネイティブのMethodDesc::GetMethodDescFromPrecodeと同等の動作を実現

2. Debuggerコントラクト実装(#135034関連)

  • WASMが既存のDebugger_1コントラクトをアドバタイズ
  • インプロセスデバッガーは構築されないため、g_pDebuggerはnullのまま
  • 誤った型定義のint g_pDebuggerリンカースタブを正しい型の定義に置き換え

3. R2R InlinedCallFrameでの無限ループ修正(#135036関連)

  • WasmFrameHandlerがINLINED_PINVOKE_FROM_R2Rマーカーを処理
  • ネイティブのInlinedCallFrame::UpdateRegDisplay_Implと同じ方式で実装
  • 管理コードの仮想IPが回復できない場合、StackWalkState.Errorで失敗

4. 解釈実行コード無限ループ修正(#135037関連)

  • 解釈P/Invoke用のアクティブなInlinedCallFrameを所有するInterpreterFrameに直接移動
  • スタックウォーク開始時に第一引数レジスタからInterpreterFrame所有者を取得
  • ネイティブのStackFrameIterator実装に合わせて同期

ドキュメント更新

  • StackWalk.md、PrecodeStubs.md(新Version 2セクション)、Debugger.md仕様を更新
  • 生成されたusageテーブルを再生成

パフォーマンスへの影響

影響なし

関連Issue

#135034 #135035 #135036 #135037

その他

  • 互換性に関する注意: WASM/.NET 11では非公式シナリオであり、本PRから構築されたリーダーは、Debuggerコントラクトを未アドバタイズでPrecodeStubs c1を使用する前バージョンのWASMランタイムをサポートしません
  • テスト検証: cDAC単体テスト3245/3245がパス。実際のブラウザ-WASM環境での5種類の設定で各5回のスタックウォーク実行、すべてのフレーム名前付けに成功
  • スタブの仕様変更:

#135040 [release/11.0] Fix generic struct field marshalling

概要

ジェネリック構造体メンバーを含む構造体のマーシャリング時に発生していたArgumentExceptionを修正するリグレッション修正のバックポート。ユーザーコードが汎用型の構造体メンバーを持つ構造体をネイティブコードにマーシャリングする際に、例外がスローされていた問題を解決します。

変更内容

  • src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs: 汎用型構造体フィールドのマーシャリング処理を修正(+3/-1)
  • src/tests/Interop/StructMarshalling/ReversePInvoke/MarshalExpStruct/DelegatePInvoke/DelegatePInvokeTest.cs: このシナリオに対するリグレッションテストを追加(+51)

パフォーマンスへの影響

影響なし

関連Issue

#125352(リグレッションの原因PR) #134728(本来の修正PR)

その他

  • リスク評価:低。ターゲットを絞った修正であり、リグレッション導入を防ぐため複数バージョンでの検証が実施されている
  • 内部で検出されたバグ(顧客報告なし)
  • P/Invoke経由の構造体マーシャリングに関連する互換性の問題が修正されている

#135033 [wasi] Return parsed IP literals from Dns.GetHostAddressesAsync

概要

WASI プラットフォーム上で Dns.GetHostAddressesAsync に IP リテラル(例:"127.0.0.1")を渡すと SocketException がスローされる問題を修正します。非同期パスがアドレスファミリーの不一致で getaddrinfo に IP リテラルを送信していたため、wasmtime 49.0.1以降で EAI_NONAME が返されていました。同期パスとの動作を統一し、IP リテラルの逆引きが不要な場合は WASI でも直接解析することで対応します。

変更内容

  • src/libraries/System.Net.NameResolution/src/System/Net/Dns.cs
    • GetHostEntryOrAddressesCoreAsync メソッドで、IP リテラルの解析をスキップする条件を変更
    • SupportsGetNameInfo が true または justReturnParsedIp が true の場合に IPAddress.TryParse による解析を実行するよう修正
    • これにより、WASI 上の GetHostAddressesAsync と BeginGetHostAddresses が同期メソッドと同じ動作になり、BeginGetHostByName で CreateHostEntryForAddress が返されるようになります
    • 逆引きが必要な GetHostEntryAsync(string) や BeginGetHostEntry(string) への影響はなし

パフォーマンスへの影響

影響なし

関連Issue

#135030

その他

  • 既存の GetHostAddressesTest.DnsGetHostAddresses_IPStringAndIncorrectFamily_ReturnsNoIPs テストで検証済み
  • WASI での検証: 修正前は 142 テスト中 88 合格、修正後は 89 合格に改善
  • 非 WASI プラットフォーム(macOS arm64 など)への影響なし
  • 関連 PR #134813 との連携により、マージ後に ActiveIssue アノテーションを削除予定

#135022 Fix msl wait time extraction in GC

  • 作成者: @janvorli
  • 作成日時: 2026年10月01日 14:10:04(UTC)
  • マージ日時: 2026年10月02日 12:55:05(UTC)
  • ラベル: area-GC-coreclr

概要

GC (ガベージコレクション) の MSL (MaxSegmentLength) 待機時間抽出処理におけるバグを修正します。.NET 9で導入された gc_heap::get_msl_wait_time 関数で、出力引数 soh_msl_wait_time と uoh_msl_wait_time が正しく更新されていなかった問題を解決します。

変更内容

  • src/coreclr/gc/dynamic_heap_count.cpp: ポインタ引数への値の代入ロジックを修正(2行削除、2行追加)。出力引数が指す値を直接更新するよう修正し、関数が正常に待機時間値を返すようになります。

パフォーマンスへの影響

影響なし(バグ修正により正常な動作が復元されます)

関連Issue

#134492

その他

なし


#135000 [release/11.0] Fix NativeAOT EventPipe use-after-free by waiting for active writers

概要

NativeAOT EventPipeで、アクティブなライターが存在する間にバッファが解放される use-after-free 問題を修正します。アクティブなライターの終了を待機するロジックを追加し、CoreCLRと同等の同期メカニズムを実装しています。この修正は #134838 の release/11.0 へのバックポートです。

変更内容

  • ep-rt-aot.h: EP_YIELD_WHILE マクロを実装し、アクティブなEventPipeライターの終了を待機
  • time.c: クロスプラットフォーム対応のyield/sleep ヘルパーを実装(周期的なバックオフ機能付き)
  • time.h: yield/sleep ヘルパー関数の宣言を追加

パフォーマンスへの影響

影響なし。この修正は同期待機のメカニズムであり、正常系ではライターの終了時に短時間の周期的バックオフが発生しますが、パフォーマンス低下は最小限です。

関連Issue

#134785(clrmdとEventSourceSupportでの間欠的クラッシュ報告) #134838(元のPR) #80382(当初の問題の導入箇所)

その他

  • 顧客報告による問題対応
  • 再現困難な間欠的クラッシュのため、コードレビューのみテスト実施
  • リスク評価は低(CoreCLRコードとの実装が一致)
  • .NET 11.0 release ブランチへのバックポート

#134999 [release/10.0] Fix NativeAOT EventPipe use-after-free by waiting for active writers

概要

NativeAOT環境でのEventPipeの使用後解放(use-after-free)バグを修正するバックポートです。イベントパイプのバッファがアクティブなライターによる書き込み中に解放されるという間欠的なクラッシュ問題を、アクティブなライターが完了するまで待機することで解決します。

変更内容

  • src/native/minipal/time.h:ポータブルなスレッド・イールドヘルパー関数を宣言
  • src/native/minipal/time.c:スレッド・イールドと最終的なスリープを実装するヘルパー関数を追加(34行)
  • src/coreclr/nativeaot/Runtime/eventpipe/ep-rt-aot.h:アクティブなEventPipeライターが完了するまで待機するロジックを追加(+7行)

パフォーマンスへの影響

直接的なパフォーマンス低下の懸念は記載されていません。バグ修正により、クラッシュの間欠的な発生を排除することで、全体的な安定性が向上します。

関連Issue

#134785(clrmdとEventSourceSupportで間欠的なクラッシュが報告) #134838(オリジナルのPull Request) #80382(回帰の原因)

その他

  • 本修正は元PR(#134838)のrelease/10.0ブランチへのバックポートです
  • リグレッション:なし(問題は初期段階から存在していた)
  • 検証:コードレビューのみ(間欠的なクラッシュのため実行検証は困難)
  • リスク評価:低い(実装ロジックがCoreC#コードと一致)
  • Copilotのレビュー:並行処理とクロスプラットフォーム動作について、より詳細なレビューが推奨されています

#134982 Fix direct thread-static alignment fallback

概要

ThreadLocalData内の直接スレッド静的割り当てにおいて、アライメントパディングまで含めてフィットするまで割り当て成功をマークしない修正です。以前は、アライメント前のデータはフィットしているがパディング領域がない境界ケースで、無効な結果を保持したまま動的割り当てへのフォールバックを行わないバグがありました。この修正により、そのような場合は正しく動的非収集スレッド静的配列にフォールバックします。

変更内容

  • src/coreclr/vm/threadstatics.cpp: 直接TLS割り当ての成功フラグを、アライメント後のデータがフィットすることを確認した後にのみ設定するよう修正(+1/-1)
  • src/tests/baseservices/threading/threadstatic/threadstatic09.cs: 異なるパディング量で直接TLS領域の境界をテストし、8バイトの[ThreadStatic] longを検証する回帰テストを追加(+72行)
  • src/tests/baseservices/threading/threadstatic/threadstatic09.csproj: テストプロジェクト設定ファイルを追加(+13行)

パフォーマンスへの影響

影響なし。本修正は正確な割り当てチェックロジック修正であり、パフォーマンスに関連する変更ではありません。

関連Issue

#129733、#129749の後続修正

その他

  • Windows x86チェック済みCoreClrビルドで検証済み
  • 新しいテストは別プロセスで異なるパディング量を使用して実行され、修正前の未修正ランタイムではこのテストが失敗することが確認されています
  • 低レベルのスレッド静的割り当て変更のため、メンテナーによる最終レビューが推奨されます

#134969 JIT: Skip unrolling tests stored in locals

  • 作成者: @EgorBo
  • 作成日時: 2026年09月30日 18:21:48(UTC)
  • マージ日時: 2026年10月02日 15:37:57(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラのループアンローリング最適化において、ループテスト条件がブランチ条件ではない場合にアンローリングをスキップするように修正しました。これにより、Checkedアサーション失敗とRelease MinOptsへのフォールバックを回避します。

変更内容

  • src/coreclr/jit/optimizer.cpp: ループアンローリング時にテスト条件をローカル変数に格納している場合の処理を削除(65行削除)
  • src/coreclr/jit/flowgraph.cpp: 関連するバリデーションロジックを簡潔化(10行の実装削除)
  • src/coreclr/jit/compiler.h: 不要な定義を削除(1行削除)
  • src/tests/JIT/Regression_ro_2/Runtime_134934.cs: リグレッションテストケース追加(31行)

パフォーマンスへの影響

影響なし。本変更はアンローリング対象外のケースを早期に除外することで、不正なアンローリングによるコンパイラクラッシュ・フォールバックを防止するもので、パフォーマンス改善ではなく安定性向上に焦点を当てています。

関連Issue

#134934

その他

なし


#134966 Remove CoreCLR Reflection.Emit's ceefilegen dependency

概要

CoreCLRのReflection.Emit実装がPEスタイルのセクションと再配置記録の依存関係を排除しました。生成されたILとフィールドRVAデータをモジュールのローダアロケータに直接保存し、既存のトークン-アドレスマップを再利用することで、共有/静的CoreCLRがceefgenのリンク依存関係を不要にしました。

変更内容

  • メモリ割り当て: 生成されたILと整列化されたゼロ初期化フィールドデータをモジュールのローダアロケータに割り当て。IL/EH符号化と収集可能フィールドデータの生存期間追跡を保持。
  • トークン処理: メタデータRVA列でMethodDefトークンを非アドレス値として使用。FIELD_OFFSET_DYNAMIC_RVAセンチネルとトークンマップでフィールドデータを解決。
  • PE生成の削除: ceefgenの所有関係、PEセクション割り当て、ネイティブ/マネージドトークン再配置の記帳を削除。ILAsmのceefgen_nohost依存関係とPE書き込み実装は別途保持。
  • テストカバレッジ: 2,968のReflection.Emit関連テスト、408のcDAC Loaderテスト、18のランタイムリフレクションラッパー、24の既存EnCテストをカバー。
  • ドキュメント更新: cDACディスクリプタ説明と生成ドキュメントを更新。

パフォーマンスへの影響

ビルドサイズの削減:

  • coreclr.dll: -12 KiB
  • WebAssemblyネイティブ: -10.5 KiB (-0.223%)
  • マネージ割り当て: ~36.1 KB → ~32.7 KB/モジュール (-9.4%)

低下(Reflection.Emitで定義されたフィールドRVAの非内部関数フォールバックのみ):

  • InitializeArray: +8.7% (141.6ns → 153.9ns)
  • CreateSpan: +9.2% (142.5ns → 155.6ns)

モジュール作成は0.3%-4.1%高速化。プロセスプライベートメモリ増加は24%-39%削減。内部関数展開パス(ldtoken/CreateSpan)および通常のPE支援フィールドは影響なし。

関連Issue

なし

その他

  • 検証: Windows x64 Release/Checked ビルド合格、その他アーキテクチャは未実行
  • ISOSDacInterfaceのGetILForModuleは従来通り動作(ネイティブDACでは非対応)
  • EnCテストのTestAddFieldRVAケースは変更なし
  • 実装と説明はGitHub Copilotで準備

#134965 Skip interpreter selection when dynamic compilation is unavailable

概要

FEATURE_DYNAMIC_CODE_COMPILEDが無効な環境(WebAssemblyなど)では、インタプリタは全メソッドを必ず解釈するため、インタプリタ選択処理をコンパイル時に除外する変更です。動的コンパイルが利用できない場合の不要な処理をスキップして、コードサイズを削減します。

変更内容

  • src/coreclr/interpreter/eeinterp.cpp: CILInterp::compileMethodでFEATURE_DYNAMIC_CODE_COMPILEDが無効な場合、インタプリタ選択ロジックと関連するモジュール追跡処理を条件付きコンパイルで除外
  • 入力値の妥当性チェック(InterpMode範囲確認)は保持され、同じ例外処理フローを維持

パフォーマンスへの影響

  • コードサイズ削減: compileMethodメソッド体が84,606バイトから84,510バイトに減少(96バイト削減)
  • 間接呼び出しサイト削減: 194サイトから191サイトに削減(3サイト削減)
  • WebAssemblyなどのWASM Release バイナリサイズが最適化される

関連Issue

なし

その他

  • 条件付きインタプリタ選択(FEATURE_DYNAMIC_CODE_COMPILEDが有効な場合)の動作は変更なし
  • 作成者はさらなるコード削減のため、InterpMode範囲チェックも除外可能だが、エラーハンドリングの統一性を考慮して保持した選択肢を示している

#134964 [wasi] Pass runtimeconfig properties to the runtime in wasihost

概要

WASI上のCoreClRホスト(wasihost)が<app>.runtimeconfig.jsonの設定プロパティを読み込まず、フィーチャースイッチやRuntimeHostConfigurationOptionが有効にならない問題を修正します。runtimeconfig.binをエントリアセンブリ隣に配置し、ホストの初期化時に既存プロパティと統合することで、UTF-7エンコーディング有効化などの機能スイッチが正常に動作するようになります。

変更内容

  • src/native/corehost/wasihost/wasihost.cpp: runtimeconfig.binをエントリアセンブリ隣から読み込み、そのプロパティをcoreclr_initializeに渡す初期化プロパティに追加。ホストが明示的に設定したプロパティは優先されます。ファイルが存在しない場合は無視、不正形式の場合はスタートアップ失敗メッセージを出力。既存のget_runtime_propertyで同じベクタから取得するため、コントラクトコールバックは同じ値を返します。
  • src/mono/wasi/build/WasiApp.CoreCLR.targets: runtimeconfig.binをmanaged/にコピー。フレームワーク、icudt.dat、ホスト隣に配置。

パフォーマンスへの影響

影響なし

関連Issue

#134954、#134813、#99126、#134958

その他

検証結果:

  • System.Text.Encoding.Tests(未トリム): UTF-7関連テスト38個の失敗が解決(修正前1654合格/38失敗 → 修正後1720合格/0失敗)
  • System.Data.Common.Tests(未トリム): 修正によるリグレッションなし。System.Data.DataSet.XmlSerializationIsSupportedスイッチがruntimeconfigに到達することを確認
  • runtimeconfig.binはWASIアプリ向けに既にRuntimeConfigParserTaskで生成される形式(ECMA-335圧縮カウント+キー/バリュー文字列シリアライズ)で、Mono WASIドライバと同じファイルを消費
  • ブラウザCoreClRホストと同じモデル:configPropertiesが最初に適用され、ホスト設定プロパティが上書き

#134843 Simplify nativeaot typeloader

概要

NativeAOT型ローダーを簡素化し、ランタイムレイアウトデータを正規テンプレートから直接派生させることで、3つのバグを修正し、型ローダーコードの10%以上を削除します。GC記述子、インターフェース・マップ、ジェネリック階層構造の処理を改善し、冗長な型ローダー状態とルックアップ抽象化を削除します。

変更内容

主な変更対象(NativeAOT型ローダー内部実装):

  • TypeBuilderState.cs: 計算レイアウトキャッシュを削除(332行→10行)
  • TypeBuilder.cs: 準備と終了処理を簡素化(211行→44行)
  • EETypeCreator.cs: テンプレートレイアウトのコピーと多次元配列GC記述子の再構築(212行→95行)
  • NativeLayoutInterfacesAlgorithm.cs: コンパイラ出力のスロット順序を直接読取(68行→5行)
  • TypeLoaderEnvironment.Metadata.cs: invoke-mapルックアップを簡素化(249行→50行)
  • MetadataNameExtensions.cs: メタデータ名サポートを削除(180行→12行)
  • NoMetadataMethodDesc.cs: 冗長な抽象化を削除(ファイル削除)
  • TypeLoaderEnvironment.ConstructedGenericMethodsLookup.cs: ルックアップクラス階層をstructに置き換え
  • 未使用のマッピングフラグ、静的サイズエントリ、invoke-mapチェックを削除

テスト追加:

  • 大規模構造体配列GC記述子の回帰テスト
  • 階層辞書と動的ジェネリックテンプレート配列レイアウトのテスト
  • 折りたたまれたインターフェース、多次元配列GCレイアウトの拡張テスト

パフォーマンスへの影響

懸念点: Copilotレビューで、GC記述子とインターフェース・マップの回帰が特定構成で確定的にカバーされていないと指摘されています。改善の詳細なベンチマーク数値は提供されていません。

コード削減により、型ローダーのメモリフットプリント削減が期待されます。

関連Issue

なし

その他

重要な設計変更:

  • RuntimeMethodDescはMethodDescから直接継承(NoMetadataMethodDescの削除により簡素化)
  • TypeDescは一貫してテンプレートを要求
  • TemplateLocatorが特定の正規テンプレートルックアップに特化

Copilotレビュー指摘事項:

  • 折りたたまれたインターフェース回帰ケースのUSC(Unit Smoke Tests Coverage)追加が推奨
  • コンパクション後の元の文字列保持と参照同一性アサーションが推奨

#134709 [release/11.0] JIT: handle redefined enumerators in conditional escape analysis

概要

Conditional Escape Analysis (CEA)におけるバグを修正するバックポート。CEAが再定義されたenumeratorを正しく処理しない問題により、静かに不正なコード生成が発生していた。.NET 10からの既存バグであり、潜在的に複数の到達定義がある場合に最適化を適切に無効化するよう修正。

変更内容

  • src/coreclr/jit/objectalloc.cpp: 再定義されたenumeratorの検出ロジック追加(+30行)
  • src/coreclr/jit/objectalloc.h: 関連するヘッダファイルの更新(+4/-3行)
  • src/tests/JIT/opt/ObjectStackAllocation/Runtime_134605.cs: 回帰テストの追加(+205行)
  • src/tests/JIT/opt/ObjectStackAllocation/Runtime_134605.csproj: テストプロジェクトファイル(+15行)
  • src/tests/JIT/opt/ObjectStackAllocation/Runtime_134605_Struct.csproj: テストプロジェクトファイル(+16行)

パフォーマンスへの影響

影響なし。本修正は最適化が不正に適用される誤りを防ぐもの。CEAが正しく無効化されることで、不正なコード生成による実行時エラーを防止する。

関連Issue

#134605、#134658

その他

  • リスク評価: 低リスク。最適化が不正に適用されるケースを適切に排除する保守的な修正
  • SPMI(Synthetic Performance and Methodology Interface)ではコード生成差分なし
  • 本修正はrelease/11.0ブランチへのバックポート版です

#134642 [browser] Move .NET callbacks off Module

概要

Emscripten Module から .NET のライフサイクル・ダウンロード進捗コールバックを分離し、ローダーが独自のコールバック状態を管理する設計に変更しました。withConfigLoaded が従来のモジュール設定コールバックを置き換え、withDotnetReady は内部的に利用可能なままです。CoreCLR と Mono は preInit と preRun の関数・配列形式の両方に対応し、スプレッド構文による起動失敗を回避します。

変更内容

  • コールバック管理: 新規追加の callbacks.ts でローダー所有のコールバック状態を一元管理(src/mono/browser/runtime/loader/callbacks.ts、src/native/libs/Common/JavaScript/loader/callbacks.ts)
  • API更新: withConfigLoaded を新規追加、モジュール設定コールバック関連の型定義を更新(dotnet.d.ts、host-builder.ts)
  • startup/run の改善: preInit・preRun を関数・配列の両形式に対応し、スプレッド構文の問題を解決(run.ts で 25 行追加)
  • テストアセット更新: ブラウザテストアプリケーションと各サンプルを新しいビルダーAPI に対応(test-main.mjs、サンプルの main.js ファイル)
  • 内部型定義整理: 不要な型定義を削除(types/internal.ts、polyfills.ts)

パフォーマンスへの影響

影響なし

関連Issue

#132555 フォローアップ: #134498

その他

  • この変更はブラウザ WASM ランタイムの**ローダー層(内部実装)**に限定され、公開 API への直接的な破壊的変更はありません
  • withDotnetReady は公開 API から削除されず、内部利用のみとなります
  • 複数のテストアセットとサンプルアプリケーションが同時に更新されており、既存コードとの互換性維持が考慮されています

#134600 [release/11.0] Allow variable page sizes in codesign output in Microsoft.NET.HostModel.Tests

概要

macOSの新しいバージョンに対応するため、Microsoft.NET.HostModel.Testsのコードサイン出力テストで可変ページサイズに対応しました。このはバージョン11.0ブランチへのバックポート(#134588)です。

変更内容

  • CodesignOutputInfo.cs: コードサイン出力情報の解析ロジックを修正し、可変ページサイズに対応(3行修正)
  • MachObjectTests.cs: Machオブジェクト署名テストの予想値を更新し、新しいmacOSバージョンとの互換性を確保(5行追加、3行削除)

パフォーマンスへの影響

影響なし

関連Issue

#134588(オリジナルのPR)

その他

  • テスト互換性向上のみで、製品機能への変更なし
  • 内部テストで検出された問題で、カスタマーへの直接的な影響なし
  • リスク:なし

#134599 [release/10.0] Allow variable page sizes in codesign output in Microsoft.NET.HostModel.Tests

概要

macOSの新しいバージョンで可変ページサイズをサポートするため、Microsoft.NET.HostModel.Testsのcodesign出力テストを修正するバックポート。テスト互換性の向上で、回帰や顧客への直接的な影響はありません。

変更内容

  • CodesignOutputInfo.cs: codesign出力の解析ロジックを修正し、固定ページサイズの仮定を削除(3行変更)
  • MachObjectTests.cs: ページサイズの検証テストを更新し、可変ページサイズに対応(5行追加、3行削除)

パフォーマンスへの影響

影響なし

関連Issue

#134588(元のPR)

その他

  • テスト修正のみで、ランタイムやコンパイラの動作に影響なし
  • macOSの新バージョン対応のための内部テストコード変更
  • CI テストで検証済み

#134185 JIT: preserve local access type in relop assertion propagation

  • 作成者: @EgorBo
  • 作成日時: 2026年09月18日 12:44:28(UTC)
  • マージ日時: 2026年10月02日 15:36:03(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT の assertion propagation において、relop(関係演算子)の置換時にローカル変数のアクセスタイプ(ノード型)を保持することで、不正な狭い読み込み(narrow load)と比較が発生する問題を修正します。これにより、自己比較が正常に折りたたまれるようになります。

変更内容

  • src/coreclr/jit/assertionprop.cpp: relop propagation 時に置換ローカルのノード型をコピー。これにより int ローカルの切り詰められた読み込みが不正に保持される問題を解決
  • src/coreclr/jit/compiler.h: 不要な定義を1行削除
  • src/tests/JIT/Regression_ro_2/Runtime_133859.cs: issue #133859 に対する回帰テストを追加

パフォーマンスへの影響

影響なし(JIT コンパイル時の正確性改善)

関連Issue

#133859

その他

JIT miscompilation に分類される問題の修正。ローカル変数の型情報が正しく伝播されないことで、byte と int の不正な比較が生成される問題が発生していました。


#133662 Use shared managed thunks for reflection invocation

概要

リフレクション呼び出しの性能最適化と予編集可能な共有マネージド・スタブの導入。従来のネイティブリフレクション・ディスパッチャーに代わり、MethodInfo.Invoke、ConstructorInfo.Invoke、MethodInvoker、ConstructorInvokerの一般的なシグネチャに対して、共有マネージド・スタブを使用します。最初の10,000呼び出しは共有パスを使用し、その後の呼び出しから特化した実装に昇格します。仮想/インターフェース・ディスパッチ、宣言型引数検証、列挙体の幅、参照型の方向引数、collectible所有権が保持されます。

変更内容

  • CoreCLR側(src/coreclr/)

    • IntrinsicInvokeHelper.cs:新規追加。共有スタブの分類・ディスパッチ機能を実装(1257行)
    • InstanceCalliHelper.cs:新規追加。explicit-thisのcalliヘルパー実装
    • MethodInvoker.CoreCLR.cs、MethodBaseInvoker.CoreCLR.cs、ConstructorInvoker.CoreCLR.cs:共有スタブへのルーティング実装
    • runtimehandles.cpp/h:受信者固有の仮想ターゲット解決機能を追加
    • reflectioninvocation.cpp:587行のネイティブ反射呼び出しコードを削除(管理コード移行)
    • InstanceCalliHelperIntrinsics.cs(ReadyToRun):explicit-this calliシグネチャの書き直し実装
  • ライブラリ側(src/libraries/)

    • MethodInvokerCommon.cs:呼び出し戦略とキャッシング更新
    • MethodInvoker.cs、MethodBaseInvoker.Constructor.cs:マネージド・スタブ経由のルーティング
    • InvokerEmitUtil.cs:エミット・フォールバック生成を更新
    • テストスイート拡充:MethodInfoTests.cs(2457行新規追加)、ConstructorInfoTests.cs(572行)、MethodInvokerTests.cs、ConstructorInvokerTests.csで境界テストを含む

パフォーマンスへの影響

  • メモリ削減:最初の呼び出しあたり約1.5~5 KiBのマネージド割り当て削減(従来のエミット・フォールバック比)
  • 実行速度改善(BenchmarkDotNet結果):
    • 8要素参照型コンストラクタ:252.30 ns → 228.15 ns
    • インスタンス・プリミティブ・ゲッター:26.57 ns → 25.25 ns
    • 静的4要素参照メソッド:115.95 ns → 94.97 ns
  • スタートアップ改善:ASP.NET Core 10.0.9のミドルウェア初期化で中央値16.8753 ms → 14.4399 ms、メモリ9,560 B → 5,376 B(7回の新規プロセス実行による測定)

関連Issue

#123864(スタック親Issue)
[#126542](https://github.com


#133487 [release/10.0] Fix Linux FileSystemWatcher silent stop after unpaired IN_MOVED_FROM

概要

Linux上のFileSystemWatcherにおいて、ディレクトリの移動に関連する不完全なIN_MOVED_FROMイベント処理時にイベント処理ループが予期せず終了し、watcher が機能しなくなるバグを修正します。.NET 9で導入された回帰バグで、EnableRaisingEvents=trueのままイベント配信が停止する問題を解決します。

変更内容

  • FileSystemWatcher.Linux.cs: inotify イベント処理ループ内で、不完全なIN_MOVED_FROMイベントに対して古い子ウォッチを削除した後もループ処理を継続するよう修正(return false → breakに変更)

パフォーマンスへの影響

影響なし

関連Issue

#133420、#9130

その他

  • リスク: 低。1行の変更で、Linux inotify イベント処理の状態機械内の単一のforeachループ内の狭い関連パスに限定される
  • 互換性: 破壊的変更なし。.NET 11ではFileSystemWatcherが完全に書き直されているため、サービシングブランチでの回帰リスクは低い
  • テスト: 顧客提供の再現アプリで検証済み。自動回帰テストは追加されていない(テストが不安定になる可能性と.NET 11でのコンポーネント再実装のため)

#132346 Convert managed ilasm to use ANTLR actions instead of visiting the parse tree

概要

managed ilasmをANTLRアクション駆動型パースに変換し、フルパースツリーの構築を廃止することで、メモリ使用量と実行時間を大幅に削減しました。特に大規模なテストアセンブリ(HardwareIntrinsics AVX512、HugeArray)でメモリ効率が改善され、x86でのOOM問題を解決しています。また、ILAssemblerライブラリの公開API表面をref-assemblyコントラクトで制限し、ANTLR生成型を内部実装に留めました。

変更内容

  • DocumentCompiler: UnbufferedTokenStreamを使用し、パースツリー構築を無効化。GrammarActionsを通じたアクション駆動型パースに切り替え
  • Ref-assemblyコントラクト: src/tools/ilasm/src/ILAssembler/ref/配下に新規プロジェクト追加。公開API(DocumentCompiler、Diagnostic、CompilationResult等)をコントラクト型として定義
  • GrammarActionsシリーズ: 型参照、メソッドヘッダ、メソッドボディ、マーシャリング、マニフェスト、カスタム属性など、複数のGrammarActionsファイルで文法アクションを実装
  • セマンティック値モデル: CILParser.SemanticValues.*で署名・メソッドボディ・マーシャリング・マニフェスト・カスタム属性の型安全なモデルを追加
  • StringCharStream: AntlrInputStreamのオーバーヘッドを回避するための軽量ICharStream実装
  • エラー許容性向上: truncated/malformedな入力に対する例外の発生を防ぎ、診断結果を生成
  • 状態漏洩防止: 複数ドキュメント/スコープ間での状態漏洩を防止する拡張テスト

パフォーマンスへの影響

実行時間の改善:

  • x64 async/simple-eh: 359.7ms → 316.4ms (-12.0%)
  • x64 HugeArray: 4,614.8ms → 3,243.3ms (-29.7%)
  • x64 HugeField2: 122.272s → 114.357s (-6.5%)
  • x86 async/simple-eh: 344.1ms → 301.7ms (-12.3%)
  • x86 HugeArray: 4,668.5ms → 3,158.8ms (-32.3%)
  • x86 HugeField2: OOM(51.463s後) → 成功(106.208s)

ピークワーキングセット削減(メモリ効率大幅改善):

  • x64 async/simple-eh: 49.8MiB → 38.6MiB (-22.5%)
  • x64 HugeArray: 508.2MiB → 95.3MiB (-81.2%)
  • x64 HugeField2: 3,603.8MiB → 395.8MiB (-89.0%)
  • x86 async/simple-eh: 45.1MiB → 37.1MiB (-17.7%)
  • x86 HugeArray: 304.8MiB → 119.9MiB (-60.7%)
  • x86 HugeField2: 1,058.0MiB(失敗前) → 372.5MiB(成功)

特にメモリ集約的なテストケースでの改善が顕著です


目次