注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #130138 Add back MinInteger/MaxInteger paths for IEnumerables in LINQ
- #130136 Reenable disabled ML-DSA PKCS8 export tests
- #130131 Fix build break in codegenwasm
- #130120 Re-enable Arm64 hwintrinsic tests
- #130117 Document that adding
unsafemodifier is a breaking change - #130111 [browser][coreCLR] enable -O3 after emscripten bump
- #130110 Validate targets of generic lookup in the scanner
- #130101 [wasm] Bail R2R for SIMD16 store-indirect and SIMD16 parameters
- #130090 [cdac] HFA / HVA support: enable ARGITER + zero-known-issues on Windows ARM64 + Linux ARM/ARM64
- #130076 Enable IJW interop test native projects on Arm64
- #130075 Add crossgen2 --strip-il-bodies runtime-async regression test
- #130059 Fix x86 codegen non-determinism across host architecture
- #130058 Migrate more CoreCLR holders to
LifetimeHolder<> - #130049 Update the JIT to share the xplat vector tables across platforms
- #130036 Build mobile inner TFMs as CoreCLR in Mono host builds
- #130006 JIT: stop treating ManagedThreadId helper as constant/pure
- #129995 Don't retain host probing-path properties in CLR config and AppContext
- #129921 Improve AES-KWP for Windows
- #129828 Convert nethost to C
- #129766 [wasm][coreCLR] Dispatch R2R-compiled methods from reflection and UnmanagedCallersOnly paths
- #129605 Surface failing crossgen2 comparison dlls in the Helix work item file list
- #128721 [RyuJit/WASM] Remove the special prolog handling
- #125437 [mobile] Enable NativeAOT library tests on Apple mobile platforms
- #123534 [browser] Add publish-time telemetry for WebAssembly configuration properties
#130138 Add back MinInteger/MaxInteger paths for IEnumerables in LINQ
- 作成者: @MihaZupan
- 作成日時: 2026年07月02日 18:23:46(UTC)
- マージ日時: 2026年07月02日 20:33:07(UTC)
- ラベル: area-System.Memory
概要
PR #128306で導入されたパフォーマンス回帰を修正します。IEnumerable入力で整数型Tの場合、Min/MaxメソッドがIComparer経由の比較ではなく<演算子を直接使用するための最適化パスを復元します。
変更内容
- System/Linq/Min.cs: 整数型用の最適化ロジック(40行追加)
- System/Linq/Max.cs: 整数型用の最適化ロジック(40行追加)
これらの変更により、IEnumerableがSpanに変換できない場合でも、整数型についてはより効率的な比較方法を使用できるようになります。
パフォーマンスへの影響
大幅な改善が確認されています:
- Min操作: 102.14 ns → 44.23 ns(約57%削減、メモリ割り当て32B → 0B)
- Max操作: 107.91 ns → 56.38 ns(約48%削減、メモリ割り当て32B → 0B)
整数型のIEnumerableに対する入力では、実行速度が半減し、メモリ割り当てがゼロになります。
関連Issue
#130047 - パフォーマンス回帰の報告
#128306 - 元の変更
MihuBot/runtime-utils#2066 - ベンチマーク検証
その他
PR #128306の導入時のベンチマークで、このIEnumerableパスがカバーされていなかったため、回帰が検出されませんでした。この修正により、整数型での最適化パスが必要に応じて動作するようになります。
#130136 Reenable disabled ML-DSA PKCS8 export tests
- 作成者: @PranavSenthilnathan
- 作成日時: 2026年07月02日 17:00:08(UTC)
- マージ日時: 2026年07月02日 20:01:48(UTC)
- ラベル: area-System.Security
概要
ML-DSA PKCS8エクスポート関連の無効化されていたテストを再度有効化するPull Requestです。Issue #118609に対応しており、テストコードの調整を通じて機能の確認を行っています。
変更内容
- MLDsaCngTests.Windows.cs: テスト条件の調整(1行追加、1行削除)
- MLDsaTestHelpers.cs: テストヘルパーコードの整理(3行削除)
- MLDsaTestsBase.cs: テスト実装の修正(3行追加、3行削除)
- PfxTests.cs: PKCS8関連テストの調整(1行追加、1行削除)
パフォーマンスへの影響
影響なし
関連Issue
その他
変更範囲が限定的(テストコードのみ、計13行の差分)であり、ML-DSA(機械学習デジタル署名アルゴリズム)のPKCS8形式エクスポート機能に関するテストの再有効化に関連しています。
#130131 Fix build break in codegenwasm
- 作成者: @AndyAyersMS
- 作成日時: 2026年07月02日 15:31:10(UTC)
- マージ日時: 2026年07月02日 16:29:24(UTC)
- ラベル: area-CodeGen-coreclr
概要
WASM JIT コードジェネレータのビルド破損を修正します。デバッグアサーションで使用するプロログ状態の確認方法を、廃止されたコンパイラフラグから emitter のクエリメソッドに変更し、他の codegen バックエンドとの実装パターン統一を図ります。
変更内容
- src/coreclr/jit/codegenwasm.cpp:
CodeGen::genReportGenericContextArg内のアサーション条件を変更- 変更前:
m_compiler->compGeneratingPrologフラグを使用 - 変更後:
GetEmitter()->emitGeneratingPrologOrFuncletProlog()メソッドを使用
- 変更前:
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
この変更は内部実装(JIT codegen)への修正であり、パブリック API への影響はありません。WASM ランタイムのコードジェネレーション時のデバッグアサーション精度向上に寄与します。
#130120 Re-enable Arm64 hwintrinsic tests
- 作成者: @a74nh
- 作成日時: 2026年07月02日 10:52:16(UTC)
- マージ日時: 2026年07月02日 13:15:52(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
Arm64ハードウェアイントリンシック(HWIntrinsic)テストフレームワークにおいて、AesとCrc32テストがコンパイルされていなかった問題を修正します。テスト生成ロジックの設定を修正し、これらのテストが適切にテストフレームワークに含まれるようにします。
変更内容
- src/tests/Common/GenerateHWIntrinsicTests/Arm/BaseTests.cs: テスト生成ロジックを修正(2行追加、2行削除)。AesおよびCrc32テストがテストコンパイル対象に含まれるようにする設定を調整
- Arm64 HWIntrinsicテストプロジェクト: Aes_r.csproj、Aes_ro.csproj、Crc32_r.csproj、Crc32_ro.csrojの4つのプロジェクトファイルが対象(詳細な変更内容は提供されていません)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このPRは無効化されていたテストを再度有効化するもので、テストカバレッジの拡大に該当します。JIT最適化およびハードウェアイントリンシック命令の正確性検証強化につながります。
#130117 Document that adding unsafe modifier is a breaking change
- 作成者: @jjonescz
- 作成日時: 2026年07月02日 10:43:27(UTC)
- マージ日時: 2026年07月02日 14:23:00(UTC)
- ラベル: documentation area-Meta
概要
unsafe修飾子を追加することが破壊的変更に該当することを、破壊的変更ドキュメントルールに明示的に記載する更新です。C#のメモリ安全性/unsafe進化セマンティクスに関連する変更シナリオとして位置付けられています。
変更内容
- docs/coding-guidelines/breaking-change-rules.md: Signatures セクション配下に、更新されたC#メモリ安全性/unsafe進化ルールでコンパイルされた場合の
unsafe修飾子追加を「Disallowed」項目として追加(+2行)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このドキュメント更新は、APIのunsafe修飾子追加が破壊的変更として扱われることを明確にしています。既存のコードが新しいセマンティクスで予期しない動作を示さないよう、ライブラリ開発者への指針となります。
#130111 [browser][coreCLR] enable -O3 after emscripten bump
- 作成者: @pavelsavara
- 作成日時: 2026年07月02日 08:53:30(UTC)
- マージ日時: 2026年07月02日 12:56:03(UTC)
- ラベル: arch-wasm area-Host os-browser
概要
Emscripten 5.0.6 / LLVM 23へのバージョンアップにより、-O3オプション下でのメタDCE処理がユーザー指定のWasm エクスポートを削除しなくなったため、以前の回避策を削除するPRです。ブラウザターゲットで-O3最適化を有効化し、他のUNIXターゲットと同等の最適化レベルを実現します。
変更内容
- eng/native/configureoptimization.cmake — ブラウザ限定の
-O2リンク時特別扱いを削除し、-O3を使用するように統一 - src/native/corehost/browserhost/CMakeLists.txt、src/coreclr/hosts/corerun/CMakeLists.txt、src/mono/browser/build/BrowserWasmApp.CoreCLR.targets — 明示的な
-Wl,--export=__stack_pointerと-Wl,--export=__coreclr_wasm_rtlrestorecontext_tagを削除。これらシンボルは-sEXPORTED_FUNCTIONS(eng/native.wasm.targetsのEmccExportedFunction項目)経由でエクスポート
パフォーマンスへの影響
-O3最適化有効化により、ブラウザターゲットのWasmバイナリサイズ削減と実行性能向上が期待されます。具体的な改善数値はPRに記載されていません。
関連Issue
その他
-lexports.js(MINIFY_WASM_EXPORT_NAMES=0)は保持され、JS側のwasmExports['__stack_pointer']/タグルックアップ時に生の名前がミニファイされないよう維持- CoreCLRブラウザビルド(Release)で動作確認済み:リバースP/Invoke(
__stack_pointer)と例外処理パス(__coreclr_wasm_rtlrestorecontext_tag)が正常に機能
#130110 Validate targets of generic lookup in the scanner
- 作成者: @MichalStrehovsky
- 作成日時: 2026年07月02日 07:49:38(UTC)
- マージ日時: 2026年07月02日 21:19:44(UTC)
- ラベル: area-NativeAOT-coreclr
概要
ジェネリック型の検索対象を検証し、AOT(Ahead-of-Time)コンパイル時に型ロードエラーを早期に検出できるようにします。スキャナーでトークン検証を追加することで、Debug ビルドと同様に Release ビルドでも型ロードエラーをキャッチし、エラーハンドリングが可能な地点で回復処理(例:例外をスローする本体の生成)を実行できるようになります。
変更内容
- ILImporter.Scanner.cs: ジェネリック型検索のターゲット検証ロジックを追加(+12行)
- Generics.cs: ジェネリック型ロードエラーのユニットテストを追加(+24行)
パフォーマンスへの影響
影響なし(AOT コンパイル時の検証段階での追加で、実行時パフォーマンスへの影響なし)
関連Issue
その他
- NativeAOT(Native ahead-of-time compilation)のコンパイラツール(ILCompiler)内での変更
- Debug ビルドと Release ビルド間の挙動の一貫性を向上させる改善
- RyuJIT が IL からトークン解決する際の検証処理と同様のロジックを Scanner に適用
#130101 [wasm] Bail R2R for SIMD16 store-indirect and SIMD16 parameters
- 作成者: @AndyAyersMS
- 作成日時: 2026年07月01日 22:47:55(UTC)
- マージ日時: 2026年07月02日 02:15:40(UTC)
- ラベル: arch-wasm area-CodeGen-coreclr
概要
WebAssembly (wasm) JIT コード生成において、TYP_SIMD16(Vector128)値に関連する未実装のパスでReadyToRun(R2R)コンパイルをベイルアウトするようにします。現在、TYP_SIMD16パラメータがwasm署名上でi32として表現されているため、これらを適切に処理できない場合にベイルアウトして無効なwasmモジュール生成を防ぎます。
変更内容
- src/coreclr/jit/codegenwasm.cpp: 2つのベイルアウト条件を追加
TYP_SIMD16パラメータを持つメソッドのベイルアウト(wasm署名との表現の不一致に対応)TYP_SIMD16値への間接ストア操作のベイルアウト(無効なv128.storeシーケンス生成を防止)
パフォーマンスへの影響
影響なし
関連Issue
その他
このPRはSPC(Static Profile-Guided Code generation)の検証を阻害していたSIMD関連のベイルアウト漏れを修正するもので、内部実装の修正です。
#130090 [cdac] HFA / HVA support: enable ARGITER + zero-known-issues on Windows ARM64 + Linux ARM/ARM64
- 作成者: @max-charlamb
- 作成日時: 2026年07月01日 16:28:52(UTC)
- マージ日時: 2026年07月02日 14:13:46(UTC)
- ラベル: area-Diagnostics-cdac
概要
cDAC(Compact Data Contract)の RuntimeTypeSystem に HFA/HVA(Homogeneous Float/Vector Aggregate)分類機能を追加し、ARM/ARM64 プラットフォームでの GCRefMap 合成を正確に実現するもの。これにより Windows ARM64、Linux ARM、Linux ARM64 での ARGITER ストレステストと GCRef 検査が有効化されます。
変更内容
- 新規 API:
IRuntimeTypeSystem.TryGetHFAElementSize(TypeHandle, out int)を追加。HFA/HVA 型に対して要素サイズ(4/8/16)を返し、アーキテクチャ自動ゲーティング(FEATURE_HFA)により ARM/ARM64 でのみ動作 - MethodTable フラグ追加:
WFLAGS_LOW.IsHFA = 0x00000800フラグをMethodTableFlags_1.csに追加 - HFA/HVA ウォーカー実装:
RuntimeTypeSystem_1.csで Vector 型(Vector64<T>、Vector128<T>、System.Numerics.Vector<T>)の検出と数値型検証を実装。第1フィールド走査による再帰的分類 - CdacTypeHandle 適応:
IsHomogeneousAggregate()/GetHomogeneousAggregateElementSize()を新 RTS API に接続。ARM32 では フィールド走査を短縮 - プラットフォームゲート拡張:
CdacStressTests.ArgIterStress_AllVerificationsPass、KnownIssues==0 検査、GcScanner.PromoteCallerStackの 3 ゲートを Windows x86/x64 から Windows ARM64 と Linux ARM/ARM64 に拡張 - テストカバレッジ:
CallSignaturesデバッジーにHfaCategory(~100 LOC) を追加。Scalar HFA(Float2/3/4, Double2/3/4)、Nested HFA、混合引数、HVA(intrinsic vectors)、負ケース(Float5、MixedR4R8)を網羅
パフォーマンスへの影響
影響なし。本変更は診断機能(cDAC GC スキャン)の精度向上であり、ランタイムパスの最適化や懸念点なし。
関連Issue
その他
- ローカル検証:
dotnet build src/native/managed/cdac/cdac.slnx -c Release成功、ユニットテスト 2611 合格 - ARM ハードウェアなしでのローカル検証は行われていない。CI での検証時に HFA/HVA 形状の相違があれば ARGITER 検査で検出される
- 将来の対応予定(#130008 で追跡): Linux/macOS x64 の SystemV-AMD64 eightbyte 分類器、RISC-V64/LoongArch64 の FP 構造分類器、WASM32 の
GetFieldAlignmentポート - 内部実装の変更(診断契約 cDAC)であり公開 API への影響なし
#130076 Enable IJW interop test native projects on Arm64
- 作成者: @Copilot
- 作成日時: 2026年07月01日 11:54:28(UTC)
- マージ日時: 2026年07月02日 17:21:31(UTC)
- ラベル: area-Interop-coreclr
概要
IJWテストのネイティブプロジェクトがArm64で誤って除外されていた問題を修正するもの。src/tests/Interop/CMakeLists.txtの古いアーキテクチャゲートを削除し、Arm64ビルド時にもIJWネイティブテストプロジェクトが含まれるようにしました。
変更内容
- src/tests/Interop/CMakeLists.txt: IJWネイティブサブディレクトリ追加時の
CLR_CMAKE_HOST_ARCH_ARM64条件ゲートを削除。Windows対象ビルド時には常にIJWネイティブテストプロジェクト(IjwNativeDll、IjwNativeCallingManagedDllなど)が含まれるように変更 - src/tests/Interop/IJW/Directory.Build.props: プロパティファイルの調整(2行削除)
- src/tests/Interop/IJW/NativeVarargs/IjwNativeVarargs.cpp: ネイティブVarargs実装の拡張(16行追加)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このPRはテストインフラストラクチャの変更であり、ランタイム機能の変更ではありません。Arm64でのIJW(It Just Works)相互運用性テストカバレッジを拡大するもので、テストビルドグラフにこれまで除外されていたネイティブプロジェクトを再度含めることで、プラットフォーム間のテスト一貫性を向上させます。
#130075 Add crossgen2 --strip-il-bodies runtime-async regression test
- 作成者: @kotlarmilos
- 作成日時: 2026年07月01日 11:35:13(UTC)
- マージ日時: 2026年07月02日 13:23:46(UTC)
- ラベル: area-crossgen2-coreclr
概要
crossgen2の--strip-il-bodies最適化がruntime-asyncで非同期Taskメソッドに対して誤ってILを削除していた回帰に対する決定論的なテストを追加します。このテストは、どのメソッドのILを保持・削除すべきかを検証し、非同期Task<T>/ValueTask<T>/Task/ValueTask-returning メソッド、ジェネリックメソッド、およびジェネリック型のメソッドがILを保持し、通常のメソッドと非同期Task<T>/ValueTaskメソッドは削除されることを保証します。
変更内容
- R2RResultChecker.cs: メソッドのILがコンポーネントMSILから削除されているか存在するかを検査するヘルパーメソッド
MethodILIsStripped/MethodILIsPresentを追加 - R2RDriver.cs: crossgen2オプション
--strip-il-bodiesのモデリングサポートを追加 - StripILBodies.cs: 非同期、非同期Task/ValueTask、ジェネリックケースを含む新しいテスト用アセンブリを作成
- R2RTestSuites.cs: runtime-async +
--strip-il-bodiesでコンポジットコンパイルを実行し、IL保持/削除をアサートする新しい[Fact]テストを追加 - Directory.Build.props:
TargetsMobile != true時のモバイル向けTFMに対するUseMonoRuntimeのグローバルデフォルト動作を変更
パフォーマンスへの影響
影響なし(テスト追加のみ)
関連Issue
#129813 #129884 #130025(整合化予定)
その他
このPRはAppleモバイルランタイムパックで配布されるコンポジットReadyToRunイメージのビルド時に適用される--strip-il-bodies最適化のリグレッションテストです。runtime-asyncが有効な場合、ランタイムは非同期Task/ValueTask-returning メソッドのランタイム非同期バリアントをILからコンパイルするため、ILの削除により以前はNullReferenceExceptionが発生していました。
#130059 Fix x86 codegen non-determinism across host architecture
- 作成者: @EgorBo
- 作成日時: 2026年06月30日 23:49:31(UTC)
- マージ日時: 2026年07月02日 00:34:15(UTC)
- ラベル: area-CodeGen-coreclr
概要
x86コードジェネレーションの非決定性を修正します。DecomposeLongCompareで64ビット比較を分解する際、ホストアーキテクチャが対象より広い場合(例:x64ホストでx86向けクロスコンパイル)、定数の上位ビットが破損していました。SetIconValueの代わりにSetValueTruncatingを使用することで、ホストポインタサイズに関わらず一貫した符号拡張を保証し、同じ定数に対してx86エミッタの即値エンコーディングサイズ判定を統一します。
変更内容
- src/coreclr/jit/lower.cpp:
DecomposeLongCompare内でSetIconValue(uint32_t)をSetValueTruncatingに変更(+3/-2行)
パフォーマンスへの影響
改善・コード縮小のみで、回帰なし。PerfScoreへの影響なし。SuperPMIアスメンブリ差分で検証済み。
関連Issue
その他
互換性への影響: なし。修正により、x64ホストからx86向けクロスコンパイル(crossgen2など)で生成されるR2R(Ready-to-Run)イメージが、ネイティブx86ホストでのコンパイル結果と同一になります。
#130058 Migrate more CoreCLR holders to LifetimeHolder<>
- 作成者: @AaronRobinsonMSFT
- 作成日時: 2026年06月30日 22:23:41(UTC)
- マージ日時: 2026年07月02日 13:55:16(UTC)
- ラベル: area-VM-coreclr
概要
CoreCLRのRAII(リソース自動管理)ホルダーを、レガシーなWrapper/SpecializedWrapperパターンから trait ベースのLifetimeHolder<Traits>パターンへ段階的に移行する継続的なリファクタリングです。複数の VM・ユーティリティホルダー(文字列リテラルエントリ、ネイティブライブラリハンドル、メモリマップビュー、PE ファイル、RCW)を新しいパターンに統一し、コード品質と保守性を向上させます。
変更内容
- ホルダー型の移行(内部実装):
StringLiteralEntryHolder→LifetimeHolder<StringLiteralEntryTraits>NativeLibraryHandleHolder→LifetimeHolder<Traits>(LoadNativeLibraryの戻り値をホルダー型に変更し、API境界でのDetach()を一元化)CLRMapViewHolder→LifetimeHolder<Traits>PALPEFileHolder→LifetimeHolder<Traits>NewRCWHolder→LifetimeHolder<NewRCWHolderTraits>(Windows/FEATURE_COMINTEROPのみ)HandleHolder→LifetimeHolder<HandleTraits>(NULLおよびINVALID_HANDLE_VALUEの両方をガード)
- 参照カウント型の更新:
NewTrackerHolderをReleaseHolder<LAHashDependentHashTracker>に置き換え、IncRefCount/DecRefCountをAddRef/Releaseにリネーム
- API 呼び出し側の更新: 各呼び出し側で
Free()/Detach()/Extract()の使用方法を新しいセマンティクスに適合させ、明示的なコンストラクタとムーブセマンティクスを採用 - その他:
inc/holder.hにHandleTraitsとstd::addressofの使用を追加
パフォーマンスへの影響
影響なし。このリファクタリングはコード構造の統一化であり、パフォーマンス特性に直接的な変更はありません。
関連Issue
その他
- 本PR は GitHub Copilot の支援を受けて作成されています
- すべての変更は内部実装に限定され、公開 API への直接的な影響はありません
SuspendImpersonationクラスは手動 RAII を継続するため、ホルダーをドロップして生のハンドルを使用します
#130049 Update the JIT to share the xplat vector tables across platforms
- 作成者: @tannergooding
- 作成日時: 2026年06月30日 18:40:01(UTC)
- マージ日時: 2026年07月02日 22:28:29(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITコンパイラのクロスプラットフォーム(xplat)ベクトル組み込み関数サポートを統一し、単一のテーブルと命令セットに統合するリファクタリングです。約3000行のコード削除を実現し、コード重複を排除することで、将来的にWASMおよびARM64 SVEサポートを追加する際の拡張性を向上させています。
変更内容
- hwintrinsic.cpp: xplat向けの統一テーブルロジックを追加(3078行追加、86行削除)
- hwintrinsicxarch.cpp: x86/x64固有の処理を大幅削減(68行追加、2956行削除)
- hwintrinsicarm64.cpp: ARM64固有の処理を大幅削減(32行追加、1920行削除)
- hwintrinsiclist.h: 新規追加の統一xplat命令セットテーブル(276行)
- hwintrinsiclistxarch.h、hwintrinsiclistarm64.h、hwintrinsiclistarm64sve.h、hwintrinsiclistwasm.h: 各プラットフォーム固有のリスト定義を再構成
- gentree.cpp、gentree.h: 組み込み関数呼び出しノードの処理ロジックを簡潔化
- compiler.h、fgbasic.cpp: 組み込み関数関連の初期化・検証ロジック更新
パフォーマンスへの影響
影響なし(構造的なリファクタリングであり、ランタイム動作は変わらない)
関連Issue
その他
- 変更は2つのコミットに分割:1つ目は汎用リファクタリング、2つ目はWASM基本サポート
- WASMの完全有効化にはプラットフォーム固有の追加作業が必要
- 将来的にさらなる簡素化の余地あり
- 39ファイル中34ファイルがレビュー完了
#130036 Build mobile inner TFMs as CoreCLR in Mono host builds
- 作成者: @kotlarmilos
- 作成日時: 2026年06月30日 14:58:23(UTC)
- マージ日時: 2026年07月02日 15:31:17(UTC)
- ラベル: area-Build-mono
概要
Mono ベースの SDK でビルドする際、マルチターゲットライブラリのモバイルターゲットフレームワーク(-android、-ios、-tvos、-maccatalyst)が誤って Mono ランタイムを選択することを防ぐ変更です。モバイル TFM は CoreCLR のみをサポートしているため、UseMonoRuntime を明示的に false に設定して常に CoreCLR でビルドされるようにします。
変更内容
- Directory.Build.props:
TargetsMobileがtrueでない場合、*-android、*-ios、*-tvos、*-maccatalystターゲットフレームワーク向けのビルドでUseMonoRuntime=falseを強制するルールを追加(+3 行)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
本変更は source-build での Mono 検証レグ(テスト段階)の失敗を回避するためのもので、互換性に関する変更ではありません。モバイルターゲットフレームワークの内部ビルドが Mono ホストビルド環境でも正しく CoreCLR を使用するようになります。
#130006 JIT: stop treating ManagedThreadId helper as constant/pure
- 作成者: @Copilot
- 作成日時: 2026年06月29日 22:15:51(UTC)
- マージ日時: 2026年07月02日 23:21:30(UTC)
- ラベル: area-System.Threading
概要
CORINFO_HELP_GETCURRENTMANAGEDTHREADIDヘルパーをJITの値番号付け(VN)で純粋(pure)な定数操作として扱わない変更です。非同期サスペンション時に実行が別のスレッドで再開される可能性があり、複数の呼び出しが同じ値を返すと仮定することは不正確になるため、この修正が必要です。
変更内容
- src/coreclr/jit/valuenum.cpp:
fgValueNumberJitHelperMethodVNFuncからCORINFO_HELP_GETCURRENTMANAGEDTHREADIDのVNF_ManagedThreadIdマッピングを削除。ただしヘルパー呼び出しVNハンドリング時に非純粋として扱う仕組みは残存。 - src/coreclr/jit/valuenumfuncs.h: 未使用となった
ValueNumFuncDef(ManagedThreadId, 0, false, false)定義を削除。 - src/coreclr/jit/utils.cpp:
HelperCallProperties::init()でCORINFO_HELP_GETCURRENTMANAGEDTHREADIDを非pure(但しno-throw)として分類。 - 回帰テスト: async/regression/managed-thread-id.csプロジェクトを新規追加。
パフォーマンスへの影響
コンパイル時の不正な最適化除去により、ランタイム動作の正確性が向上します。JITがこのヘルパーの呼び出しを重複排除できなくなるため、生成されたコード量がやや増加する可能性がありますが、非同期コンテキストでの誤動作を防止することがより重要です。
関連Issue
その他
- ヘルパーの身元や呼び出し規約(JIT/EEインターフェース)に変更はなし
- インライン化候補の変換パスは変更なし
- ヘルパーはno-throw特性を維持
#129995 Don't retain host probing-path properties in CLR config and AppContext
- 作成者: @elinor-fung
- 作成日時: 2026年06月29日 19:13:07(UTC)
- マージ日時: 2026年07月02日 21:29:32(UTC)
- ラベル: area-VM-coreclr
概要
ホストから提供される4つのプローブパス関連プロパティ(TRUSTED_PLATFORM_ASSEMBLIES、NATIVE_DLL_SEARCH_DIRECTORIES、PLATFORM_RESOURCE_ROOTS、APP_PATHS)をCLR設定ノブとAppContextから削除し、必要時にバインダー/AppDomainの内部状態から再構築することで、メモリ使用量を削減します。特にTPAリストは複製が削除されることで顕著な改善が期待できます。
変更内容
- AppContext.cs: ホストプローブパスプロパティの起動時保存をスキップし、
GetData呼び出し時にQCallを通じて遅延的に値を再構築・キャッシュ - AppContext.CoreCLR.cs: ホストプロパティ識別ロジックとQCallインポートを追加
- exports.cpp: CLR設定ノブ初期化時にプローブパスプロパティをフィルタリングし、AppDomain作成後にワイド文字列コピーを解放
- appdomainnative.cpp/hpp: ホストプロパティ値をバインダー/AppDomain状態から再構築するQCallを実装
- qcallentrypoints.cpp: 新QCallエントリポイントを登録
- RuntimeProperties.cs:
AppContext.GetData経由でのホストプロパティ取得をカバーするテストを追加・更新
パフォーマンスへの影響
メモリ削減(macOS arm64 Release、フレームワーク依存型空コンソールアプリ、プロパティ未クエリ時):
- マネージドメモリ(GC.GetTotalMemory): 52,360 B → 17,792 B(約34 KB、66%削減)
- ネイティブメモリ(mstats().bytes_used): 1,280,797 B → 1,232,368 B(約47 KB、3.8%削減)
注記: 再構築は完全なバイト互換性を保たない。TPAリストは単純名で重複排除され順序が変わり、ホストが空文字列で渡したプロパティはnullとして返される。
関連Issue
その他
- 内部実装変更(ホストとランタイム間の設定伝達メカニズム)
- 公開API(
AppContext.GetData)の動作は維持されるが、返される値の形式(順序・重複排除など)が変わる可能性あり - セキュリティ上の変更なし
#129921 Improve AES-KWP for Windows
- 作成者: @vcsjones
- 作成日時: 2026年06月27日 02:03:45(UTC)
- マージ日時: 2026年07月02日 18:49:16(UTC)
- ラベル: area-System.Security tenet-performance
概要
Windows プラットフォームの AES-KWP (AES Key Wrap with Padding) 実装を最適化するもの。再利用可能な "lite" ECB 暗号を用いることで、ループ内でのハンドル設定/破棄の繰り返しを排除し、5〜20倍のパフォーマンス向上を実現。あわせて、カスタムデリゲート型を汎用的な Func に置き換えることで内部実装を簡潔化。
変更内容
- AesImplementation.Windows.cs: Windows 固有の
EncryptKeyWrapPaddedCore/DecryptKeyWrapPaddedCoreオーバーライドを追加。BasicSymmetricCipherLiteBCrypt(ECB モード) を活用し、ILiteSymmetricCipher.Transform経由で AES-KWP 処理を実施 - Aes.cs: カスタムデリゲート型
KeyWrapEcbTransform<TState>を廃止し、Func<TState, ReadOnlySpan<byte>, Span<byte>, int>に統一。AES-KWP ヘルパーメソッドのシグネチャを更新
パフォーマンスへの影響
著しい改善が確認される(主にペイロード 15 バイト以上):
| サイズ | 実行速度改善 | メモリ割り当て削減 |
|---|---|---|
| 15B | 7.1倍 (6.6μs → 0.93μs) | 12.0倍 (1056B → 88B) |
| 16B | 7.1倍 (6.8μs → 0.96μs) | 12.0倍 (1056B → 88B) |
| 512B | 15.0倍 (210μs → 14μs) | 384倍 (33.8KB → 88B) |
| 4096B | 16.1倍 (1.67ms → 0.11ms) | 3070倍 (270KB → 88B) |
小規模データ (1-8B) では既にメモリ効率が良いため大きな改善なし。メモリ割り当てが入力長に依存した可変から定数量に最適化された点が特徴。
関連Issue
#129911 (Apple プラットフォーム向けの同様の最適化の先行実装)
その他
本変更は #129911 の Windows 対応版。Apple 版と同様のアプローチを採用し、プラットフォーム間の実装一貫性を向上させる。内部 API の簡潔化により保守性も向上。
#129828 Convert nethost to C
- 作成者: @elinor-fung
- 作成日時: 2026年06月25日 00:06:52(UTC)
- マージ日時: 2026年07月02日 17:13:44(UTC)
- ラベル: area-Host
概要
nethost を完全に C 言語に変換し、C++ ランタイム依存を排除するプロジェクトの最終段階です。nethost.cpp を nethost.c に置き換え、既存ライブラリの検出機能を PAL に追加し、fxr_resolver の C++ ラッパーを削除しました。これにより、バイナリサイズが大幅に削減されています(Linux x64: 80.6%削減、macOS arm64: 75.5%削減)。
変更内容
PAL(Platform Abstraction Layer)
- C言語版
pal_get_loaded_library()を追加(既読み込みライブラリの検出、読み込み不要) - Windows/Unix プラットフォーム固有の実装を
pal.windows.c・pal.unix.cに追加 - 既存の C++
pal::get_loaded_libraryは新しい C 版に委譲
fxr_resolver
- C++ のみの実装
try_get_existing_fxrを C に変換(fxr_resolver_try_get_existing_fxr) fxr_resolver.cppの C++ ラッパーを削除し、実装をfxr_resolver.cに統合load_fxr_and_get_delegateテンプレートを新しいヘッダload_fxr_and_get_delegate.hに移動comhostとijwhostをこの新ヘッダ経由で C API を直接使用するよう更新
nethost(メイン変更)
nethost.cppを削除し、nethost.cで実装を置き換え(C 専用 host bits を使用)- RAII
error_writer_scope_tを手動の save/restore に変更
ビルドシステム
hostmiscを C/C++ ソースに分割- C専用の
hostmisc_cオブジェクトライブラリを追加 - CMakeLists.txt を更新して依存関係を修正
パフォーマンスへの影響
バイナリサイズの大幅削減(C++ ランタイム依存排除による)
| プラットフォーム | バイナリ | 削減量 | 削減率 |
|---|---|---|---|
| Linux x64 | libnethost.a | -2,210,820 bytes | -80.6% |
| Linux x64 | libnethost.so | -8,304 bytes | -19.1% |
| macOS arm64 | libnethost.a | -828,952 bytes | -75.5% |
| macOS arm64 | libnethost.dylib | -3,280 bytes | -3.6% |
| Windows x64 | libnethost.lib | -1,273,756 bytes | -43.2% |
| Windows x64 | nethost.dll | -14,336 bytes | -20.1% |
スタティックライブラリの削減率が特に大きく、C++ ランタイム依存排除の効果が顕著です。
関連Issue
その他
- 破壊的変更:C++ ユーザーに向けた API 変更はなし(内部実装の変更)
- 公開 API
get_hostfxr_path()の動作は変わらず、実装言語が C に変更されただけ - C言語への
#129766 [wasm][coreCLR] Dispatch R2R-compiled methods from reflection and UnmanagedCallersOnly paths
- 作成者: @pavelsavara
- 作成日時: 2026年06月23日 19:53:00(UTC)
- マージ日時: 2026年07月02日 11:16:15(UTC)
- ラベル: arch-wasm os-browser area-CodeGen-Interpreter-coreclr
概要
WebAssemblyプラットフォーム(CoreCLR インタプリタ、FEATURE_PORTABLE_ENTRYPOINTS)でR2R(Ready-to-Run)コンパイル済みメソッドをリフレクションとUnmanagedCallersOnly経由で呼び出す際に発生するクラッシュを修正しました。
根本原因は、インタプリタバイトコードが存在しないR2Rメソッドに対してMethodDesc::GetInterpreterCode()がNULLを返し、wasmの線形メモリ読み込みにより無効なオペコードINTOP_INVALIDがディスパッチされていたことです。
修正により、リフレクション経由ではR2Rコードへのフォールバック、UnmanagedCallersOnly経由ではR2Rコードの直接呼び出しが実装されました。
変更内容
calldescrworkerwasm.cpp: リフレクション/CallDescr経由でインタプリタバイトコードがNULLの場合、InvokeManagedMethod(インタプリタ→R2Rサンク)へフォールバックhelpers.cpp:UnmanagedCallersOnly経由でR2Rコード存在時は、R2Rエントリポイントを直接返却(インタプリタを経由しない)method.cpp/method.hpp:GetSingleCallableAddrOfCodeForUnmanagedCallersOnlyメソッドを追加(FEATURE_PORTABLE_ENTRYPOINTS下でGC_TRIGGERS契約)precode_portable.cpp: コード解決ロジック調整prestub.cpp:PortableEntryPoint::EnsureCodeForUnmanagedCallersOnly追加(THROWS; GC_TRIGGERS; MODE_PREEMPTIVE契約)- 下流のインタプリタヘルパーは
NULLポインタ検証のアサーション追加
パフォーマンスへの影響
UnmanagedCallersOnly経由の呼び出しでプレスタブ実行によるGC発生の可能性増加。ただし、既存のSystem.Drawing.Primitivesテスト(2441テスト実行)でILベースラインと同等の結果確認(合格2439、失敗0、スキップ2)。
関連Issue
なし
その他
- 契約ワイデニング:
GetSingleCallableAddrOfCodeForUnmanagedCallersOnlyがプレスタブ実行を許可するため、GC発生とスロー可能性が増加 ExecuteInterpretedMethodFromUnmanagedとExecuteInterpretedMethodWithArgsにアサーション追加され、R2Rメソッド経由での誤用時に暗号的なエラーではなく明確に検出可能- 検証環境:V8上でR2Rビルドされた
System.Drawing.Primitivesテストで確認
#129605 Surface failing crossgen2 comparison dlls in the Helix work item file list
- 作成者: @Copilot
- 作成日時: 2026年06月19日 03:25:25(UTC)
- マージ日時: 2026年07月02日 16:51:18(UTC)
- ラベル: area-ReadyToRun
概要
Crossgen2比較テストの失敗時に、生成されたネイティブ/ReadyToRun DLL(.ni.dll)をHelixの作業項目ファイルリストに表示させることで、テスト失敗時の診断性を向上させます。これにより、アーティファクトがクラッシュダンプ存在時のみに表示されるHELIX_DUMP_FOLDERではなく、常時表示されるHELIX_WORKITEM_UPLOAD_ROOTに配置されます。
変更内容
src/tests/Common/scripts/crossgen2_comparison.py
copy_artifacts_to_dump_folder→copy_artifacts_to_upload_rootに関数名を変更し、出力先をHELIX_DUMP_FOLDERからHELIX_WORKITEM_UPLOAD_ROOTに変更- 関数がアップロード済みファイル名(
base_*.ni.dll、diff_*.ni.dll)を返すよう改修 - テスト失敗時、テスト出力(
<output>)にアップロード済みファイルを記載し、Azure DevOpsの[Tests]タブの失敗テキストでダウンロード対象を直接指示可能に - パストラバーサル対策、ファイル存在確認、
OSErrorハンドリング(失敗時は空リスト返却)を維持
パフォーマンスへの影響
影響なし。diff_.ni.dllはすでにHELIX_WORKITEM_UPLOAD_ROOTに存在しているため、小規模な重複アップロードが生じる可能性がありますが、比較用にbase_/diff_をファイル名で並べることで診断性が向上します。
関連Issue
なし
その他
アップロード容量削減のため、diff_.ni.dllの重複コピーを削除することも検討の余地があります。
#128721 [RyuJit/WASM] Remove the special prolog handling
- 作成者: @SingleAccretion
- 作成日時: 2026年05月28日 19:38:01(UTC)
- マージ日時: 2026年07月02日 13:57:45(UTC)
- ラベル: arch-wasm area-CodeGen-coreclr community-contribution
概要
RyuJit/WASM コンパイラの特別なプロローグ処理を削除し、プロローグ生成ロジックを統一化する変更です。Issue #125200 の修正に対応しており、複数のアーキテクチャ(ARM、ARM64、LoongArch64、RISC-V64、x86/x64、WASM)にわたるJITコンパイラのコード生成部分が簡潔化されます。
変更内容
- codegen.h/compiler.h: プロローグ関連のメソッド定義を削除(計2行削除)
- 各アーキテクチャのcodegenファイル: WASM固有のプロローグ処理フラグを廃止し、共通ロジックに統合
- codegenlinear.cpp: プロローグ生成の条件分岐を簡潔化
- codegenwasm.cpp: WASM特有の処理を削除(-24行)
- codegenxarch.cpp: x86/x64の処理を整理(-21行)
- unwindファイル群: アンワインド情報生成ロジックを統一(各アーキテクチャで同様の簡潔化)
- emit.cpp/emit.h: プロローグ生成の内部実装を整理
- regset.cpp, scopeinfo.cpp: 連動する関連処理を調整
パフォーマンスへの影響
影響なし(コード生成ロジックの統一化のため、実行時動作は変わらない)
関連Issue
その他
- 内部実装の簡潔化であり、公開APIには影響なし
- WASM、ARM系、RISC-V64、LoongArch64を含む複数アーキテクチャに関わる変更のため、各プラットフォームでのテストが必要
#125437 [mobile] Enable NativeAOT library tests on Apple mobile platforms
- 作成者: @kotlarmilos
- 作成日時: 2026年03月11日 12:46:57(UTC)
- マージ日時: 2026年07月02日 16:26:43(UTC)
- ラベル: area-Infrastructure-coreclr os-ios
概要
Apple モバイルプラットフォーム(iOS/tvOS デバイス・シミュレータ、Mac Catalyst)上で NativeAOT ライブラリテストを有効化します。ホストビルドレグで ILC コンパイルを実行し、静的ライブラリを生成した上で、Helix 上で AppleAppBuilder を使用してテスト実行する方式に変更します。これにより、最小限の SmokeTests から System.Runtime、System.Collections、System.Linq、System.Threading などの完全なライブラリテストへと拡大し、モバイルプラットフォーム固有の機能(暗号化、ネットワーク、グローバリゼーション)のテストカバレッジを向上させます。
変更内容
- ビルドスクリプト更新(eng/pipelines/extra-platforms/*.yml): NativeAOT SmokeTests leg から libraries Helix テスト submission へ切り替え。新規に
AllSubsets_NativeAOT[_AppSandbox]leg を追加。 - ILC/AoT 設定(eng/testing/tests.ioslike.targets):
TestNativeAot、TestSingleFile、PublishAotUsingRuntimePackの設定追加。静的ライブラリ出力時に_SuppressNativeLibEventSourceWarningオプトイン。 - Helix プロキシプロジェクト(src/mono/msbuild/apple/data/ProxyProjectForAOTOnHelix.proj): ホストで生成済みの静的ライブラリを検出する
_NativeAotLibraryTestOnHelixプロパティを追加。ホスト上で生成されたスタティックライブラリを利用し、Helix 上での ILC 再実行をスキップ。DirectPInvoke __Internalを無条件で追加し、AppleAppBuilder が生成するマネージドコード側シンボルを静的に解決。 - テストランナー更新(src/libraries/Common/tests/AppleTestRunner/AppleTestRunner.cs): xunit-excludes.txt ファイルの検出ロジック追加。
- 除外テスト設定: System.Runtime、System.Collections、System.Linq、System.Threading、System.Threading.Tasks、System.Net.Http.Functional テストの NativeAoT 除外属性を追加。
パフォーマンスへの影響
影響なし(テストスイートの拡大に伴う CI 実行時間増加を除く)。
関連Issue
その他
- 本 PR は xharness の別 PR(dotnet/xharness#1554)に依存しています。
- NativeAOT の実装はコンパイラ/ILC に関わる内部実装変更です。公開 API の変更はありません。
- Copilot のコード検査で、AppleTestRunner.cs の xunit-excludes.txt 検出ロジックについて、ファイルが見つからない場合に暗黙的に trait フィルタリングが無効化される可能性が指摘されています。
#123534 [browser] Add publish-time telemetry for WebAssembly configuration properties
- 作成者: @Copilot
- 作成日時: 2026年01月23日 09:42:29(UTC)
- マージ日時: 2026年07月02日 18:44:32(UTC)
- ラベル: arch-wasm area-Build-mono os-browser
概要
WebAssembly/Blazor発行時のテレメトリ収集機能を追加しました。グローバリゼーションモード、ブートコンフィグ形状、フィンガープリンティング、プリロード動作、バンドラーフレンドリー設定、ランタイム選択など、主要なWASM発行設定プロパティの有効値をキャプチャして、デフォルト値と互換性判断の改善に活用します。
変更内容
_GatherWasmPublishTelemetryターゲット追加(Microsoft.NET.Sdk.WebAssembly.Browser.targets)WorkloadTelemetryDependsOn拡張性ポイント経由でワークロードテレメトリパイプラインに統合Condition="'$(WasmBuildingForNestedPublish)' != 'true'"で入れ子発行をスキップ- 既存の
WorkloadPublishPropertiesテレメトリイベントにプロパティを出力
10個のプロパティをキャプチャ(正規化された内部値を優先使用)
InvariantTimezone(BlazorEnableTimeZoneSupportから派生)InvariantGlobalization(_WasmInvariantGlobalization)BlazorWebAssemblyLoadAllGlobalizationData(_BlazorWebAssemblyLoadAllGlobalizationData)WasmEnableWebcil(_WasmEnableWebcil)WasmInlineBootConfig(_WasmInlineBootConfig)OverrideHtmlAssetPlaceholders(生の値)WasmFingerprintBootConfig(_WasmFingerprintBootConfig)WasmPreloadAssets(_WasmPreloadAssets)WasmBundlerFriendlyBootConfig(_WasmBundlerFriendlyBootConfig)UseMonoRuntime(生の値)
WorkloadTelemetry.targetsの更新で拡張性ポイントを活性化
パフォーマンスへの影響
影響なし(テレメトリ収集のみで、ビルド/発行プロセスの変更なし)
関連Issue
その他
- PII非収集:設定フラグのみ
- SDK側の対応と同期:dotnet/sdk#55026, dotnet/sdk#55089で対応
- テレメトリプロパティはSDK側のドキュメント(
documentation/project-docs/telemetry.md)と同期が必要