Pull Request on 2026年06月22日

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

注意点

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


目次

  1. #129686 Fix copy-paste error in BFloat16 test
  2. #129680 [main] Source code updates from dotnet/dotnet
  3. #129672 [cDAC] Enable arm32 GC stress + fix code/data pointer type confusion on ARM32
  4. #129668 Fix COM wrapper weak-handle defensive copy in ReferenceTrackerNativeObjectWrapper
  5. #129666 [browser][coreCLR] idempotent lazy download of dll/pdb
  6. #129663 [wasm] Bump chrome for testing - linux: 149.0.7827.155, windows: 150.0.7871.24
  7. #129655 JIT: add fgRemoveUnreachableTry phase
  8. #129652 [ci-fix] Needs review: Fix TensorPrimitives Tan precision tolerance on ARM64 iOS simulator (refs #129045)
  9. #129646 JIT: fix edge likelihoods for loop cloning
  10. #129637 [cDAC] Add FeatureFlags contract, reduce direct global reads in legacy impl, expand NativeAOT descriptor parity
  11. #129635 Rename delegate fields for consistency
  12. #129625 Remove unsafe pointer walk from OptimizedInboxTextEncoder.GetIndexOfFirstCharToEncode
  13. #129591 [browser] Wasm boot JSON: touch a stamp, not the boot JSON itself (fix #129280)
  14. #129561 Bump timeout for runtime-interpreter build job
  15. #129555 Fix wasm R2R JIT validation issues
  16. #129548 Locate crossgen2 by $(CoreCLRConfiguration) in ILCompiler.ReadyToRun.Tests
  17. #129530 Fix JsonSchemaExporter dropping nullability for nullable floating-point composition schemas
  18. #129480 Convert fxr_resolver and its hostmisc dependencies to C
  19. #129460 Add support for new R2RIncompatible flag for runtime tests
  20. #129447 Improve nullability analysis in ValueNumStore::IsKnownNonNull
  21. #129406 [main] Update dependencies from dotnet/xharness
  22. #129405 [main] Update dependencies from dnceng/internal/dotnet-optimization
  23. #129394 Fix OpenSSL X509Chain time validity depending on process time zone
  24. #129285 JIT: remove getUnboxedEntry and getInstantiatedEntry
  25. #129164 [Eventpipe][S390X] Fix Session_Id for s390x
  26. #129147 [cDAC] Implement DacDbi APIs ParseContinuation and GetAsyncLocals
  27. #128982 Validate Dns hostname for embedded null characters
  28. #128700 Fix Arm64 conditional select lowering
  29. #128668 Have IDIV/DIV REX2 and EVEX compatible
  30. #128524 JIT: Switch to rangecheck when profitable
  31. #128384 Compile runtime async versions of synchronous task-returning methods
  32. #128319 Validate uncompressed size up front in ZipArchiveEntry update mode
  33. #128233 [SVE2] CreateWhileWriteAfterRead* and SaturatingExtract*

#129686 Fix copy-paste error in BFloat16 test

概要

BFloat16テストにおけるコピー&ペーストエラーを修正。AIエージェントによるテスト実行中に発見されました。

変更内容

  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Numerics/BFloat16Tests.cs: テストコード内のコピー&ペーストエラーを修正(4行追加、4行削除)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

テスト修正のみであり、実装コードへの変更はありません。


#129680 [main] Source code updates from dotnet/dotnet

概要

dotnet/dotnetリポジトリからの定期的なコードフロー更新(Codeflow PR)です。このPRは、VMR(Virtual Mono Repository)経由で複数のプロジェクト(F#, MSBuild, Runtime)からの最新のソースコード変更と依存関係アップデートを取り込みます。

変更内容

  • ビルド設定: eng/Subsets.props、global.json、CMakeLists.txtの更新
  • バージョン管理: eng/Version.Details.props/xmlの依存関係バージョン更新
  • ネイティブAoTサポート: NativeAotSupported.propsの新規追加(26行)
  • Objective-C相互運用機能: ObjectiveCMarshal関連のヘッダおよびC#実装の更新
    • src/coreclr/System.Private.CoreLib/src/System/Runtime/InteropServices/ObjectiveCMarshal.CoreCLR.cs
    • src/coreclr/vm/interoplibinterface.h
    • src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ObjectiveC/ObjectiveCMarshal.cs

依存関係アップデート:

  • Microsoft.CodeAnalysis関連: 5.9.0-1.26317.104 → 5.9.0-1.26319.105
  • Microsoft.DotNet.Arcade.Sdk等Arcadeツール: 11.0.0-beta.26317.104 → 11.0.0-beta.26319.105
  • NuGet関連: 7.9.0-rc.31804 → 7.9.0-rc.32005
  • System.Text.Json, System.Reflection.Metadata等: 11.0.0-preview.6.26317.104 → 11.0.0-preview.6.26319.105

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはdotnet-maestro[bot]による自動化されたコードフロー更新です。変更の詳細はVMRの比較コミット(a065c06...b756a8d)とソースリポジトリ(fsharp, msbuild, runtime)の各リポジトリでの対応するコミット範囲で確認できます。


#129672 [cDAC] Enable arm32 GC stress + fix code/data pointer type confusion on ARM32

概要

cDAC(Compact Data Access Components)GC ストレステストを ARM32(linux_arm)で有効化し、それに伴い明らかになった命令ポインタ(IP)型の混乱を修正。ARM32 の Thumb ビット(LSB)が IP に含まれているが、cDAC がこれを適切に処理していなかったため、フレーム検証時にランタイムと cDAC の値が不一致になっていた。型システムで TargetPointer → TargetCodePointer に昇格させることで、コンパイル時に型の混乱を防止。

変更内容

  • パイプライン変更: eng/pipelines/runtime-diagnostics.yml に linux_arm を cdacStressPlatforms に追加(1行)

  • 型の昇格(マネージド契約層): 複数のインタフェース・クラスでIP/リターンアドレスを TargetPointer から TargetCodePointer に変更

    • IPlatformContext.InstructionPointer(すべてのアーキテクチャ実装)
    • IPlatformAgnosticContext.InstructionPointer
    • IStackWalk.GetInstructionPointer
    • FrameIterator.GetCurrentReturnAddress
    • 各フレーム型(TransitionBlock、InlinedCallFrame、HijackFrame、SoftwareExceptionFrame、TailCallFrame)のリターンアドレスプロパティ
  • ネイティブデータ記述子: datadescriptor.inc で 5 つの CDAC_TYPE_FIELD を T_POINTER から TYPE(CodePointer) に変更

  • 変換の一元化: GcScanContext.SetSource で CodePointerUtils.AddressFromCodePointer を呼び出し、PCODE から PINSTR への変換を単一箇所で実施

パフォーマンスへの影響

影響なし。型チェックの強化による変更で、ランタイムパフォーマンスへの直接的な影響はない。

関連Issue

なし

その他

  • 互換性: IStackWalk・IPlatformAgnosticContext は Microsoft.Diagnostics.DataContractReader.Abstractions に属する内部/不安定なコントラクト。.NET 11 dev ブランチでは形式的な API レビュー対象外のため、破壊的変更ではない
  • 検証: cDAC ユニットテスト 2571 パス(失敗 0)、パイプラインの全 CdacStressTest レグが成功(新規 linux-arm leg を含む)
  • ARM64 ポインタ認証への対応: CodePointerUtils.AddressFromCodePointer は既に HasArm64PtrAuth に対応できる設計になっており、将来の有効化時に SetSource の単一変換箇所で自動的に対応予定

#129668 Fix COM wrapper weak-handle defensive copy in ReferenceTrackerNativeObjectWrapper

概要

ReferenceTrackerNativeObjectWrapper内のGCHandleフィールドからreadonly修飾子を削除するバグ修正です。GCHandleは可変構造体であり、readonlyフィールドに対して変更メソッドを呼び出すと防御的コピーが作成され、GCHandle.Free()が実際のフィールドを更新できないことが原因で、ファイナライザー/リリース競合時に重複解放が発生していました。

// 変更前
internal readonly GCHandle _nativeObjectWrapperWeakHandle;

// 変更後
internal GCHandle _nativeObjectWrapperWeakHandle;

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ComWrappers.cs
    • ReferenceTrackerNativeObjectWrapper._nativeObjectWrapperWeakHandleフィールドからreadonly修飾子を削除
    • これによりFree()呼び出しが防御的コピーではなく実際のフィールドを更新する

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 重要性: COM相互運用性の正確性に関わる修正で、特にマルチスレッド環境でのファイナライザーとリリース処理が競合する場合のメモリ安全性に影響します
  • 公開API: 該当なし(_nativeObjectWrapperWeakHandleはinternalフィールド)
  • 互換性: 破壊的変更なし

#129666 [browser][coreCLR] idempotent lazy download of dll/pdb

概要

Blazor WebAssemblyで同じ遅延読み込みアセンブリを複数回ロードした場合に誤ったエラーが発生していた問題を修正しました。fetchAssemblyでvirtualPathがnormalizeVirtualPathによって破壊的に変更されることが原因でした。修正後は、loadLazyAssemblyの重複呼び出しは冪等なno-opとなり、2回目以降はfalseを返します。

変更内容

  • src/native/libs/Common/JavaScript/loader/assets.ts

    • lazyAssetFileName()ヘルパー関数を追加。ファイル名部分(最後の/以降)を抽出することで、パス正規化に対するロバスト性を向上
    • DLL/WASMアセットおよびPDBアセットのマッチング時に完全なvirtualPathではなくファイル名で比較
    • 冪等チェック(重複排除)をassemblyNameWithoutExtensionをキーとし、アセット検索前に実施することで、2回目のロードを即座にfalseを返して終了
  • src/mono/wasm/testassets/WasmBasicTestApp/App/wwwroot/main.js

    • loadLazyAssemblyの戻り値(ブール値)をキャプチャ・レポート
    • loadLazyAssemblyTwice=trueクエリパラメータ時に同じアセンブリを2度読み込み、冪等パスを検証
  • src/mono/wasm/Wasm.Build.Tests/LazyLoadingTests.cs

    • LoadLazyAssemblyTwiceIsIdempotent回帰テストを追加
      • 1回目のロードがtrueを返すことを確認
      • 2回目のロードがfalseを返すことを確認(冪等性)
      • 期待されたJSON出力が生成されることを確認
      • エラーメッセージが出力されないことを確認

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正は内部実装の変更で、公開APIへの影響はありません。Blazor WebAssemblyの遅延読み込み機構に関わるランタイムの修正です。


#129663 [wasm] Bump chrome for testing - linux: 149.0.7827.155, windows: 150.0.7871.24

概要

WebAssembly (WASM) テスト環境で使用する Chrome のバージョンを更新しました。Linux 環境を 149.0.7827.155 に、Windows 環境を 150.0.7871.24 にそれぞれ更新しています。

変更内容

  • eng/testing/BrowserVersions.props: Chrome for Testing のバージョン定義を更新
    • Linux: 149.0.7827.155
    • Windows: 150.0.7871.24

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

なし


#129655 JIT: add fgRemoveUnreachableTry phase

概要

JITコンパイラに新しいEH(例外処理)クリーンアップフェーズ fgRemoveUnreachableTry を追加します。このフェーズはメソッドエントリから到達不可能になったtryブロックを持つEH領域を検出・削除し、特にWebAssemblyなどの到達不可能なEHに対して非寛容なコントロールフローを持つプラットフォームでのコンパイルエラーを防ぎます。最適化時のみ実行され、funclet生成直前のEHクリーンアップフェーズセットで一度だけ実行されます。

変更内容

  • src/coreclr/jit/fgehopt.cpp: Compiler::fgRemoveUnreachableTry メソッドを実装。到達不可能なtryエントリを持つEH句を検出し、関連する呼び出しfinally対を再ターゲット化、EHテーブルエントリを削除、DFSを再構築、新たに到達不可能になったブロックを削除。
  • src/coreclr/jit/compiler.cpp: コンパイルパイプラインにフェーズを統合、funclet生成直前に実行。
  • src/coreclr/jit/compiler.h: fgRemoveUnreachableTry メソッドを宣言。
  • src/coreclr/jit/compphases.h: 新しいフェーズID PHASE_REMOVE_UNREACHABLE_TRY を追加。
  • src/coreclr/jit/jitconfigvalues.h: DEBUGオーバーライド用設定スイッチ JitEnableRemoveUnreachableTry を追加。

パフォーマンスへの影響

影響なし。本フェーズは既存のEHクリーンアップ処理の一部として統合されるもので、新たな常駐オーバーヘッドは生じません。むしろ到達不可能なEH領域を事前に除去することで、後続のコンパイルステージでの不要な処理を削減します。

関連Issue

なし

その他

  • 非最適化時は不要(インポート終了時に到達不可能なtryが既に削除されるため)
  • DEBUGビルドでJitEnableRemoveUnreachableTry 設定を使用してフェーズを制御可能
  • 内部JITランタイム実装の変更であり、公開APIには影響なし

#129652 [ci-fix] Needs review: Fix TensorPrimitives Tan precision tolerance on ARM64 iOS simulator (refs #129045)

概要

ARM64 iOS simulator上でTensorPrimitives.Tanの精度許容値が不足していた問題を修正します。ベクトル化されたTan実装がスカラーT.Tan比較で47 ULPの乖離を示していたため、FMA対応時の許容値をnull(デフォルト1 ULP)から明示的に緩い値に変更します。

変更内容

  • src/libraries/System.Numerics.Tensors/tests/TensorPrimitives.Generic.cs:
    • trigTolerance設定を修正:FMA対応時にnullから明示的な許容値(Float: 1e-5f、Double: 1e-14)に変更
    • [ActiveIssue("#124344")]注釈をSpanDestinationFunctions_ValueRangeテストから削除し、Apple Mobile CoreCLRで再度実行を有効化

パフォーマンスへの影響

影響なし。テスト許容値の調整のみであり、実装またはランタイムパフォーマンスへの変更はありません。

関連Issue

#129045(Root Cause) #129226(関連PR - ActiveIssue追加) #128408(疑わしい回帰変更 - テスト除外削除)

その他

重要な注記:

  • このPRはAI/Copilotが生成したドラフトであり、ビルド検証されていません(環境が.NET 11 SDKを欠落)
  • Double精度の許容値(1e-14)は推定値で、実機での確認が必要です
  • Asin、Cos、Sinも同じtrigToleranceを使用するため、これらについても暗黙的にカバーされます
  • CosPiとの一貫性のため、FMA対応時には1e-5f許容値パターンを採用しています

#129646 JIT: fix edge likelihoods for loop cloning

概要

ループクローニング時のエッジ尤度(edge likelihood)計算が不正確だった問題を修正しました。以前のコードは高速クローン(fast clone)に到達するために通過する必要のある条件分岐の総数を考慮していなかったため、各エッジの尤度が過度に高く推定されていました。特に入れ子ループのクローニング時にプロファイル情報が不正に膨張する問題が発生していました。修正内容は、高速クローンに到達するまでに通過する必要のある条件分岐数をカウントし、それに基づいて正しい尤度を計算するようにしたものです。

変更内容

  • src/coreclr/jit/loopcloning.cpp: エッジ尤度計算ロジックを修正。条件分岐数を考慮した尤度計算アルゴリズムを実装(+29行、-7行)
  • src/coreclr/jit/loopcloning.h: 尤度計算関連の関数シグネチャまたはヘッダ定義を更新(+4行、-1行)

パフォーマンスへの影響

プロファイル情報の精度向上により、JITコンパイラの最適化がより正確な統計情報に基づいて実行される可能性があります。これにより、ループクローニング最適化の効果がより適切に発揮されることが期待されます。

関連Issue

なし

その他

  • JITコンパイラの内部実装(loopcloning)に対する修正で、公開APIへの影響はありません
  • 破壊的変更ではなく、既存の挙動を正確にする改善です

#129637 [cDAC] Add FeatureFlags contract, reduce direct global reads in legacy impl, expand NativeAOT descriptor parity

概要

cDAC(CoreDump Diagnostic Access Component)に新しい FeatureFlags コントラクトを追加し、フィーチャーフラグ判定の一元化を実現します。同時に、GCヒープ分析に関するグローバルオプションの柔軟性を向上させ、CoreCLRとNativeAOTのデータディスクリプタ間の互換性を拡大します。

// 新しいFeatureFlagsコントラクトの使用例
bool isEnabled = target.Contracts.FeatureFlags.IsEnabled(RuntimeFeature.PortableEntrypoints);

変更内容

  • FeatureFlagsコントラクト(新規): IFeatureFlagsインターフェースとFeatureFlags_1実装を追加。グローバルが存在しないまたは値が0の場合、フィーチャーは無効と判定
  • CoreCLRデータディスクリプタ: フィーチャーフラググローバルを有効時のみ出力(#elseゼロ値分岐削除)
  • レガシー実装の整理: ExecutionManagerCore、GC_1、SOSDacImplの直接ReadGlobal呼び出しをIFeatureFlags.IsEnabled()に統一
  • GCヒープ分析グローバルをオプション化: InternalRootArray、InternalRootArrayIndex、HeapAnalyzeSuccessをnullable化し、存在しないビルドに対応
  • NativeAOTディスクリプタ拡張: RuntimeInstanceとTypeManagerの型ディスクリプタ、g_pTheRuntimeInstanceグローバル、StressLog.ModuleOffsetフィールドを追加。Loader、ExecutionManager、SyncBlockなど複数のコントラクト宣言を追加

パフォーマンスへの影響

CoreCLRデータディスクリプタのサイズが削減(不要なゼロ値グローバル削除)。ランタイム動作への顕著なパフォーマンス変化なし。

関連Issue

なし

その他

互換性に関する注記: Copilotレビュー時に指摘された通り、古いランタイム・ダンプでFeatureFlagsコントラクトが宣言されていない場合、Target.Contracts.FeatureFlags呼び出しがNotImplementedExceptionを発生させる可能性があります。ExecutionManagerCoreとExecutionManagerCore.EEJitManagerでは、フィーチャーが無効の場合への互換性フォールバック(レガシーグローバル直接読み込み)が推奨されています。

FeatureFlags.md設計ドキュメントが追加され、コントラクト仕様が公開されました。


#129635 Rename delegate fields for consistency

  • 作成者: @Copilot
  • 作成日時: 2026年06月19日 20:06:15(UTC)
  • マージ日時: 2026年06月22日 04:29:09(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

デリゲート型のバッキングフィールド名を実装の意図に合わせてリネームするコード一貫性向上の変更です。CoreCLRとNativeAOTの両ランタイムおよび関連ツール全体でフィールド名を統一します。

変更内容

  • CoreCLR VM層: DelegateObjectの_methodBaseを_helperObjectにリネーム(src/coreclr/vm/object.h、corelib.h、comdelegate.cpp)
  • CoreCLR BCL層: Delegate.CoreCLR.csとMulticastDelegate.CoreCLR.csで_methodBaseから_helperObjectへの参照を更新
  • NativeAOT BCL層: Delegate.csで_firstParameter→_target、_functionPointer→_methodPtrにリネーム(60行の変更)
  • ツール層: JIT/AOT関連ツール(CorInfoImpl.cs、DelegateMethodILEmitter.cs、TypePreinit.cs)のフィールド名ルックアップとレイアウトコメントを新名称に更新

パフォーマンスへの影響

影響なし。これはコード整理・一貫性向上の変更で、メモリレイアウトやオフセットは変更されません。

関連Issue

なし

その他

  • これは内部実装の変更で、公開APIには影響しません
  • フィールドのメモリレイアウト・オフセットは保持されているため、バイナリ互換性に影響しません
  • CoreCLRとNativeAOT間でのフィールド名の一貫性が向上します

#129625 Remove unsafe pointer walk from OptimizedInboxTextEncoder.GetIndexOfFirstCharToEncode

概要

OptimizedInboxTextEncoder.GetIndexOfFirstCharToEncodeメソッドからunsafeポインタ走査を削除し、span スライシングとアンローリングループに置き換えました。動作変更なし。JITコンパイル時に範囲チェックが除去されることを検証済みです。

変更内容

  • src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/OptimizedInboxTextEncoder.cs
    • fixedポインタを使用した8倍アンローリング文字スキャンを削除
    • ReadOnlySpan<char>.Slice()とアンローリングループを使用した実装に置き換え
    • 既存の高速パス(#if NET配下のIndexOfAnyExcept)と-1返却規約を保持
    • unsafeキーワードの削除により安全性を向上

パフォーマンスへの影響

影響なし(同等のパフォーマンスを維持)

JITコンパイラが範囲チェックを効果的に除去し、ポインタベースのアプローチと同等の最適化結果が得られることが確認されています。

関連Issue

なし

その他

  • このPRはGitHub Copilotの支援を受けて作成されました
  • メソッドの戻り値の規約は変更されません(エンコード対象の最初の文字のインデックスを返すか、存在しない場合は-1を返す)

#129591 [browser] Wasm boot JSON: touch a stamp, not the boot JSON itself (fix #129280)

  • 作成者: @lewing
  • 作成日時: 2026年06月18日 19:13:25(UTC)
  • マージ日時: 2026年06月22日 16:54:32(UTC)
  • ラベル: area-Build-mono

概要

WebAssembly Browser MSBuildターゲットにおいて、ブートJSON生成時のタイムスタンプ処理を改善し、マルチビルドにおける不要な再圧縮を防止します。従来はブートJSON自体をタッチしていたため、下流の静的Webアセット圧縮パイプラインで誤ったキャッシュ判定が生じていました。新しく「完了」スタンプファイルを導入し、MSBuildの増分ビルドチェックを正確に保ちながら、ブートJSONのタイムスタンプを内容に基づく値のままで保持します。

変更内容

  • _WriteBuildWasmBootJsonFileとGeneratePublishWasmBootJsonのOutputs=を、直接的なブートJSON参照からwasm-bootjson-{build,publish}.complete.stampファイルに変更
  • スタンプファイルのタッチ処理を追加(ブートJSON自体ではなく)
  • スタンプファイルをFileWritesで追跡(ビルドラッパーは更新済み、パブリッシュラッパーは今後対応予定)

ファイル変更:

  • src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets (+26/-10)

パフォーマンスへの影響

2回目以降のビルド時における不要な再圧縮を防止。以前はGZipCompressがタイムスタンプ比較(strict <)により誤って再圧縮を判定していたため、_BuildCopyStaticWebAssetsPreserveNewestでビルド失敗が発生していました。本修正により、同一内容のブートJSONではタイムスタンプが変わらないため、不要な圧縮処理がスキップされ、ビルド時間が短縮されます。

関連Issue

#129280

その他

  • この修正は#118637で導入されたArtifactWriter.PersistFileIfChangedの保護を、#125367の<Touch>により失われたものを復旧するものです
  • _ConvertBuildDllsToWebcil(line 431)も同様の<Touch>パターンを使用しており、同じカスケード問題に露出している可能性がありますが、本PRでは未対応です
  • dotnet/sdkでの防御的施策として、GZipCompress/BrotliCompressのタイムスタンプ比較を<から<=に変更することで、静的Webアセットパイプライン全体の堅牢性向上が検討されています

#129561 Bump timeout for runtime-interpreter build job

概要

CoreCLRインタープリタパイプラインのビルドジョブのタイムアウト時間を60分から120分に延長します。Windows ARM64などの遅いエージェント上でチェック済みプロダクトビルドが完了するのに十分な時間を確保することが目的です。他のランタイムパイプラインと同じ120分の設定に統一します。

変更内容

  • eng/pipelines/coreclr/interpreter.yml: チェック済みビルドジョブのタイムアウトを120分に設定
  • eng/pipelines/coreclr/interpreter.yml: コメントセクションヘッダを「Checked JIT test runs」から「Checked Interpreter test runs」に修正(パイプラインの動作仕様に合致させるため)

パフォーマンスへの影響

影響なし(ビルドパイプラインの設定変更であり、ランタイムパフォーマンスへの直接的な影響はありません)

関連Issue

なし

その他

ビルドインフラストラクチャの設定変更です。.NET開発者の開発環境やアプリケーション動作には直接影響しません。


#129555 Fix wasm R2R JIT validation issues

概要

WebAssembly (Wasm) JIT/R2R コード生成の検証エラーと assert 失敗を修正するPRです。Wasm 呼び出しシグネチャ構築の改善、各JITフェーズでの Wasm 特有の処理追加、ABI型付けの改善により、Wasm コンパイル時の互換性問題を解決します。

変更内容

  • codegenwasm.cpp: Wasm 呼び出しシグネチャ構築の調整と引数カウント検証(Wasm エンジンの1000パラメータ制限に対応)
  • gentree.cpp: GT_FRAME_SIZE を Wasm の use-edge 反復中にリーフノードとして扱う
  • lower.cpp: 単一レジスタ構造体呼び出しストアの Wasm ABI 型付けを改善、パラメータレジスタローカル用に ABI セグメント幅を保持
  • fgwasm.cpp: try-leave ターゲット処理の改善(Try/ExnRefWrapper スキップ、明示的br発行)、例外参照ラッパーの拡張、ブロック区間を Start で ソート
  • block.cpp: Try 終了ブロック区間のソート対応
  • vm/codeman.cpp: Wasm R2R で IsFilterFunclet の低速パスを使用(Wasm はアンワインドデータ内で personality ルーチンを使用しない)

パフォーマンスへの影響

影響なし(バグ修正と検証対応のため)

関連Issue

#129341、#129497

その他

このPRは複数の Wasm 特有の処理を追加することで、JIT 各フェーズでの Wasm コンパイル時のアサーション失敗と検証エラーを解決する包括的な修正です。Wasm エンジンの制限(パラメータ数1000など)を考慮した実装限界チェックが導入されています。


#129548 Locate crossgen2 by $(CoreCLRConfiguration) in ILCompiler.ReadyToRun.Tests

  • 作成者: @jtschuster
  • 作成日時: 2026年06月17日 23:51:21(UTC)
  • マージ日時: 2026年06月22日 16:40:13(UTC)
  • ラベル: area-ReadyToRun

概要

ILCompiler.ReadyToRun.Tests プロジェクトで、crossgen2 と wasm JIT の位置解決が test project の Configuration に依存していた問題を修正。CoreCLR artifacts と同じ $(CoreCLRConfiguration) / $(CoreCLRArtifactsPath) キーを使用するように統一することで、開発環境でテストプロジェクトと CoreCLR を異なる Configuration でビルドする際の問題を解決します(CI では影響なし)。

変更内容

  • ILCompiler.ReadyToRun.Tests.csproj:
    • crossgen2_inbuild ProjectReference に SetConfiguration で $(CoreCLRConfiguration) を設定し、CoreCLR Configuration での publish を強制
    • wasm JIT copy 先を $(RuntimeBinDir) から $(CoreCLRArtifactsPath) に変更
    • R2RTest.Crossgen2Dir ランタイムオプションを CoreCLR artifacts 位置に更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は CI では no-op です(Configuration == CoreCLRConfiguration)。開発環境での利便性向上が主目的で、テストプロジェクトを CoreCLR と同じ Configuration で強制ビルドする必要をなくします。


#129530 Fix JsonSchemaExporter dropping nullability for nullable floating-point composition schemas

  • 作成者: @Copilot
  • 作成日時: 2026年06月17日 16:32:45(UTC)
  • マージ日時: 2026年06月22日 18:53:20(UTC)
  • ラベル: area-System.Text.Json

概要

JsonSchemaExporterがIEEE浮動小数点型(double?、float?、Half?)でJsonNumberHandling.AllowNamedFloatingPointLiteralsを使用する場合、anyOfスキーマとしてエクスポートされる際にnull値の受け入れをドロップするバグを修正しました。修正後は、{"anyOf":[{"type":["number","null"]},{"enum":["NaN","Infinity","-Infinity"]}]}のように正しくnullabilityを保持します。

変更内容

  • JsonSchemaExporter.cs: anyOfスキーマを伴うnullable値型のハンドリングを追加。IEEE浮動小数点型コンバーターとAllowNamedFloatingPointLiteralsの両方が存在する場合、nullを数値型ブランチのtypeキーワードに統合
  • JsonConverter.cs: 新しいinternal virtual bool IsIeeeFloatingPointConverterプロパティを追加(内部実装)
  • DoubleConverter.cs、SingleConverter.cs、HalfConverter.cs: IsIeeeFloatingPointConverterをtrueにオーバーライド
  • JsonSchemaExporterTests.TestTypes.cs: double?、float?、Half?および nullable浮動小数点プロパティを持つPOCOの回帰テストを追加
  • JsonSchemaExporterTests.cs(SourceGeneration): ソース生成コンテキストに新規テスト型を追加

パフォーマンスへの影響

影響なし

関連Issue

#129530

その他

  • 破壊的変更なし。公開APIに変更なく、内部実装の修正です
  • Debug.Assert文が追加され、IEEE浮動小数点型のanyOfスキーマ構造の検証が強化されました
  • 修正により、AllowNamedFloatingPointLiterals使用時のnullable浮動小数点型がJSON Schema/OpenAPI仕様に正しく準拠します

#129480 Convert fxr_resolver and its hostmisc dependencies to C

  • 作成者: @elinor-fung
  • 作成日時: 2026年06月16日 21:24:22(UTC)
  • マージ日時: 2026年06月22日 17:32:57(UTC)
  • ラベル: area-Host

概要

corehost スタックの C++ から C への段階的な変換の一環として、fxr_resolver と依存する hostmisc の PAL/utils ヘルパーを C に変換します。既存の C++ エントリーポイントは薄いラッパーとして維持され、実装は C レイヤーに委譲されます。これにより、複数プラットフォーム(Windows/Unix)でバイナリサイズが大幅に削減されます。

変更内容

  • fxr_resolver: fxr_resolver.c に C 実装を追加し、fxr_resolver.h で C 互換 ABI を公開。fxr_resolver.cpp は C 実装へのマーシャリングを行う C++ ラッパーに変更
  • hostmisc pal/utils: Windows/Unix 向け C PAL 実装(パス操作、ファイル存在確認、レジストリ参照、readdir など)を追加。C++ ラッパーは新しい C API に委譲
  • ビルド構成: CLR_CMAKE_TARGET_ARCH_UPPER をビルドシステムに追加し、fxr_resolver.c を corehost および singlefilehost ビルドに組み込み
  • configure.h.in: CURRENT_ARCH_NAME_UPPER 定数を追加

パフォーマンスへの影響

バイナリサイズの大幅削減(C++ から C への変換による):

  • Windows x64: apphost −8.99%、nethost −18.13%、ijwhost −12.80%、comhost −8.36%、dotnet −7.66%
  • macOS arm64: apphost −18.17%、libnethost.dylib −19.19%、dotnet −2.32%
  • Linux x64: apphost −33.4%、dotnet −29.1%、libnethost.so −36.2%

Linux での削減率が特に顕著です。

関連Issue

#126367(corehost C 変換親タスク)、#128420(trace と fx_ver の変換)

その他

  • 内部実装の変更のため公開 API への破壊的変更なし
  • C 実装により、メモリリーク管理と確保メモリ解放の責務が明確化
  • 複数プラットフォーム向けに実装されており、プラットフォーム固有コード(WOW64/Rosetta 検出など)も含む

#129460 Add support for new R2RIncompatible flag for runtime tests

概要

ReadyToRun (R2R) / CrossGen2 パイプラインでのテスト実行をスキップするための新しい R2RIncompatible フラグをランタイムテストに追加します。既存の CrossGenTest プロパティは R2R コンパイルを無効化するだけでしたが、このフラグは RunCrossGen2 が設定されている場合にテスト実行そのものをスキップしてテストの干渉を防ぎます。

変更内容

  • CLRTest.CrossGen.targets: R2RIncompatible=true かつ RunCrossGen2 設定時にテスト実行をスキップするプリコマンド(bash/cmd)を生成スクリプトに注入(+19行)
  • SystemCoreLibDirectory.csproj: CrossGenTest=false から R2RIncompatible=true に変更し、R2R パイプラインでの実行を適切に防止(RequiresProcessIsolation は継続)
  • ドキュメント更新: test-configuration.md と disabling-tests.md で新しいプロパティを記載

パフォーマンスへの影響

影響なし

関連Issue

#129046、#129178 にて前回の試行が CrossGenTest の動作の誤解釈に基づいていたことが指摘されました。

その他

  • R2RIncompatible プロパティ使用時は RequiresProcessIsolation が必須です
  • このフラグはテストランナーがテストの実行そのものをスキップするため、フレームワークの R2R コンパイルを防ぎつつランタイムテストの干渉を確実に回避できます
  • SystemCoreLibDirectory テストはコアライブラリディレクトリ設定に関連しており、R2R パイプラインでの実行では不適切な動作につながるため、この修正で正しく処理されます

#129447 Improve nullability analysis in ValueNumStore::IsKnownNonNull

  • 作成者: @EgorBo
  • 作成日時: 2026年06月15日 23:45:29(UTC)
  • マージ日時: 2026年06月22日 19:42:32(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITのValueNumStore::IsKnownNonNull メソッドを改善し、nullability分析を強化しました。VN(値番号)の正規化とパターン認識を拡張することで、より積極的なnull-check除去が可能になります。

SPMI測定で80kbのコード削減を達成しており、以下のようなケースで冗長なnullcheckが削除されます:

string Foo(Dictionary<string, string> map) => map["some string key"];

static void Test(MyStruct[] arr, int i)
{
    ref MyStruct x = ref arr[i];
    if (i > 10)
    {
        _ = x.Y; // 冗長なnullcheckが除去される
    }
}

変更内容

  • src/coreclr/jit/valuenum.cpp: IsKnownNonNull メソッドを改善

    • 無効なVN(NoVN)の早期リターン処理を追加
    • reaching-VN walk前に定数オフセットをVNから削除(offset peeling)
    • VNF_PtrToArrElem パターンをknown-non-nullとして認識
    • fgIsBigOffsetで判定される大きなオフセットについてはベイルアウト
  • src/coreclr/jit/valuenumfuncs.h: 関連する定義を微調整

パフォーマンスへの影響

SPMI測定により80kbのコード削減を確認。より積極的なnull-check除去により、JIT生成コードのサイズが削減され、実行速度の改善が期待されます。

関連Issue

なし

その他

本変更はJIT内部実装(コンパイラ最適化)の改善であり、公開APIへの影響はありません。


#129406 [main] Update dependencies from dotnet/xharness

概要

dotnet/xharnessの依存関係を更新するPull Requestです。Microsoft.DotNet.XHarness関連パッケージを11.0.0-prerelease.26301.2から11.0.0-prerelease.26319.2にアップデートします。

変更内容

  • eng/Version.Details.props: バージョン情報の更新(3行変更)
  • eng/Version.Details.xml: XHarness依存関係の詳細情報を更新(6行変更)
    • Microsoft.DotNet.XHarness.CLI
    • Microsoft.DotNet.XHarness.TestRunners.Common
    • Microsoft.DotNet.XHarness.TestRunners.Xunit
  • .config/dotnet-tools.json: ツールバージョンの更新(1行変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは自動依存関係更新(dotnet-maestro[bot]による)です。xharnessはテスト実行フレームワークであり、主にテスト環境の改善が期待されます。


#129405 [main] Update dependencies from dnceng/internal/dotnet-optimization

概要

dotnet-optimizationリポジトリからの依存関係を更新するPull Requestです。MIBC(Minimal Incremental Basic Block Count)ランタイム最適化パッケージとPGO(Profile-Guided Optimization)CoreCLRパッケージが、バージョン1.0.0-prerelease.26276.2から1.0.0-prerelease.26317.1に更新されました。

変更内容

  • eng/Version.Details.props: 依存関係バージョン情報を更新(+6/-6行)
  • eng/Version.Details.xml: 依存関係の詳細定義を更新(+12/-12行)
  • 更新対象パッケージ:
    • optimization.linux-arm64.MIBC.Runtime
    • optimization.linux-x64.MIBC.Runtime
    • optimization.windows_nt-arm64.MIBC.Runtime
    • optimization.windows_nt-x64.MIBC.Runtime
    • optimization.windows_nt-x86.MIBC.Runtime
    • optimization.PGO.CoreCLR

パフォーマンスへの影響

MIBC(コードレイアウト最適化)およびPGO(プロファイルガイド最適化)パッケージの更新のため、ランタイムの実行時パフォーマンス向上が期待されます。ただし、具体的なベンチマーク数値は提供されていません。

関連Issue

なし

その他

  • 自動依存関係更新PR(dotnet-maestroボット作成)
  • ビルド日時: 2026年6月17日 20:00:42 UTC
  • 内部的な最適化パッケージの定期的なメンテナンス更新

#129394 Fix OpenSSL X509Chain time validity depending on process time zone

概要

OpenSSL X509Chain検証時、プロセス実行中のタイムゾーン変更により証明書の時間有効性判定が不安定になるバグを修正しました。従来は検証時刻をローカル時間の分解要素として渡していたため、.NETのキャッシュされたタイムゾーンとlibc のタイムゾーンが異なる場合に判定が反転していました。修正後はUTC UnixタイムスタンプをX509_VERIFY_PARAM_set_time に直接渡すことで、タイムゾーン変更の影響を排除しています。

変更内容

  • Interop.Crypto.cs: X509StoreSetVerifyTime のシグネチャを DateTime から DateTimeOffset に変更し、ToUnixTimeSeconds() で UTC Unix タイムスタンプを渡すように修正
  • openssl.c: ネイティブ関数 CryptoNative_X509StoreSetVerifyTime を int64_t のUnix時刻を受け取るように修正。mktime() による時刻変換を削除
  • openssl.h: ネイティブAPI シグネチャを更新
  • ChainPal.OpenSsl.cs: 検証時刻のローカル時間への正規化を廃止
  • OpenSslX509ChainProcessor.cs: 検証時刻を DateTimeOffset として保持
  • ChainTests.TimeZone.Linux.cs: リグレッションテストを追加(TZ 環境変数を用いた子プロセスでのタイムゾーン変更テスト)

パフォーマンスへの影響

影響なし

関連Issue

#109039

その他

  • 公開API(X509ChainPolicy.VerificationTime)への変更なし(内部実装のみ)
  • Windows・macOS への影響なし。OpenSSL/Linux環境のみに対する修正
  • OpenSslCrlCache の時刻読み取りは同じローカル時間パスを使用していますが、本PRの対象外
  • Copilotのレビューでは、32ビットtime_tプラットフォームへのint64_tキャストによるオーバーフロー検証が未実装という指摘あり

#129285 JIT: remove getUnboxedEntry and getInstantiatedEntry

概要

JIT/EE インターフェースから getUnboxedEntry と getInstantiatedEntry API を削除し、アンボックス化エントリ情報を resolveVirtualMethod を通じてプロット直します。これにより、将来的に共有ジェネリック型の仮想化解除時にランタイムルックアップとアンボックススタブの組み合わせを統一的に処理できるようにします。

変更内容

  • CoreCLR VM層 (jitinterface.cpp): デバーチャル化結果にアンボックスメソッドハンドルを設定
  • JIT/EE インターフェース定義 (corinfo.h): 2つの API を削除し、解決済みトークンの新しいアンボックス動作を文書化
  • JIT変換ロジック (importercalls.cpp, indirectcalltransformer.cpp): 解決済みトークンとシグネチャ検査を使用してアンボックス変換ロジックを統一
  • インラインメタデータ (inline.h): 独立したアンボックスエントリハンドルストレージを削除
  • インターフェースバージョン (jiteeversionguid.h): 破壊的API変更によるGUID更新
  • SuperPMI ツール (superpmi/**): 記録/リプレイインフラから2つのAPI呼び出しと関連するパケット定義を削除
  • 生成コード (*_generated.* ファイル): 削除されたAPI用のコールバック/ラッパーメソッドを削除
  • .NET相互運用層 (CorInfoImpl.cs, ThunkInput.txt): マネージ相互運用とサンク生成入力から削除されたAPI を更新

パフォーマンスへの影響

影響なし(リファクタリングにより既存機能を保持)

関連Issue

なし

その他

これは 破壊的変更 です。JIT/EE インターフェースの公開API (ICorJitInfo) から2つのメソッドが削除されたため、バージョニングGUID が更新されています。カスタム JIT ホスト実装は、アンボックス情報を resolveVirtualMethod の出力 (resolvedTokenDevirtualizedUnboxedMethod) から取得するよう更新が必要です。


#129164 [Eventpipe][S390X] Fix Session_Id for s390x

概要

S390X(IBM System z大型コンピュータアーキテクチャ)でのEventPipeセッション終了時に、StopTracingCommandのペイロードに含まれるsession_idがエンディアン順序を正しく変換されないため、トレーシングが無限に継続する問題を修正しました。dotnet-gcdumpから送信されるIPC通信時に、session_idが正しい形式で渡されていなかった点を改善しています。

変更内容

  • src/native/eventpipe/ds-eventpipe-protocol.c
    • StopTracingCommand処理時のsession_idのエンディアン順序変換ロジックを追加(+32行)
    • 既存の変換処理を修正(-2行)

パフォーマンスへの影響

影響なし(バグ修正のため)

関連Issue

#129164

その他

  • このバグはS390Xアーキテクチャ固有の問題で、エンディアンの違いに関連しています
  • EventPipe/IPC通信の内部実装(ネイティブレイヤー)の修正のため、公開APIへの影響はありません

#129147 [cDAC] Implement DacDbi APIs ParseContinuation and GetAsyncLocals

  • 作成者: @rcj1
  • 作成日時: 2026年06月09日 01:03:39(UTC)
  • マージ日時: 2026年06月22日 20:55:44(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDAC(DataContractReader)スタックを拡張して、継続オブジェクト(ContinuationObject)と非同期デバッグ情報を読み取るAPIを追加し、DacDbiインターフェース経由でParseContinuationとEnumerateAsyncLocalsを実装しました。これにより、非同期メソッドのデバッグ時に継続情報と非同期ローカル変数を効率的に取得できるようになります。

変更内容

  • cDAC Object契約:ContinuationObjectとAsyncResumeInfoの読み取り対応、GetContinuationInfoメソッド追加
  • cDAC DebugInfo契約:AsyncInfoチャンクをデコードして中断ポイントとキャプチャされたローカル変数を抽出
  • DacDbiインターフェース:リスト返却型のGetAsyncLocalsをコールバックベースのEnumerateAsyncLocalsに置き換え
  • ネイティブ側:dacdbi.idlとdacdbiinterface.hを更新、DAC実装でParseContinuationとEnumerateAsyncLocalsを実装
  • Remote Side(RS):EnumerateAsyncLocalsを呼び出して結果をCQuickArrayList<AsyncLocalData>に累積
  • DataDescriptor:ContinuationObjectフィールドとAsyncResumeInfo型の記述子追加
  • テスト:IObject.GetContinuationInfoの動作確認テスト(resume情報有無)追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

Copilot指摘の潜在的な問題:

  1. EnumerateAsyncLocalsのstateパラメータが符号付きintへのキャストにより、0x80000000以上の値でオーバーフロー可能。ネイティブDAC実装では符号なしで処理されているため、一貫性確保が必要。
  2. ParseContinuationが成功パス時、読み取り後の例外発生時に出力ポインタの未初期化可能性。他メソッドの様に事前初期化を推奨。

#128982 Validate Dns hostname for embedded null characters

  • 作成者: @Copilot
  • 作成日時: 2026年06月04日 11:51:33(UTC)
  • マージ日時: 2026年06月22日 11:22:11(UTC)
  • ラベル: area-System.Net

概要

Dns.GetHostEntryおよび関連メソッドで、ホスト名に埋め込まれたヌル文字(\0)を事前に検証し、ArgumentExceptionをスローするように改善しました。ネイティブリゾルバー(getaddrinfo/gethostbyname)へ渡される前に無効なホスト名を拒否することで、ネイティブレイヤーでの暗黙的な文字列切り詰めと混乱したエラーを防ぎます。

// 修正前: 暗黙的に"foo"に切り詰められ、OSリゾルバーから SocketException が発生
Dns.GetHostEntry("foo\0bar");

// 修正後: ArgumentException をスロー
// System.ArgumentException: The host name contains an invalid character. (Parameter 'hostName')

変更内容

  • Dns.cs — Dns.ValidateHostNameメソッドにContains('\0')チェックを追加。同期・非同期の両コードパスで共通の検証漏斗として機能し、GetHostEntry、GetHostAddresses、そのAsync/Beginバリアント、および廃止予定のオーバーロード(GetHostByName/Resolve)をカバーします。IPリテラル高速パスは影響を受けません。
  • Strings.resx — net_hostname_invalid_characterリソース文字列("The host name contains an invalid character.")を追加。将来の無効文字検証に再利用可能な汎用的な表現です。
  • GetHostEntryTest.cs — DnsGetHostEntry_NullCharacterInName_ThrowsArgumentExceptionテオリーを追加。ヌル文字のパターン(先頭・末尾・埋め込み)をすべてのエントリポイント(同期、Task非同期、APM)で検証します。

パフォーマンスへの影響

影響なし。検証は既存のValidateHostNameメソッド内で行われるため、追加のオーバーヘッドは最小限です。

関連Issue

#128982

その他

なし


#128700 Fix Arm64 conditional select lowering

概要

ARM64における条件選択命令(Conditional Select)の低減処理に関する2つのバグを修正しました。

1つ目は、異なる幅のローカル変数を使用した際に型不一致が発生し、-1 + 1が0x1_0000_0000に化ける問題です。2つ目は、チェック付き加算/否定演算が条件選択に置き換わる際にオーバーフロー検出が無視される問題です。

変更内容

  • src/coreclr/jit/lowerarmarch.cpp: ARM64条件選択低減ロジックを修正

    • 定数選択-CSINC変換適用時に、比較対象ローカルの幅がselect結果の幅と一致することを要求
    • 型安全性を確保するため、置き換え用ローカル変数を独自の型で再作成
    • オーバーフロー可能性があり、チェック付きオーバーフロー処理が指定されている操作の場合は、条件選択-CSop変換から脱出
  • src/tests/JIT/opt/Compares/conditionalIncrements.cs: 条件付き増分に関するARM64リグレッションテストを追加(33行)

  • src/tests/JIT/opt/Compares/conditionalNegates.cs: 条件付き否定に関するテストケースを追加(1行)

パフォーマンスへの影響

影響なし。本修正は正確性向上が目的です。

関連Issue

#128700

その他

なし


#128668 Have IDIV/DIV REX2 and EVEX compatible

概要

AMD64プラットフォームでAPX(拡張汎用レジスタと新しいプレフィックスエンコーディング)対応の例外・コンテキスト処理を追加します。REX2およびEVEXプレフィックス付きIDIV/DIV命令での除数ゼロ例外とオーバーフロー例外の処理に対応し、AVX-512の有無に関わらずAPXレジスタ(R16–R31)の状態をサポートします。

変更内容

  • exceptionhandling.cpp: EVEX/REX2プレフィックス形式のデコード対応、R16–R31へのアクセス、5ビットインデックスModRM/SIBデコード拡張を追加し、DIV/IDIV例外分析時のAPX対応を強化
  • context.cpp: APX対応のOS条件分岐ロジックを調整(HAVE_MACH_EXCEPTIONS)、AVX-512処理に依存しないようAPXレジスタコピーロジックを独立化
  • context2.S: AVX-512復元がスキップされてもAPX復元チェックが実行されるよう修正、XSTATE_MASK_APX(1 << 19)チェック時の幅をDWORD PTRに調整
  • lsraxarch.cpp: div/mod命令シーケンスでレジスタ割り当て時にlowGprRegsからavailableIntRegsを使用するよう変更
  • instrsxarch.h: div/idiv命令がREX2エンコーディングおよびNFフラグメタデータをサポートするよう明記

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更は内部実装(VM例外処理とPALコンテキスト管理)を対象としており、公開APIへの影響はありません。APXのサポートはLinuxおよび対応するプラットフォームに限定されており、OSX(macOS)では有効化されません。


#128524 JIT: Switch to rangecheck when profitable

概要

JITのswitch正規化ロジックを改善し、連続範囲を形成する数値に対して常にrangecheck最適化を適用するようにしました。従来はSWITCH_MAX_DISTANCEより大きい数値を持つswitch文のみが正規化されていましたが、本変更により小さい値でも連続範囲であれば最適化対象となります。

// 例: 以下のような小さい連続値でもrangecheck最適化が適用される
static bool Test(int a)
{
    return a == 3 || a == 4 || a == 5;
}

変更内容

  • src/coreclr/jit/switchrecognition.cpp: switch正規化ロジックに連続範囲チェック機能を追加。従来のSWITCH_MAX_DISTANCEベースの正規化に加えて、値が連続範囲を形成する場合も正規化対象とするよう拡張(+15/-13行)

パフォーマンスへの影響

改善あり。連続値のswitch文がrangecheck(sub + cmp + setb)に最適化され、従来のビットマスク・ジャンプテーブル方式より効率的なコードが生成されます。

例として、a == 3 || a == 4 || a == 5のような小さい連続値の場合:

  • 従来: 複数のcmp/bt命令とジャンプ(PerfScore 1.70+)
  • 最適化後: 単一のsub + cmp + setb(より短いコード、PerfScore向上)

関連Issue

なし

その他

本変更はJITコンパイラ内部の実装改善であり、公開APIの変更はありません。生成されるネイティブコードの品質向上を目的としています。


#128384 Compile runtime async versions of synchronous task-returning methods

概要

JITがタスク返却型の同期メソッドの専用「ランタイム非同期版」をコンパイルできるようにするための拡張です。新しいJIT↔EEインターフェースAPI(getAwaitReturnCall)を追加し、同期メソッドのILを受け取ったJITが、テール位置の呼び出しをランタイム非同期呼び出しに変換し、その他の戻り値をAsyncHelpers.TransparentAwaitでラップして非同期化します。これにより、非同期タスク返却メソッドへの委譲オーバーヘッドを削減します。

変更内容

  • JIT↔EEインターフェース: getAwaitReturnCall APIを追加し、JITから非同期ヘルパー呼び出し情報をルックアップ可能に
  • 非同期ヘルパー: AsyncHelpers内の「suspend」ヘルパーを「TransparentSuspendFor*」に分離、JIT用の型指定TransparentAwait(...)オーバーロードを追加
  • JIT importer: 非同期版テール呼び出しパターンを認識し、PREFIX_IS_ASYNC_VERSION_TAIL_AWAITを使用してテール位置を非同期ターンに最適化
  • SuperPMI: 新しいgetAwaitReturnCall APIを記録・リプレイするためのサポートを追加
  • AOT/R2R: 管理コードJITインターフェース、AOT jitinterface、R2Rコンパイラでの対応実装
  • テスト: 非同期版の反射/スタック動作に関連するテストアサーションをコメント化(既知の差動を反映)

パフォーマンスへの影響

パフォーマンス向上が期待される領域:

  • テール位置の呼び出しが非同期サスペンションに最適化され、不要な中間タスク割り当てを削減
  • 非同期バージョンが完全に分離されることで、別個のコンパイルパスが可能に

具体的なベンチマーク結果は提供されていません。

関連Issue

#115771

その他

  • JIT↔EEバージョン GUID更新: インターフェース変更に伴い、jiteeversionguid.hを更新
  • R2R制限: 一部の最適化(テール呼び出しスイッチバック)はR2Rコンパイルのみに制限されている(crossgen2の制約による)
  • テスト品質注記: 反射テストのアサーション削除により、非同期版の動作回帰の検出能力が低下する可能性あり

#128319 Validate uncompressed size up front in ZipArchiveEntry update mode

概要

ZipArchiveEntry の Update モードで、宣言されている非圧縮サイズが Array.MaxLength (約2GB) を超える場合の検証を改善します。これまでは MemoryStream コンストラクタで ArgumentOutOfRangeException が発生していましたが、今後は Open()/OpenAsync() 呼び出し時に即座に InvalidDataException を発生させるようにします。

// GetUncompressedData / GetUncompressedDataAsync の先頭で検証
if ((ulong)_uncompressedSize > (ulong)Array.MaxLength)
    throw new InvalidDataException(SR.EntryUncompressedSizeTooLargeForUpdateMode);

_storedUncompressedData = new MemoryStream((int)_uncompressedSize);

変更内容

  • ZipArchiveEntry.cs: GetUncompressedData メソッドに _uncompressedSize > Array.MaxLength の検証を追加。検証失敗時は InvalidDataException を発生。IsOpenableFinalVerifications から needToUncompress パラメータを削除
  • ZipArchiveEntry.Async.cs: GetUncompressedDataAsync メソッドに同様の検証を追加し、コメント更新
  • Strings.resx: 新しいリソース文字列 EntryUncompressedSizeTooLargeForUpdateMode を追加("Entries with uncompressed data larger than 2GB are not supported in Update mode.")
  • zip_InvalidParametersAndStrangeFiles.cs: _uncompressedSize > Array.MaxLength となるエントリに対して Open/OpenAsync が InvalidDataException を発生することを検証するリグレッションテストを追加

パフォーマンスへの影響

影響なし。エラーケースの検出タイミング改善のみで、正常系には影響なし。

関連Issue

なし

その他

  • 破壊的変更なし: Update モードでの例外発生は既に存在していた問題。エラーメッセージと発生タイミングが改善される
  • 非推奨化なし: 公開API の仕様変更なし。内部実装の検証ロジック改善のみ
  • セキュリティ: 不正なサイズ値を持つZIPアーカイブに対する早期検出が強化される
  • 本修正では Array.MaxLength 以上のサイズへの対応は対象外。MemoryStream は単一の byte[] に支えられており、これを超えて成長できない構造的な制限がある

#128233 [SVE2] CreateWhileWriteAfterRead* and SaturatingExtract*

概要

SVE2(Scalable Vector Extensions 2)の欠落していたマスク命令を実装しました。CreateWhileWriteAfterRead*とSaturatingExtract*の4つの新しいメソッドファミリーを追加します。

CreateWhileWriteAfterRead*はCreateWhileReadAfterWrite*と異なり、ポインタ差分を直接計算するため、op2ptr = op1ptr - 1の場合の動作が異なります。SaturatingExtract*ファミリーは飽和演算で値をナロウイング(型を小さくして)抽出し、Upper変種は暗黙的なアウトパラメータを使用するため特別なRMW処理を必要とします。

変更内容

  • JIT コンパイラ: emitarm64sve.cpp、hwintrinsiccodegenarm64.cpp、hwintrinsiclistarm64sve.hに新命令のコード生成ロジックを追加(WHILEWR、SQXTNB、UQXTNB、SQXTNT、UQXTNT、SQXTUNB、SQXTUNT)
  • ランタイム ライブラリ: Sve2.cs と Sve2.PlatformNotSupported.cs に以下のメソッドを実装
    • CreateWhileWriteAfterReadMask<T>(T: 数値型)
    • SaturatingExtractNarrowingLower<T, T2>、SaturatingExtractNarrowingUpper<T, T2>
    • SaturatingExtractUnsignedNarrowingLower<T, T2>、SaturatingExtractUnsignedNarrowingUpper<T, T2>
  • 参照 API: System.Runtime.Intrinsics.cs に新メソッドシグネチャを追加(公開API)
  • テスト: 依存関係マスク テストテンプレートを拡張し、op2ptr = op1ptr - 1ケースのテストと飽和抽出演算のテストを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

Upper変種のメソッドは暗黙的なアウトパラメータを使用し、Read-Modify-Write(RMW)処理を実装しています。これはAddHighNarrowingOdd(INS_sve_addhnt)など他の命令と同様のパターンに従っています。


目次