注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #123743 JIT: fix retyping issue in object stack allocation
- #123741 Update tools in prompts to non-deprecated names that work in VSC Copilot Chat
- #123733 Disable userevents tests via CLRTestTargetUnsupported
- #123732 [clr-interp] Workaround c++ compiler bug
- #123728 [clr-interp] Windows Arm64 InterpreterStub fix
- #123725
__ComObjectdoesn't support dynamic interface map (redux) - #123723 [Draft] Try installing Dotnet SDK on Helix Runners for SPMI Benchmark Collections
- #123722 Baseline tests to fix native AOT outerloops
- #123716 Use CORJIT_PREJIT_UNSUPPORTED instead of CORJIT_LIMITATION for BlockNonDeterministicIntrinsics
- #123699 Add CMake cache file to accelerate WebAssembly builds
- #123681 [clr-intero] Disable SVE intrinsics in the presence of the interpreter
- #123647 Add test verifying empty data appends have no effect on hash results
- #123640 Fix AV in IsTailCall by checking for NULL trace address
- #123624 Fold comparisons into single-value ranges in GetRangeFromAssertions
- #123589 Remove marek-safar from CODEOWNERS and resource management policies
- #123547 [release/8.0-staging] [mono][hotreload] Ignore if we receive an empty update.
- #123523 [browser] throw and marshal exception caused by invalid arguments in Tasks
- #123470 [release/10.0] Update dependencies from dotnet/icu
- #123429 [browser][CoreCLR] Trimming feature System.Diagnostics.StackTrace.IsLineNumberSupported
- #123053 [Wasm RyuJit] throw helper / null check preliminaries
- #122978 [release/10.0] [mono] [debugger] Fix string[][]
- #122570 [release/9.0-staging] Fix ICustomQueryInterface implementation in CrossApartmentQueryInterface_NoDeadlock
#123743 JIT: fix retyping issue in object stack allocation
- 作成者: @AndyAyersMS
- 作成日時: 2026年01月29日 00:53:47(UTC)
- マージ日時: 2026年01月29日 10:18:11(UTC)
- ラベル: area-CodeGen-coreclr
概要
JIT のオブジェクトスタック割り当て時に、ローカル構造体の格納操作が GT_COMMA ノードの値側で実行される場合、祖先型伝播により GT_COMMA が誤って再型付けされ、その変更が格納操作にまでカスケード伝播して不正なIRが生成されるバグを修正しました。修正方法は、ローカル構造体の格納ノード訪問時に祖先型伝播をスキップすることです。
変更内容
- src/coreclr/jit/objectalloc.cpp:
ObjectAllocator::RewriteUsesメソッド内で、ローカル構造体の格納ノード処理時に祖先型伝播を実行しないよう修正(+8行)
パフォーマンスへの影響
影響なし。本修正は不正なIR生成を防ぐ正当性の修正であり、パフォーマンスに直接的な影響はありません。むしろ、修正前の誤った再型付けが原因で潜在的なコンパイラ最適化の誤動作を防ぎます。
関連Issue
#123718(本PRで解決)
その他
本修正は限定的で局所的な変更です。祖先型伝播は通常有益な最適化ですが、ローカル構造体の格納という特定のコンテキストでは不要であり、かつ問題を引き起こします。修正は最小限の変更で問題を解決する保守的なアプローチとなっています。
#123741 Update tools in prompts to non-deprecated names that work in VSC Copilot Chat
- 作成者: @jkoritzinsky
- 作成日時: 2026年01月29日 00:39:24(UTC)
- マージ日時: 2026年01月29日 06:46:20(UTC)
- ラベル: needs-area-label
概要
GitHub Copilot Chat用のプロンプト設定ファイルにおいて、非推奨なツール名を名前空間付きの現在のツール名に更新しました。また、JIT-EE APIプロンプトにedit/editFilesツールを追加しています。この変更により、VS Code Copilot Chatでのツール認識が正常に機能するようになります。
変更内容
.github/prompts/docs.prompt.md: YAMLフロントマターのmode:フィールドをagent:にリネーム、4つのツール名を名前空間付きの形式に更新.github/prompts/add-new-jit-ee-api.prompt.md: YAMLフロントマターのmode:フィールドをagent:にリネーム、6つの非推奨ツール名を10つの名前空間付きツールに拡張、edit/editFilesツールを新規追加
主な変更例:
旧形式: mode: codebase, changes, search
新形式: agent: search/codebase, search/changes, search/search
パフォーマンスへの影響
影響なし。このPRはプロンプト設定ファイルの更新のみであり、ランタイムやコンパイラの動作には影響しません。
関連Issue
なし
その他
- この変更は開発者向けのツール設定更新であり、製品コードには影響なし
- VS Code Copilot Chatとの互換性向上を目的とした変更
#123733 Disable userevents tests via CLRTestTargetUnsupported
- 作成者: @Copilot
- 作成日時: 2026年01月28日 21:28:27(UTC)
- マージ日時: 2026年01月29日 15:52:28(UTC)
- ラベル: 指定なし
概要
src/tests/tracing/userevents/ ディレクトリ配下のテストを無効化するPRです。Directory.Build.props に CLRTestTargetUnsupported を true に設定することで、userevents トレーシング関連のテストの実行をスキップします。これらのテストは間欠的にトレースファイル内の .NET イベントキャプチャに失敗するため、issue #123442 によって無効化されました。
変更内容
- src/tests/tracing/userevents/Directory.Build.props
<CLRTestTargetUnsupported>true</CLRTestTargetUnsupported>を追加- issue #123442 へのコメント参照を追加
- 変更: +2行
パフォーマンスへの影響
テスト実行時間の短縮(該当テストの実行がスキップされるため)
関連Issue
- #123442(userevents テストが間欠的にイベントキャプチャに失敗する問題)
その他
このPRは属性的な設定変更により、不安定なテストを暫定的に無効化するものです。根本的な修正は issue #123442 で別途対応予定と考えられます。CLRTestTargetUnsupported は .NET runtime テストスイートにおいて、特定のプラットフォームやシナリオでテストを実行対象外にするための標準的なメカニズムです。
#123732 [clr-interp] Workaround c++ compiler bug
- 作成者: @davidwrighton
- 作成日時: 2026年01月28日 21:15:29(UTC)
- マージ日時: 2026年01月29日 14:05:47(UTC)
- ラベル: area-CodeGen-Interpreter-coreclr
概要
Windows ARM64プラットフォーム上でC++コンパイラのバグに対応するため、InterpCompiler::EmitStaticFieldAddress関数の最適化を無効化するワークアラウンドを実装しました。このバグはVisual Studio Developer Communityで報告されており、関数の最適化時にnoreturn属性の処理に関する問題が発生します。
変更内容
- src/coreclr/interpreter/compiler.cpp
InterpCompiler::EmitStaticFieldAddress関数の前後に#pragma optimize("", off/on)を追加- 対象プラットフォーム:
TARGET_WINDOWS && TARGET_ARM64 - コンパイラ最適化を選択的に無効化し、バグを回避
パフォーマンスへの影響
懸念点: Windows ARM64環境で該当関数の最適化が無効化されることにより、わずかなパフォーマンス低下が予想されます。ただしこの関数は静的フィールドアドレス取得の処理であり、クリティカルパスではないため、実際の影響は限定的と考えられます。
関連Issue
Visual Studio Developer Community #11035707:noreturn関数がコンパイラ最適化時に正しく処理されない問題
https://developercommunity.visualstudio.com/t/noreturn-function-called-from-a-function/11035707
その他
- この修正はコンパイラバグのワークアラウンドであり、Microsoft側でのコンパイラ修正が提供されるまでの一時的な対応です
- Windows ARM64環境でのCLR解釈実行機の安定性を向上させます
#123728 [clr-interp] Windows Arm64 InterpreterStub fix
- 作成者: @davidwrighton
- 作成日時: 2026年01月28日 19:55:16(UTC)
- マージ日時: 2026年01月29日 18:08:31(UTC)
- ラベル: area-CodeGen-Interpreter-coreclr
概要
Windows ARM64 InterpreterStubにおいて、ThreadContextが未設定の場合にx19レジスタ(IR bytecode address)が初期化される前に条件分岐が発生していたバグを修正しました。GetInterpThreadContextWithPossiblyMissingThreadOrCallStubへのジャンプ前にx19を確実に設定するよう、アセンブリ命令の順序を変更しています。
変更内容
- ファイル: src/coreclr/vm/arm64/asmhelpers.asm
- InterpreterStubの2つのアセンブリ命令の順序を入れ替え
- IR bytecode address(x19)の初期化を条件分岐の前に移動
- 変更量: +1行/-1行
パフォーマンスへの影響
影響なし。これはバグ修正であり、命令の順序変更のみで命令数の増減はありません。
関連Issue
#123728
その他
- このバグは、ThreadContextが未設定状態でGetInterpThreadContextWithPossiblyMissingThreadOrCallStubへ分岐した場合、呼び出し先が不正な状態のx19レジスタを参照する危険性がありました
- ARM64アーキテクチャの呼び出し規約(ABIルール)では、x19は呼び出し側が保存する必要があるレジスタのため、事前の適切な初期化が重要です
#123725 __ComObject doesn't support dynamic interface map (redux)
- 作成者: @AaronRobinsonMSFT
- 作成日時: 2026年01月28日 18:53:51(UTC)
- マージ日時: 2026年01月29日 17:40:51(UTC)
- ラベル: area-Interop-coreclr
概要
System.__ComObjectのCOM相互運用型キャストにおいて、動的インターフェースマップの処理に関する前回の修正(#112375)が不十分だったため、より包括的な検証とテストを追加しました。特にMethodTable::HasDynamicInterfaceMap()ロジックの改善と、動的インターフェースマップの用途に関する説明コメントが追加されています。
変更内容
| ファイル | 主な変更 |
|---|---|
src/coreclr/vm/methodtable.h |
HasDynamicInterfaceMap()ロジックを更新し、COM相互運用における動的インターフェースマップの意図と使用方法に関する説明コメントを追加 |
src/tests/Interop/COM/ServerContracts/Server.Contracts.h |
IInterface2を削除し、Marshal_InterfaceがIInterface1を返すように更新 |
src/tests/Interop/COM/ServerContracts/Server.Contracts.cs |
COM相互運用検証シナリオに合わせてマネージドコントラクトインターフェースを調整 |
src/tests/Interop/COM/NativeServer/MiscTypesTesting.h |
ネイティブCOMサーバーをインターフェースマーシャリングテスト用にIInterface1を実装/返却するよう更新 |
src/tests/Interop/COM/NativeClients/MiscTypes/MiscTypes.cpp |
ネイティブCOMクライアントテストをインターフェースマーシャリング検証用に更新 |
src/tests/Interop/COM/NETClients/MiscTypes/Program.cs |
インターフェース同一性/キャスト動作の検証テストを追加・更新 |
パフォーマンスへの影響
影響なし
本PR は COM相互運用のテストインフラ強化と論理的な説明コメントの追加であり、ランタイムのパフォーマンスには直接的な影響を与えません。
関連Issue
#112371(既存の問題を再修正)、#112375(前回の不完全な修正)
その他
- 本変更は前回PR(#112375)で見落とされたシナリオに対する包括的なテストカバレッジの追加
- COM相互運用時の動的インターフェースマップの処理に関する理解を深めるためのドキュメント充実
- テスト契約定義の簡潔化(
IInterface2削除による統一)
#123723 [Draft] Try installing Dotnet SDK on Helix Runners for SPMI Benchmark Collections
- 作成者: @adamperlin
- 作成日時: 2026年01月28日 17:47:48(UTC)
- マージ日時: 2026年01月29日 23:07:10(UTC)
- ラベル: area-CodeGen-coreclr
概要
このドラフトPRは、Helix ランナー上での SPMI ベンチマーク収集における .NET SDK インストールを、セットアップフェーズから実行フェーズに移行させています。目的は NuGet キャッシュの場所を設定し、Helix マシンの限定的な OS ディスク容量を消費しないようにすることです。
変更内容
- superpmi_collect_setup.py: セットアップフェーズでの .NET SDK インストールロジックを削除(13行削除)
- superpmi_benchmarks.py: NuGet 環境変数設定を追加し、実行時に .NET SDK インストール機能を追加(18行追加)
build_and_run関数内にインラインで dotnet SDK インストールコマンドを実装
パフォーマンスへの影響
ディスク容量への影響軽減が期待されます。セットアップフェーズから実行フェーズへの移行により、Helix ランナーの限定的な OS ディスク領域の使用効率が改善される可能性があります。
関連Issue
なし
その他
重要な検討事項(Copilot指摘):
- 定義された
install_dotnet_sdk関数が実装されていない(空の本体)- 削除または実装が必要 - インラインの dotnet インストールコマンドに
--install-dirパラメータが不足している可能性があり、dotnet_exeのパス解決に影響する恐れ - 非Windows プラットフォームで
make_executable(dotnet_exe)呼び出しが削除されており、実行権限設定の欠落が懸念される - インデント不整合あり(
archパラメータの位置)
備考: このPRは関連する dotnet/performance PR(#5088)のパッチ版が必要です。
#123722 Baseline tests to fix native AOT outerloops
- 作成者: @MichalStrehovsky
- 作成日時: 2026年01月28日 17:06:37(UTC)
- マージ日時: 2026年01月29日 05:10:23(UTC)
- ラベル: area-NativeAOT-coreclr
概要
Native AOT (Ahead-Of-Time) コンパイル実行時にテストが失敗するケースに対応するため、既存テストにスキップ条件を追加し、テストインフラストラクチャを拡張するPRです。NativeAOT環境での実行差異に対応するため、JITアウターループテストおよびUTF8文字列マーシャリングテストを条件付きでスキップするようにしました。
変更内容
- Utilities.cs: 32ビットプロセス判定用の
Is32ヘルパープロパティを追加 - Repro.cs: NativeAOT環境でのテスト失敗に対応するため
ActiveIssue属性でテストをスキップ - bug603649.cs: NativeAOT 32ビット環境での失敗に対応するため、新しい
Is32ヘルパーとActiveIssue属性を使用 - UTF8Test.cs: NativeAOT環境下でのStringBuilder マーシャリング関連の既知の失敗テストを条件付きで無効化
パフォーマンスへの影響
影響なし。本変更はテストスキップ条件の追加であり、ランタイムパフォーマンスには直接的な影響を与えません。
関連Issue
関連Issue: #123112(このPRで対応する基盤となったPR)
その他
- この変更は Native AOT アウターループテスト実行の安定化を目的とするもので、NativeAOT環境での既知の失敗ケースを適切に処理しています
- テストスキップには
ActiveIssue属性を使用することで、問題解決時に追跡可能な形で管理されます
#123716 Use CORJIT_PREJIT_UNSUPPORTED instead of CORJIT_LIMITATION for BlockNonDeterministicIntrinsics
- 作成者: @EgorBo
- 作成日時: 2026年01月28日 14:25:39(UTC)
- マージ日時: 2026年01月29日 23:07:55(UTC)
- ラベル: area-CodeGen-coreclr
概要
ReadyToRun/prejit生成時の非決定的Intrinsicsをブロックする際に、より適切なJIT失敗コード CORJIT_R2R_UNSUPPORTED を導入するPRです。従来の CORJIT_IMPLLIMITATION の代わりに専用のエラーコードを使用することで、x86 crossgen環境でのSPMI(SuperPMI)の失敗を解決します。これにより、JIT、VM、ツール(SuperPMI、managed JitInterface)全体で一貫性のある処理が実現されます。
変更内容
- src/coreclr/inc/corjit.h: 新しい
CorJitResult値CORJIT_R2R_UNSUPPORTEDを追加 - src/coreclr/jit/error.h/error.cpp: R2R unsupported失敗用の新しいfatal helperを実装
- src/coreclr/jit/compiler.h/compiler.cpp:
BlockNonDeterministicIntrinsicsを新しいfatal helperに切り替え、retry with minoptsリストに含める - src/coreclr/vm/jitinterface.cpp:
CORJIT_R2R_UNSUPPORTEDを他の無効プログラムJIT結果と同様に処理 - src/coreclr/tools/superpmi/superpmi/jitinstance.cpp: SuperPMIが新結果コードを非エラー結果として記録できるよう対応
- src/coreclr/tools/Common/JitInterface/CorInfoTypes.cs/CorInfoImpl.cs: managedコードで
CORJIT_R2R_UNSUPPORTEDをサポート - src/coreclr/inc/jiteeversionguid.h: JIT-EEバージョンGUIDを更新
パフォーマンスへの影響
影響なし。本変更は、R2R生成時のエラーコード処理を改善するもので、ランタイムパフォーマンスへの直接的な影響はありません。ただし、より適切なエラーコード分類により、SPMI実行時のデバッグと分析の効率が向上します。
関連Issue
jakobbotschの提案を反映したもので、x86 crossgen環境でのSPMI失敗の解決が主目的です。
その他
- JIT-EEバージョンGUIDが更新されているため、既存のキャッシュ済みメタデータとの互換性に注意が必要です
- 新しい結果コードはretry with minoptsメカニズムに含まれており、R2R生成失敗時に自動的に最適化レベルを下げて再試行されます
- この変更はVM、JIT、ツール層全体での一貫性を確保し、ReadyToRun生成パイプラインの信頼性を向上させます
#123699 Add CMake cache file to accelerate WebAssembly builds
- 作成者: @steveisok
- 作成日時: 2026年01月28日 02:09:21(UTC)
- マージ日時: 2026年01月29日 14:40:34(UTC)
- ラベル: arch-wasm area-Build-mono os-browser
概要
WebAssemblyビルドのCMake設定フェーズを大幅に高速化するPRです。294個の機能検出結果をキャッシュすることで、CMake設定時間を約2-3分から10-20秒に短縮(86%削減)しました。Emscripten 3.1.56に特化したキャッシュファイルで、クロスコンパイル時の重複した機能検出を排除しています。
変更内容
| ファイル | 変更内容 |
|---|---|
eng/native/tryrun.wasm.cmake |
新規作成:294個のEmscripten 3.1.56向けプリコンパイル済み機能検出結果キャッシュ(再生成手順ドキュメント含) |
eng/native/gen-buildsys.sh |
-Cフラグでwasm向けキャッシュを事前ロードするように統合 |
src/native/external/zlib-ng.cmake |
browser/WASI向けに19個のコンパイラ機能検出をキャッシュ |
src/native/external/zstd.cmake |
browser/WASI向けに10個のコンパイラフラグ検出をキャッシュ |
eng/native/configurecompiler.cmake |
キャッシュ統合用の追加設定 |
src/native/libs/configure.cmake |
キャッシュシステムの初期化設定 |
パフォーマンスへの影響
大幅な改善:
- CMake機能検出の実行回数:103 → 14(86%削減)
- CMake configure時間:約2-3分 → 10-20秒(最大90%削減)
- 対象:browser-wasm およびWASI向けビルド
バージョン管理:
- Emscripten バージョン不一致検出機能実装
- キャッシュ生成時のEmscriptバージョンと使用時のバージョンを比較し、不一致時に警告表示
関連Issue
その他
キャッシュファイルにはEmscriptensバージョン更新時や新機能検出追加時の再生成手順が記載されています。WebAssemblyはエコシステム安定性が高いため、キャッシュベース戦略が有効です。
#123681 [clr-intero] Disable SVE intrinsics in the presence of the interpreter
- 作成者: @davidwrighton
- 作成日時: 2026年01月27日 18:20:37(UTC)
- マージ日時: 2026年01月29日 14:00:24(UTC)
- ラベル: area-CodeGen-Interpreter-coreclr
概要
SVE (Scalable Vector Extension) intrinsics のサポートにおいて、FFR (First-Fault Register) レジスタの per-method 保存状態管理が interpreter で実装されていないため、interpreter が有効な場合に SVE intrinsics を無効化する変更です。これにより、interpreter 使用時のランタイムエラーを防止します。
変更内容
- src/coreclr/vm/codeman.cpp (+7/-1)
- interpreter が有効な場合に SVE intrinsics を無効化する条件チェックを追加
パフォーマンスへの影響
ARM64 (SVE対応プロセッサ) での interpreter 使用時のみ影響
- パフォーマンス改善効果:なし(むしろ SVE による高速化が利用できない)
- 懸念点:interpreter が有効な環境(デバッグ時など)では SVE intrinsics による性能向上が無効化される
- 注記:JIT コンパイル時は SVE intrinsics は引き続き利用可能
関連Issue
なし
その他
互換性への影響(破壊的変更ではなく、安全性向上)
- 変更内容:内部実装の修正であり、公開API は影響なし
- 対象環境:ARM64アーキテクチャかつ SVE対応プロセッサかつ interpreter 有効時に限定
- 修正の必要性:FFR の per-method 状態管理が interpreter で未実装のため、この制限は architectural 要件
#123647 Add test verifying empty data appends have no effect on hash results
- 作成者: @Copilot
- 作成日時: 2026年01月26日 22:27:42(UTC)
- マージ日時: 2026年01月29日 12:43:46(UTC)
- ラベル: area-System.IO
概要
非暗号化ハッシュアルゴリズムの実装に対して、空のデータ(空のspan)の追記がハッシュ結果に影響を与えないことを検証するテストを追加します。NonCryptoHashTestDriver基底クラスにAppendingEmptyHasNoEffect()テストメソッドを追加することで、CRC32、CRC64、XxHash32、XxHash64など全ての実装に自動的に適用されます。
[Fact]
public void AppendingEmptyHasNoEffect()
{
NonCryptographicHashAlgorithm reference = CreateInstance();
reference.Append(new byte[] { 1, 2, 3 });
byte[] expected = reference.GetCurrentHash();
NonCryptographicHashAlgorithm hash = CreateInstance();
hash.Append(ReadOnlySpan<byte>.Empty);
hash.Append(new byte[] { 1, 2, 3 });
hash.Append(ReadOnlySpan<byte>.Empty);
byte[] actual = hash.GetCurrentHash();
Assert.Equal(expected, actual);
}
変更内容
- ファイル:
src/libraries/System.IO.Hashing/tests/NonCryptoHashTestDriver.cs - 変更:
AppendingEmptyHasNoEffect()テストメソッドを追加(+16行) - 対象実装: CRC32、CRC64、XxHash32、XxHash64(シード付きバリアント含む)および将来の実装
パフォーマンスへの影響
影響なし。このPRはテストコードのみの追加であり、ハッシュアルゴリズムの実装ロジックに変更はありません。
関連Issue
PR #123601のレビューコメントで提案された改善(@vcsjones指摘)に基づくテスト追加
その他
全1061テストが合格し、新規テストは対象となる8つのハッシュ実装で実行されています(各基本実装とシード付きバリアント)。この基底クラステストの追加により、将来新しいハッシュアルゴリズムが追加される際も自動的にこの検証が適用されます。
#123640 Fix AV in IsTailCall by checking for NULL trace address
- 作成者: @Copilot
- 作成日時: 2026年01月26日 21:04:51(UTC)
- マージ日時: 2026年01月29日 16:12:35(UTC)
- ラベル: area-Diagnostics-coreclr
概要
PRs #108942 と #108414 で導入された TRACE_MULTICAST_DELEGATE_HELPER と TRACE_EXTERNAL_METHOD_FIXUP トレース型が NULL アドレスを設定していたため、デバッガーの IsTailCall 関数で NULL ポインター参照例外が発生していました。本PRでは IsTailCall 関数で trace.GetAddress() が NULL かどうかをチェックしてから GetNativeCodeMethodDesc() を呼び出すよう修正しました。
// 修正後の実装概要
MethodDesc* pTargetMD = NULL;
if (trace.GetTraceType() == TRACE_UNJITTED_METHOD)
{
pTargetMD = trace.GetMethodDesc();
}
else if (trace.GetAddress() != (PCODE)NULL)
{
pTargetMD = g_pEEInterface->GetNativeCodeMethodDesc(trace.GetAddress());
}
変更内容
- src/coreclr/debug/ee/controller.cpp (+9/-4)
IsTailCallメソッドを修正し、trace.GetAddress()が NULL でないことを確認してからGetNativeCodeMethodDesc()を呼び出すようにガード処理を追加
パフォーマンスへの影響
影響なし(NULL チェック追加による微小なオーバーヘッドのみ)
関連Issue
なし
その他
- 本修正は防御的な処理(NULL チェック)を追加するもので、根本的な原因(新しいトレース型が NULL アドレスを持つ設計)については別途対応が必要な可能性があります
- レビュアーのフィードバックにより、
TRACE_MULTICAST_DELEGATE_HELPERとTRACE_EXTERNAL_METHOD_FIXUPの NULL アドレスは仕様によるものとのことです - クロス ReadyToRun イメージ呼び出しに対するテール呼び出しステップの正確性については、別途 Issue として追跡する必要があります
#123624 Fold comparisons into single-value ranges in GetRangeFromAssertions
- 作成者: @EgorBo
- 作成日時: 2026年01月26日 14:59:59(UTC)
- マージ日時: 2026年01月29日 10:32:38(UTC)
- ラベル: area-CodeGen-coreclr reduce-unsafe
概要
このPRは、JITコンパイラのRange Analysis(範囲解析)と検証命題の伝播を強化し、関係演算子の比較結果をより正確に認識できるようにします。比較式が常に真([1..1])または常に偽([0..0])であることを判定でき、より多くの分岐の最適化が可能になります。
キー改善:
- VNF_Cast の範囲判定を両オペランドの範囲情報を組み合わせて改善
- VNF_GT/EQ/NE などの比較演算結果を単一値定数として検出し、不要な分岐を削除
変更内容
| ファイル | 変更内容 |
|---|---|
| rangecheck.h | Range::IsSingleValueConstant() メソッド追加。RangeOps::EvalRelop() の戻り値を tri-state enum から Range 型に変更し、0/1 の範囲セマンティクスで表現。GetRangeFromType をstatic化 |
| rangecheck.cpp | GetRangeFromAssertions() を大幅リファクタ。キャスト時にソース式の範囲を考慮、EvalRelop() で比較VNを評価、単一値範囲で早期終了。到達可能な検証命題の訪問ロジックを構造化 |
| assertionprop.cpp | グローバル relop 検証命題伝播を改善。relop の値番号の範囲情報を直接クエリし、計算結果が 0 または 1 の単一定数なら即座に true/false に畳み込み |
パフォーマンスへの影響
改善点:
- より多くの条件式が静的に評価可能となり、不要な分岐が削除可能
- 範囲解析による冗長コードの除去で、ターンアラウンドタイム(TP)の改善が期待できる
- EQ/NE 演算子で範囲が分離している場合やシングル値の場合、
EvalRelopで最適化
懸念点:
- 検証命題訪問ロジックの複雑化による静的解析コストの微小な増加(著者は"TP-oriented changes"と記載)
- 詳細なベンチマーク数値は記載なし
関連Issue
なし
その他
- 本PR は内部JIT最適化パス(RangeCheck, AssertionProp)を対象とした改善で、ユーザー向けAPI変更なし
- 変更は単体が小さく(合計186行の増減)、焦点が絞られた範囲解析の精度向上に特化
#123589 Remove marek-safar from CODEOWNERS and resource management policies
- 作成者: @Copilot
- 作成日時: 2026年01月25日 00:44:30(UTC)
- マージ日時: 2026年01月29日 21:14:51(UTC)
- ラベル: area-Meta
概要
このPRはメンテナンス要求に基づいて、dotnet/runtimeリポジトリからmarek-safarを全てのコードオーナー設定から削除するものです。併せてILLinkのコード所有権構造を統合し、sbomerへの一元化を実施しました。機能的なコード変更はなく、純粋な設定ファイルの更新です。
変更内容
.github/CODEOWNERS:@marek-safarをILLink関連の全エントリから削除@mrvoorheと@radekdoulikを@sbomerに統合- ILLinkサブディレクトリを単一親パス
/src/tools/illink/ @sbomerに統合(複数エントリから1エントリへ)
.github/policies/resourceManagement.yml:@marek-safarをlinkable-frameworkのメンショニーリストから削除@marek-safarをsize-reductionのメンショニーリストから削除
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
リポジトリ内のmarek-safarへの参照が完全に削除されました。この変更により、ILLinkのコード所有権管理が簡素化され、保守性が向上します。
#123547 [release/8.0-staging] [mono][hotreload] Ignore if we receive an empty update.
- 作成者: @github-actions[bot]
- 作成日時: 2026年01月23日 13:58:07(UTC)
- マージ日時: 2026年01月29日 13:54:28(UTC)
- ラベル: Servicing-approved
概要
Blazor WebAssemblyのホットリロード機能において、ランタイムが同時に2つの更新を受け取った際にアサーション失敗する問題を修正しました。空のILを含む更新を無視することで、この防御層を追加しています。この修正は.NET 10および9で既に適用されており、今回は.NET 8へのバックポートです。
変更内容
src/mono/mono/component/hot_reload.c: ホットリロード処理ロジックを修正(+4行/-2行)- 空の更新を受け取った場合の処理を追加し、ランタイムアサーション失敗を防止
パフォーマンスへの影響
影響なし
この修正は異常系処理の追加であり、通常のホットリロード処理のパフォーマンスには影響しません。
関連Issue
- #120333(オリジナルの修正)
- #120334(.NET 10へのバックポート)
- #120335(.NET 9へのバックポート)
その他
- 実装スコープ: 内部実装の修正(mono/component/hot_reload.c)であり、パブリックAPIへの影響なし
- テスト: 手動でのBefore/Afterテストにより検証済み
- リスク評価: Low
- これは以前はサポートされていないシナリオでしたが、上流のVS側の変更により新たにトリガーされるようになりました
- ランタイムレベルでの回帰なし
- 修正は「多層防御」アプローチの一環で、上流側の動作修正と併せて実施予定
#123523 [browser] throw and marshal exception caused by invalid arguments in Tasks
- 作成者: @ArcadeMode
- 作成日時: 2026年01月23日 02:37:06(UTC)
- マージ日時: 2026年01月29日 08:55:24(UTC)
- ラベル: arch-wasm area-System.Runtime.InteropServices.JavaScript community-contribution os-browser
概要
WebAssemblyランタイムで、JavaScriptから C#へのTask<T>マーシャリング時に型アサーション失敗がランタイムクラッシュを引き起こしていた問題を修正しました。クラッシュの代わりに、アサーション失敗を Task の Exception として C# 側に伝播させるよう改善しています。
// 修正前:型アサーション失敗でランタイムクラッシュ
// 修正後:例外をTaskの結果として返却
try
{
var result = await JavaScriptRuntime.InvokeAsync<int>("getInvalidValue");
}
catch (Exception ex)
{
// アサーション失敗が例外として捕捉可能に
Console.WriteLine($"Assertion failed: {ex.Message}");
}
変更内容
- managed-exports.ts:
res_converterの呼び出しを try-catch で囲み、型アサーション失敗時に Task の Exception として例外を設定 - marshal.ts: マーシャリング処理の改善
- JSImportTest.cs/JSExportTest.cs: short/byte オーバーフロー、型不一致シナリオのテストケース追加(87行追加)
- JavaScriptTestHelper.mjs/cs: オーバーフロー検証用ヘルパー関数追加(41行・91行追加)
- logging.ts: ログ出力の軽微な修正
パフォーマンスへの影響
影響なし。例外処理の追加は正常系(アサーション成功時)でのオーバーヘッドは最小限です。
関連Issue
#123523
その他
セキュリティ/安定性の改善:
- 従来はランタイムクラッシュにより無限エラーメッセージループやメモリ枯渇を引き起こしていました
- 修正により、不正なデータ型の受け渡しが適切に例外処理で管理可能になり、WASM アプリケーションの堅牢性が向上します
- JSInterop の破壊的変更ではなく、エラーハンドリングの改善です
#123470 [release/10.0] Update dependencies from dotnet/icu
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年01月22日 02:02:37(UTC)
- マージ日時: 2026年01月29日 06:48:55(UTC)
- ラベル: Servicing-approved area-codeflow
概要
dotnet/icu リポジトリからの依存関係を更新するPull Requestです。Microsoft.NETCore.Runtime.ICU.Transport パッケージを 10.0.0-rtm.25625.1 から 10.0.0-rtm.26071.1 にアップグレードします。この更新は2026年1月21日の ICU ビルド 20260121.1 に基づいています。
変更内容
- eng/Version.Details.props: バージョン情報を1行更新
- eng/Version.Details.xml: 依存関係のバージョン情報を2行更新
- Microsoft.NETCore.Runtime.ICU.Transport: 10.0.0-rtm.25625.1 → 10.0.0-rtm.26071.1
パフォーマンスへの影響
影響なし(依存関係の更新のため、パフォーマンス関連の変更は明記されていません)
関連Issue
なし
その他
- このPull Requestは dotnet-maestro[bot] による自動依存関係更新です
- dotnet/icu リポジトリの dotnet/release/10.0 ブランチから同期されています
- Maestro サブスクリプション ID: db1ca3c9-37b3-43b6-a420-6f1f4040ce77
#123429 [browser][CoreCLR] Trimming feature System.Diagnostics.StackTrace.IsLineNumberSupported
- 作成者: @pavelsavara
- 作成日時: 2026年01月21日 11:54:38(UTC)
- マージ日時: 2026年01月29日 08:24:41(UTC)
- ラベル: arch-wasm area-System.Diagnostics size-reduction os-browser
概要
WebAssembly/ブラウザ向けビルドでスタックトレースのファイル情報(ファイル名、行番号、列番号)収集を無効化する機能スイッチを追加しました。System.Diagnostics.StackTrace.IsLineNumberSupportedフィーチャースイッチを導入し、WASM Release ビルドではデフォルトで無効化されます。これにより、hello worldアプリケーションから214KBの未圧縮IL削減が実現されます。
変更内容
- StackFrameHelper.cs: ファイル情報処理とリエントランシー追跡フィールドを
#if !TARGET_BROWSERでガード、CA1822診断抑制を追加 - StackTrace.cs:
System.Diagnostics.StackTrace.IsLineNumberSupportedフィーチャースイッチ定義を追加 - StackFrame.CoreCLR.cs: コンストラクタと
BuildStackFrameメソッドのファイル情報フィールド割り当てをガード - EventSource.cs, Debugger.cs: ブラウザビルド向けの関連トリミング処理を調整
- Microsoft.NET.Sdk.WebAssembly.Browser.targets: WASMリリースビルドでデフォルトで
<StackTraceLineNumberSupport>false</StackTraceLineNumberSupport>を設定 - テスト追加: BrowserDoesNotIncludeStackTraceSymbols.csでトリミング動作を検証
パフォーマンスへの影響
改善: WASMアプリケーションで214KBの未圧縮ILサイズ削減。TARGET_BROWSERプラットフォームではファイル情報関連コード全体が除外されるため、実行時オーバーヘッド削減とメモリ使用量削減が期待できます。ブラウザ環境ではスタックトレース情報の保持がサイズペナルティとなるため、この機能スイッチはWASMアプリケーションに特に有効です。
関連Issue
PR #123429
その他
- この変更はブラウザ/WASM環境に特化した最適化であり、デスクトップ/サーバーのCLR動作には影響なし
- 機能スイッチにより
IsLineNumberSupportedプロパティを通じて実行時に動作を制御可能 - Releaseビルドではデフォルト無効化されるため、明示的な設定変更なしで削減効果が得られます
#123053 [Wasm RyuJit] throw helper / null check preliminaries
- 作成者: @AndyAyersMS
- 作成日時: 2026年01月09日 23:11:53(UTC)
- マージ日時: 2026年01月29日 00:05:30(UTC)
- ラベル: arch-wasm area-CodeGen-coreclr
概要
WebAssemblyのRyuJITで明示的なnullチェックと例外ヘルパー呼び出しのインフラストラクチャを整備するPRです。Wasmではnullチェックが明示的であり、OSのページフォルト機構に依存できないため、例外をヘルパー呼び出し経由で発生させる必要があります。
// GT_NULLCHECKノードの例
// Wasmではアドレス参照前に明示的なnullチェックが必須
genCodeForNullCheck(treeNode); // 新規実装
変更内容
- gentree.h:
SCK_NULL_CHECK特殊コード種を追加 - flowgraph.cpp: EH(例外処理)インフラストラクチャに
SCK_NULL_CHECK処理を統合、ACD(Add Code Descriptor)トラッキングをハンドラーリージョン単位に変更 - codegenwasm.cpp:
GT_NULLCHECKノード向けのコード生成実装(最大チェックオフセット比較) - fgwasm.h/fgwasm.cpp: Wasmラベル管理と制御フロー向けに後続フロック列挙を修正
- stacklevelsetter.cpp: throw helperブロック登録処理追加
- jitinterface.h: Wasm向けに
MAX_UNCHECKED_OFFSET_FOR_NULL_OBJECTを1023に設定(他プラットフォーム比で小さい) - compiler.h/cpp: cross-replay用Wasm null objectオフセット対応
パフォーマンスへの影響
Wasmプラットフォームのnullチェックが明示的化されることで、ランタイムのメモリ保護機構に依存できず、各参照アクセス時に追加の比較命令が生成されます。その一方で、ヘルパー呼び出しベースのアプローチにより、例外発生時のスタック操作を効率化できる可能性があります。具体的なパフォーマンス測定結果は記載されていません。
関連Issue
なし
その他
- このPRは「preliminaries(準備作業)」と位置づけられており、実装の基盤整備です
- Wasm特有の制約(コードアドレスがEHリージョン判定に使用不可)を反映した設計
- 仮のコード生成実装を含み、divide-by-zero チェックは プレースホルダー段階
#122978 [release/10.0] [mono] [debugger] Fix string[][]
- 作成者: @github-actions[bot]
- 作成日時: 2026年01月07日 16:21:57(UTC)
- マージ日時: 2026年01月29日 18:16:52(UTC)
- ラベル: Servicing-approved area-Debugger-mono
概要
Monoデバッガーで多次元配列(例:string[][])の検査時に、モバイルおよびWasm環境で誤ったジェネリック型パラメータが返される問題を修正しました。デバッガープロトコルの型情報処理における軽微なバグ修正です。
変更内容
src/mono/mono/component/debugger-agent.c (+4/-0)
- デバッガーエージェントの多次元配列型パラメータ処理の修正
src/mono/mono/component/debugger-protocol.h (+1/-1)
- デバッガープロトコルの定義を更新
パフォーマンスへの影響
影響なし
本修正はデバッガーメタデータ処理のバグ修正であり、実行時パフォーマンスへの影響はありません。
関連Issue
- #122935(元のPR)
- DevDiv workitem #2633466
その他
- 対象バージョン: .NET 10.0 (release/10.0ブランチへのバックポート)
- リスク評価: 低
- テスト: VS上での手動検証完了
- 互換性: 破壊的変更なし
- 影響範囲: Mono実装のモバイル・Wasm環境でのデバッグ機能のみ
#122570 [release/9.0-staging] Fix ICustomQueryInterface implementation in CrossApartmentQueryInterface_NoDeadlock
- 作成者: @github-actions[bot]
- 作成日時: 2025年12月15日 23:23:26(UTC)
- マージ日時: 2026年01月29日 18:08:08(UTC)
- ラベル: Servicing-approved test-enhancement area-Interop-coreclr
概要
CrossApartmentQueryInterface_NoDeadlockテストにおけるICustomQueryInterfaceの実装を修正するテストのみの変更です。main ブランチで数ヶ月間CIで実行されており、安定性が確認されています。issue #111264の修正を.NET 9.0リリースブランチにバックポートしたものです。
変更内容
- src/tests/Interop/COM/ComWrappers/API/Program.cs: テストコード内のICustomQueryInterface実装に関する修正(1行追加、1行削除)
パフォーマンスへの影響
影響なし。テストのみの変更であり、製品コードへの変更はありません。
関連Issue
- #111264(このバックポートで修正)
- #111978(元となるmainブランチのPR)
その他
- 変更の性質: テストコード限定のため、リスクなし
- CI実績: mainブランチで数ヶ月間のCI実行実績あり
- バックポート対象: release/9.0-stagingブランチ(.NET 9のサービシングリリース用)
- 回帰テスト: なし(テスト変更のため)