Pull Request on 2026年07月01日

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

注意点

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


目次

  1. #130089 Fix wasm EH resume for handlers nested inside VM-invoked funclets
  2. #130086 Ensure that op_Equality/Inequality can actually import as expected
  3. #130084 [wasm] Pin linux/win V8 to 15.1.103 for exnref support
  4. #130080 Update CI outer-loop agentic workflows to Claude Opus 4.8
  5. #130077 Skip StartSuspendedTests_NonWindowsNonMacOS on iOS and tvOS
  6. #130067 Fsw.Tests: FileMove_FromWatchedToUnwatched: remove ActiveIssue.
  7. #130066 Exclude Microsoft.Extensions.Hosting tests on NAOT and R2R
  8. #130065 Fix NativeAOT reflection invoke copyback
  9. #130034 Run Apple mobile CoreCLR smoke legs as Checked instead of Debug in extra-platforms
  10. #130024 Configure ZstandardStream decompression with MaxWindowLog=23 per RFC 9659
  11. #130022 [release/11.0-preview6] Fix async resumption stub with byref parameters
  12. #130019 Align NativeAOT array element size limit
  13. #130010 Fix stackwalking handling of FP on Wasm in R2R code
  14. #129989 [clr-interp] Add support for logging interpreter IR ranges to perf map
  15. #129979 Remove duplicate [Theory] and [MemberData] from ROSequenceStreamConformanceTests.Seek_PastEnd_ReadReturns0
  16. #129978 [clr-interp] Fix peepCallConfigureAwait* peeps
  17. #129932 Arm64: enable ldp/stp peephole for negative offsets
  18. #129897 Make MemoryCache thread-safety tests deterministic
  19. #129864 [arm64] Avoid sign-extending TYP_INT register moves
  20. #129834 [JSON] Fix source generator serializing null byte[] as empty string
  21. #129801 Async profiler: V1 pooled ValueTask instrumentation.
  22. #129764 [cDAC] Add Hijack DacDbi API
  23. #129424 Fix ParameterInfo.DefaultValue and enum reflection APIs for nested enums on open generic types
  24. #129255 JIT: Enable implicit tailcalls for tail-awaits
  25. #129047 Fix ZstandardStream truncating multi-frame zstd responses to the first frame

#130089 Fix wasm EH resume for handlers nested inside VM-invoked funclets

  • 作成者: @davidwrighton
  • 作成日時: 2026年07月01日 16:19:15(UTC)
  • マージ日時: 2026年07月01日 21:59:07(UTC)
  • ラベル: area-VM-coreclr

概要

WebAssemblyの例外処理において、VM呼び出しされたfunclet内にネストされたハンドラー(例:finally内のcatch)のresumeを修正します。R2R(ReadyToRun)コンパイル時にCallFuncletWith[out]Throwableで呼び出されたfuncletのスタックアンワインド時に、正しい確立フレーム(establishing frame)ポインターを取得できるようにします。

変更内容

  • src/coreclr/vm/wasm/helpers.cpp: TERMINATE_R2R_STACK_WALKマーカーの直後にestablishing FPを保存し、GetWasmEstablishingFramePointerFromTerminatorヘルパーを追加
  • src/coreclr/vm/wasm/callhelpers.hpp: 合成フレームレイアウトを定義し、TERMINATE_R2R_STACK_WALK_FP_OFFSET定数を追加
  • src/coreclr/vm/eetwain.cpp: wasm EECodeManager::CallFuncletでネストされたfunclet内のハンドラーに対するestablishing-frameの選択ロジックを調整
  • テスト追加: interpr2rfunclets.csでインタープリター実行のメソッドから例外をスロー、コンパイル済みfuncletとネストされたハンドラーをアンワインドするテストを追加し、Methodical merged variants(_d1、_do、_r1、_ro)に登録

パフォーマンスへの影響

影響なし。デバッグ情報の保存とunwind時のフレームポインター選択ロジックの追加のため、アンワインド性能への実質的な悪影響は予期されません。

関連Issue

#130089

その他

  • 検証: R2R crossgen2モードでの単体テストで、修正前は例外がハンドルされずに逃げていた(Actual: 1)が、修正後は正常にキャッチされ成功(Actual: 100)
  • 既知の制限: merged Methodical assemblyの場合、Crossgen2の未関連の不具合によりR2Rイメージが無効化されるため、merged testはR2R funcletパスを完全には実行できていません(スタンドアロン検証は成功)
  • ネストされたfuncletのシナリオでは新たに追加されたGetWasmEstablishingFramePointerFromTerminatorコードパスが実行される

#130086 Ensure that op_Equality/Inequality can actually import as expected

概要

JITのハードウェア組み込み関数メタデータを更新し、Vector*のop_Equality/op_Inequality演算子がSIMD基本型を第1引数から導出するようにしました。これにより、ジェネリックコンテキスト(特にISimdVectorを含む場合)での正しい処理とインポート/低下が可能になります。

HW_Flag_BaseTypeFromFirstArgフラグを追加することで、戻り値型や所有型ではなく第1引数から基本型を取得するようになり、ブール値を返すSIMD演算子の正確な処理が保証されます。

変更内容

  • src/coreclr/jit/hwintrinsiclistxarch.h: x86/x64上のVector128/256/512.op_EqualityおよびVector128/256/512.op_InequalityにHW_Flag_BaseTypeFromFirstArgフラグを追加
  • src/coreclr/jit/hwintrinsiclistarm64.h: ARM64上のVector64/128.op_EqualityおよびVector64/128.op_InequalityにHW_Flag_BaseTypeFromFirstArgフラグを追加

パフォーマンスへの影響

影響なし

関連Issue

#93174

その他

なし


#130084 [wasm] Pin linux/win V8 to 15.1.103 for exnref support

概要

WASM例外処理がexnref提案に移行したことに伴い、V8 15.1+が必須になったにもかかわらず、自動更新によってLinuxとWindows向けのV8バージョンが14.9.207に戻されていた問題を修正します。linux_V8Versionとwin_V8Versionを15.1.103に再度ピンする変更により、WASM perf実行やV8シェルエンジンのテストが--experimental-wasm-exnrefフラグで正常に起動できるようになります。

変更内容

  • eng/testing/BrowserVersions.props: linux_V8Versionを14.9.207から15.1.103に更新、win_V8Versionを14.9.207から15.1.103に更新
  • これにより、全OS(Linux/macOS/Windows)のV8バージョンが15.1.103で統一されます

パフォーマンスへの影響

影響なし

関連Issue

#129851 (exnref移行元PR) #129934 (自動バージョン更新によるリグレッション) #129849 (自動更新機構の改善追跡)

その他

自動更新機構がChrome milestoneからV8バージョンを導出しており、Chrome 151(V8 15.1+)へのアップデート、または自動更新ツールの改善が行われない限り、将来的に同様のリグレッションが発生する可能性があります。


#130080 Update CI outer-loop agentic workflows to Claude Opus 4.8

概要

CI外側ループのエージェントワークフロー3つ(ci-failure-fix、ci-failure-scan、ci-failure-scan-feedback)をClaude Opus 4.6から4.8にアップグレードします。各ワークフローのMarkdownソースでengine.modelを更新し、対応するコンパイル済みの.lock.ymlファイルを再生成しています。

変更内容

  • .mdファイル(3ファイル): engine.modelをclaude-opus-4.6からclaude-opus-4.8に変更
  • .lock.ymlファイル(3ファイル): gh-awコンパイラにより再生成。モデルトークンとfrontmatter_hashのみが更新され、ファイアウォール設定やイメージピンなどの変更はなし

パフォーマンスへの影響

影響なし(CI/CD基盤設定の変更であり、ランタイム・コンパイラ・ライブラリの動作には直接影響しません)

関連Issue

#129840(gh-awをv0.79.8へアップグレードする別のPRと調整が必要)、#129616(ファイアウォールイメージピンに関連)

その他

  • 注意点: レビューで、再生成されたロックファイルがdetectionジョブのneedsリストからpat_poolを削除しながらもneeds.pat_pool.outputs.pat_numberを参照している問題が指摘されており、トークン選択の動作に影響する可能性があります
  • PR#129840が先にマージされた場合、このブランチをリベースしてgh-aw v0.79.8でロックを再コンパイルする必要があります
  • コンパイラバージョン: 作成者記述ではv0.71.5、Copilot記述ではv0.74.8と食い違っています

#130077 Skip StartSuspendedTests_NonWindowsNonMacOS on iOS and tvOS

概要

System.Diagnostics.ProcessテストのStartSuspendedTests_NonWindowsNonMacOS.Resume_OnNonSupportedOS_ThrowsPlatformNotSupportedExceptionがiOSおよびtvOSで失敗する問題を修正します。これらのプラットフォームではSafeProcessHandle.Openがサポートされていないため、テストスキップの対象プラットフォームを拡張しました。

[SkipOnPlatform(TestPlatforms.Windows | TestPlatforms.OSX | TestPlatforms.iOS | TestPlatforms.tvOS,
    "Resume is supported on Windows and macOS, and SafeProcessHandle.Open is not supported on iOS and tvOS")]

変更内容

  • src/libraries/System.Diagnostics.Process/tests/StartSuspendedTests.cs
    • SkipOnPlatform属性を拡張し、TestPlatforms.iOS | TestPlatforms.tvOSをスキップ対象に追加
    • スキップ理由のテキストを更新して、iOS/tvOSでの制限を反映

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

なし


#130067 Fsw.Tests: FileMove_FromWatchedToUnwatched: remove ActiveIssue.

概要

.NET 11でのinotifyインスタンス削減に伴い、FileMove_FromWatchedToUnwatchedテストのActiveIssue属性を削除します。inotifyインスタンスが1つに統一されることで、テスト実行中の競合状態が軽減され、このテストが安定するようになりました。

変更内容

  • src/libraries/System.IO.FileSystem.Watcher/tests/FileSystemWatcher.File.Move.cs: ActiveIssue属性を1行削除

パフォーマンスへの影響

影響なし(テストの安定性向上に伴う変更であり、ランタイムのパフォーマンス改善は別途対応)

関連Issue

#96728

その他

本変更は.NET 11で実装されたinotifyインスタンス統一機能(アプリケーション全体で単一インスタンスに削減)の副次的な効果によるもの。テストの不安定性が根本的に解決されたため、回避策としてのActiveIssue属性が不要になりました。


#130066 Exclude Microsoft.Extensions.Hosting tests on NAOT and R2R

概要

Microsoft.Extensions.Hosting機能テストをNativeAOT(NAOT)およびReadyToRun(R2R)のCI環境から除外する変更です。Issue #129832で報告されている既知の失敗に対応するため、テスト実行プロジェクト設定を更新しました。

変更内容

  • src/libraries/tests.proj: Microsoft.Extensions.Hosting.Functional.Tests.csproj を条件付きで除外
    • $(TestNativeAot) 有効時(かつ強制有効化されていない場合)に除外
    • $(TestReadyToRun) 有効時に除外

パフォーマンスへの影響

影響なし(テスト実行の条件制御による変更)

関連Issue

#129832

その他

この変更は特定のランタイム構成(NativeAOT、ReadyToRun)でのみ問題が発生する既知のテスト失敗に対する回避措置です。通常の.NET環境ではテスト実行に影響しません。


#130065 Fix NativeAOT reflection invoke copyback

概要

NativeAOT環境でのリフレクション呼び出し時に、カスタムバインダーによる型変換の結果が呼び出し元の引数配列にコピーバックされていなかった問題を修正します。また、copyback処理をCoreClRと整合させるため、タイミングをfinallyブロックから通常フロー内に変更しています。

変更内容

  • DynamicInvokeInfo.cs: 単一の_needsCopyBackフラグから、引数ごとのshouldCopyBackトラッキングに変更。byref、Type.Missing、バインダー変換への対応を追加
  • CustomMethodInvoker.cs: バインダー変換の追跡機能を追加し、変換された引数をコピーバック
  • InvokeUtils.cs: CheckArgumentメソッドにout bool copyBackパラメータを追加し、バインダー変換の判定を可能に
  • RuntimeAugments.cs: 新しいCheckArgument(..., out bool copyBack)オーバーロードを公開
  • テストファイル: NativeAOT環境でのバインダー変換テストのActiveIssueスキップを削除し、テスト対象に復帰

パフォーマンスへの影響

影響なし

関連Issue

#67531

その他

  • 内部実装の変更(NativeAOT固有の反射呼び出しメカニズム)
  • CoreCLRおよび.NET Frameworkの動作との整合性向上
  • whitespace diffsを除外して確認することが推奨されている

#130034 Run Apple mobile CoreCLR smoke legs as Checked instead of Debug in extra-platforms

  • 作成者: @Copilot
  • 作成日時: 2026年06月30日 13:26:31(UTC)
  • マージ日時: 2026年07月01日 14:07:17(UTC)
  • ラベル: area-Infrastructure

概要

Apple モバイルプラットフォーム(tvOS/iOS/MacCatalyst)の CoreCLR smoke テスト用パイプラインの AllSubsets_CoreCLR_Smoke レグを、Debug ビルドから Checked ビルドに変更します。Debug ビルドの非最適化 CoreCLR は遅すぎて System.Runtime.Tests が 4500 秒でタイムアウトしていたため、最適化を有効にしながらランタイムアサーションを保持する Checked 構成に統一します。

変更内容

  • eng/pipelines/extra-platforms/runtime-extra-platforms-ioslike.yml (tvOS): buildConfig: Debug → buildConfig: Checked に変更、コメント更新
  • eng/pipelines/extra-platforms/runtime-extra-platforms-ioslikesimulator.yml (iOS Simulator): buildConfig: Debug → buildConfig: Checked に変更、コメント更新
  • eng/pipelines/extra-platforms/runtime-extra-platforms-maccatalyst.yml (MacCatalyst): buildConfig: Debug → buildConfig: Checked に変更、コメント更新

パフォーマンスへの影響

大幅な改善が期待される。Debug ビルドでの smoke テストは 4500 秒以上でハング・タイムアウトしていたが、Checked ビルド(最適化有効)により実行時間が短縮され、テスト結果が正常に取得できるようになります。Checked は最適化コンパイルを使用するため、ランタイムアサーションの維持と パフォーマンスの両立が実現されます。

関連Issue

なし

その他

Checked 構成は既に他のパイプラインテンプレート(runtime.yml、runtime-sanitized.yml、runtime-nativeaot-outerloop.yml)で確立された値であるため、テンプレート自体の変更は不要です。


#130024 Configure ZstandardStream decompression with MaxWindowLog=23 per RFC 9659

  • 作成者: @Copilot
  • 作成日時: 2026年06月30日 08:49:07(UTC)
  • マージ日時: 2026年07月01日 09:01:11(UTC)
  • ラベル: area-System.Net.Http

概要

RFC 9659に準拠するため、DecompressionHandlerのZstandardStream初期化時にMaxWindowLog=23(8MB上限)を設定し、悪意あるZstd圧縮レスポンスによるメモリ枯渇攻撃を防止します。ウィンドウサイズが8MBを超えるフレームはIOExceptionで拒否されます。

// 変更前
new ZstandardStream(originalStream, CompressionMode.Decompress);

// 変更後
new ZstandardStream(originalStream, new ZstandardDecompressionOptions { MaxWindowLog = 23 });

変更内容

  • DecompressionHandler.cs: ZstandardStream構築時にZstandardDecompressionOptions { MaxWindowLog = 23 }を指定(3行変更)
  • HttpClientHandlerTest.Decompression.cs: RFC 9659制限の強制を確認する回帰テスト追加。WindowLog=24(16MB)で圧縮されたペイロードを送信し、クライアントがHttpRequestException(内部にIOExceptioncontaining"maxWindowLog")をスローすることを検証(39行追加)

パフォーマンスへの影響

セキュリティ制限の追加に伴う軽微な検証オーバーヘッドが予想されますが、具体的なベンチマーク数値は提供されていません。正常な範囲内のウィンドウサイズでのパフォーマンス影響は無視できる程度と考えられます。

関連Issue

#129986

その他

HTTP/1.1および自動デコンプレッションを使用するSocketsHttpHandlerユーザーに影響します。RFC 9659準拠のセキュリティ強化であり、仕様違反の過度に大きなウィンドウを持つZstd圧縮レスポンスは拒否されるようになります。


#130022 [release/11.0-preview6] Fix async resumption stub with byref parameters

概要

Task返却メソッドがbyrefパラメータを持つ場合、別のTask返却メソッドの結果を直接返却すると、非同期処理が中断される際にInvalidProgramExceptionがスローされる問題を修正しました。これは[MethodImpl(MethodImplOptions.NoInlining)]属性が設定されている場合、または返却型がTask<T>からTaskに変わる場合に発生します。根本原因はランタイムが生成する内部ILスタブがinitobjで無効なbyref localをゼロ化しようとしていることです。

変更内容

  • AsyncResumptionStub.cs: byref localのゼロ化ロジックを修正。initobjを使わずにbyrefゼロをロードするIL生成に変更
  • jitinterface.cpp: IL生成の同等の修正をC++側に適用
  • byref-param.cs: 修正を検証するユニットテストを追加(byrefパラメータを持つTask返却メソッドのシナリオをカバー)

パフォーマンスへの影響

影響なし

関連Issue

#129990、#129999、#128384

その他

  • 本PRはrelease/11.0-preview6への#129999のバックポート
  • リスク評価: 低(ILスタブの生成ロジック修正のみ)
  • この問題はランタイム非同期機能導入時から存在しましたが、#128384により C# コードから触発可能になったため、顕在化しました

#130019 Align NativeAOT array element size limit

  • 作成者: @Copilot
  • 作成日時: 2026年06月30日 03:45:56(UTC)
  • マージ日時: 2026年07月01日 00:17:10(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOTコンパイラの配列要素サイズの制限がCoreクラのランタイムと相違していた問題を修正しました。修正前は要素サイズが正確に65,535バイト(ushort.MaxValue)の場合を拒否していましたが、修正後はそのサイズを許可し、サイズがushort.MaxValueより大きい場合のみ拒否するように変更しました。これによりNativeAOTとCoreクラの動作が一致します。

var array = new MaxSizedArrayElement[1];

[InlineArray(65535)]
struct MaxSizedArrayElement
{
    private byte _first;
}

変更内容

  • CompilerTypeSystemContext.Validation.cs: 配列要素サイズの検証ロジックを修正(>= ushort.MaxValue → > ushort.MaxValue)
  • MaxArrayElementSize.cs/csproj: 新規の回帰テストを追加し、65,535バイトのInlineArray構造体をサポートしていることを検証(CoreCLRおよびNativeAOT両方で動作確認)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は内部実装(NativeAOTコンパイラの型検証ロジック)の修正であり、公開APIに対する破壊的変更はありません。NativeAOTとCoreクラの動作を境界値に限定して一致させるための修正です。


#130010 Fix stackwalking handling of FP on Wasm in R2R code

  • 作成者: @davidwrighton
  • 作成日時: 2026年06月30日 00:40:46(UTC)
  • マージ日時: 2026年07月01日 03:03:04(UTC)
  • ラベル: area-VM-coreclr

概要

WasmにおけるR2R(Ready2Run)コード実行時のスタックウォーキング処理を修正し、フレームポインタの回復と伝播を信頼性高く実装します。#129703による回帰を解決し、汎用コンテキストルックアップの動作を修正します。

変更内容

  • src/coreclr/vm/wasm/helpers.cpp: トランジションフレームおよびアンワインドパス、ソフトウェア例外フレームにおいて、InterpreterFPをスタックポインタから設定して回復し、仮想アンワイド中にFPを伝播します(+17/-1)
  • src/coreclr/vm/codeman.cpp: EEJitManager::SetCpuInfoでWasm命令セットフラグを設定し、R2Rコードパスの選択と使用を有効化します(+5/-0)
  • src/coreclr/vm/excep.cpp: WasmのSoftwareExceptionFrameに対し、InterpreterFPをトランジションブロックのスタックポインタから設定します(+2/-2)
  • src/tests/Common/CLRTest.CrossGen.targets: Wasm特有の--codegenoptフラグをCrossGen2に追加し、NYI(Not Yet Implemented)をR2R非対応として扱い、テストスイートの成功率を向上させます(+8/-0)

パフォーマンスへの影響

影響なし。本変更はスタックウォーキングの正確性確保と既存回帰修正に限定されており、ランタイム性能への直接的な改善または低下はありません。

関連Issue

#130000(JIT側の対応) #129703(本変更による回帰の原因)

その他

CLRTest.CrossGen.targets への変更は、すべての実装が完成した後に削除予定の一時的なものです。本変更はWasmランタイムの内部実装(vm配下)に限定され、公開APIへの影響はありません。


#129989 [clr-interp] Add support for logging interpreter IR ranges to perf map

  • 作成者: @BrzVlad
  • 作成日時: 2026年06月29日 17:55:32(UTC)
  • マージ日時: 2026年07月01日 06:06:08(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLRのperf-mapログにインタープリタ生成IR範囲のサポートを追加し、プロファイラツールがインタープリタフレームをJITコンパイルされたメソッドと同様にシンボル化できるようにします。環境変数 DOTNET_PerfMapEnabled=1 と DOTNET_PerfMapStubGranularity=2 を設定することで機能します。

変更内容

  • perfmap.h: PerfMap::LogInterpreterMethod(...) APIを宣言(FEATURE_INTERPRETERで保護)
  • perfmap.cpp: インタープリタIR範囲をperfmapに出力するロジックを実装(+41行)
  • prestub.cpp: MethodDesc::JitCompileCodeLockedEventWrapperを更新し、インタープリタエントリポイントをJITコンパイルメソッドとしてログするのではなく、インタープリタIR範囲をログするよう変更(+14/-2行)

パフォーマンスへの影響

影響なし(ロギング機能の追加であり、ランタイム性能への直接的な影響はありません)

関連Issue

なし

その他

  • FEATURE_INTERPRETERによる条件付きコンパイルで、インタープリタ機能が有効な場合のみこの機能が有効になります
  • perf-mapログを活用することで、インタープリタで実行されるメソッドのプロファイリングが可能になります

#129979 Remove duplicate [Theory] and [MemberData] from ROSequenceStreamConformanceTests.Seek_PastEnd_ReadReturns0

概要

ROSequenceStreamConformanceTestsのSeek_PastEnd_ReadReturns0メソッドオーバーライドから冗長な[Theory]および[MemberData(nameof(AllSeekModes))]属性を削除しました。これらはベースクラスStandaloneStreamConformanceTestsの仮想メソッドから継承されており、重複して宣言する必要がありません。

変更内容

  • src/libraries/System.Memory/tests/ReadOnlyBuffer/ReadOnlySequenceStream.ConformanceTests.cs: Seek_PastEnd_ReadReturns0から[Theory]と[MemberData]属性を削除(2行削除)
  • src/libraries/System.Memory/tests/ReadOnlyBuffer/NativeReadOnlyMemoryStream.ConformanceTests.cs: 同様に属性を削除(1行削除)
  • src/libraries/System.Memory/tests/ReadOnlyBuffer/NativeWritableMemoryStream.ConformanceTests.cs: 同様に属性を削除(1行削除)
  • eng/testing/ILLink.Descriptor.StreamConformanceTests.xml: ILLinkディスクリプタを追加(3行追加)
  • eng/testing/tests.mobile.targets: テスト構成を更新(6行追加)

パフォーマンスへの影響

影響なし

関連Issue

#129922

その他

全52,894個のSystem.Memoryテストが合格。Seek_PastEnd_ReadReturns0は3つの適合性テストクラス全体で実行されることを確認済み(20件の結果)。この変更により、オーバーライドはベースクラスの属性とデータソースに依存するようになり、派生テスト型でのMemberDataリフレクション呼び出しを回避します。


#129978 [clr-interp] Fix peepCallConfigureAwait* peeps

概要

CoreCLR インタープリタの ConfigureAwait() パターンに関するpeephole最適化の検証ロジックを修正しました。パターンマッチングの検証がオペコード順序と一致していなかった問題を解決し、コメント追加と処理の再整理を行いました。System.Threading.Tasks.Tests.AsyncProfilerTests.RuntimeAsync_ConfigureAwaitFalse テストの失敗を修正します。

変更内容

  • src/coreclr/interpreter/compiler.cpp: Task および ValueTask の ConfigureAwait() パターンに対する peephole 検証ロジックを修正
    • Task ConfigureAwait パターン: ldc.i4.* コンテキストフラグとメソッドトークンのパターンオフセットを修正
    • ValueTask ConfigureAwait パターン: ローカルインデックスマッチと ldc.i4.* 処理を含む検証/パース処理を再整理し、オペコード順序に合わせた
    • IL パターンを記述したコメントを追加し、意図される命令シーケンスを明確化

パフォーマンスへの影響

影響なし(検証ロジックの正確性向上であり、パフォーマンス特性への直接的な変更なし)

関連Issue

#129978

その他

修正は C# および IL の両方で検証済み(大きなローカルインデックスパスも含む)


#129932 Arm64: enable ldp/stp peephole for negative offsets

  • 作成者: @EgorBo
  • 作成日時: 2026年06月27日 22:50:05(UTC)
  • マージ日時: 2026年07月01日 16:53:23(UTC)
  • ラベル: area-CodeGen-coreclr

概要

ARM64 JIT コンパイラの ldr/str → ldp/stp ペープホール最適化を拡張し、負のオフセットを使用する unscaled 形式(ldur/stur)命令にも対応しました。これにより、負のバイトオフセットを持つ連続したロード/ストア命令の統合が可能になります。

変更内容

  • src/coreclr/jit/emitarm64.cpp: ペープホール最適化ロジックを改善
    • IsOptimizableLdrStrWithPair 内で IF_LS_2C 形式のイミディエートを scaled 表現に正規化し、隣接性とレンジチェックを一貫して処理
    • ReplaceLdrStrWithPairInstr でバイトオフセット計算を修正。IF_LS_2C 形式の場合、raw バイトオフセットをオペランドサイズで誤って乗算しないように対応
    • IF_LS_2C オフセットがスケール付きペアオフセットとして表現不可能な場合(要素サイズの倍数でない場合)は拒否し、安全性を保証

パフォーマンスへの影響

改善率や具体的な数値の記載なし。負のオフセットを含むロード/ストア命令のペアリング最適化により、ARM64 コード生成の効率化が期待される。

関連Issue

#93382

その他

  • 内部実装の最適化(JIT コンパイラの命令エミッタ部分)
  • 破壊的変更なし
  • 公開 API への影響なし

#129897 Make MemoryCache thread-safety tests deterministic

概要

MemoryCacheの並行処理テストの非決定性を排除し、テストの信頼性と実行時間を改善しました。従来のテストはスレッドスケジューリングに依存した不安定な実装で、毎回約7秒の実行時間がかかっていました。テストコード自体に2つのバグ(キャンセルトークン使用による例外、Random の非スレッドセーフな共有)が存在していたため、これらを修正しました。

変更内容

  • src/libraries/Microsoft.Extensions.Caching.Memory/tests/MemoryCacheSetAndRemoveTests.cs
    • OvercapacityPurge_AreThreadSafe: タスク作成時のキャンセルトークン使用を廃止。タスク終了時にキャンセルトークンをチェックする実装に変更し、TaskCanceledExceptionの発生を防止
    • AddAndReplaceEntries_AreThreadSafe: スレッドローカルなRandomインスタンスを各スレッドに割り当て、非スレッドセーフなアクセスを解決
    • テストロジックを決定性のある方式に改善(タイミングに依存しない検証方法へ変更)
    • テスト実行時間を大幅に短縮

パフォーマンスへの影響

テスト実行時間の改善:従来は各テストで約7秒かかっていたものが、決定性ベースの実装により大幅に短縮される見込み(具体的な改善時間は提供情報に記載なし)

関連Issue

#72890

その他

なし


#129864 [arm64] Avoid sign-extending TYP_INT register moves

概要

ARM64 JITコンパイラの ins_Move_Extend 関数を修正し、TYP_INT 型のレジスタ間移動で不要な符号拡張命令 sxtw を避け、代わりに mov を使用するようにしました。併せて、移動の有効性を検証するためのオプション dstType パラメータを追加しています。これにより、整数型のまま保持される値に対する不要な処理が削減されます。

変更内容

  • src/coreclr/jit/instr.cpp: ARM64 ins_Move_Extend を更新し、TYP_INT 型のレジスタ間移動で INS_sxtw の代わりに INS_mov を返すように変更。オプション dstType パラメータの追加と、非拡張移動の検証アサーションを実装。
  • src/coreclr/jit/codegen.h: inst_Mov_Extend/ins_Move_Extend の宣言を更新し、新しいオプション dstType パラメータに対応。
  • src/tests/JIT/opt/InstructionCombining/IntMoveNoSignExtend.cs: 新規テスト。int 型移動で sxtw が生成されないこと、実際の int -> long 拡張では sxtw が使用されることを検証するディスアセンブリチェックテスト。
  • src/tests/JIT/opt/InstructionCombining/IntMoveNoSignExtend.csproj: 新規テストプロジェクト設定ファイル。

パフォーマンスへの影響

ARM64プラットフォームで TYP_INT 型のレジスタ間移動時に符号拡張命令が削減されるため、わずかな実行効率の向上が期待できます。不要な sxtw 命令の発行回数が減少することで、命令パイプラインの効率化に寄与します。

関連Issue

#129052

その他

なし


#129834 [JSON] Fix source generator serializing null byte[] as empty string

概要

System.Text.Json ソースジェネレータの高速パス(fast-path)シリアライズで、null の byte[] が空文字列("")ではなく JSON の null として正しくシリアライズされるよう修正しました。これまで WriteBase64String() は null と空配列を区別できず、リフレクションベースの ByteArrayConverter と異なる動作をしていました。

変更内容

  • JsonSourceGenerator.Emitter.cs: JsonPrimitiveTypeKind.ByteArray の高速パス生成時に明示的な null チェックを追加。null byte[] については JSON null を出力、非 null の場合は Base64 文字列をエンコード
  • SerializationContextTests.cs、RealWorldContextTests.cs、JsonSerializerContextTests.cs: null byte[] プロパティを含むテストケースを拡張し、すべて null インスタンスのラウンドトリップが正しく機能することを検証

パフォーマンスへの影響

影響なし(既存の null チェック処理を明示化したもので、ランタイムコストの増加は最小限)

関連Issue

#129833

その他

  • 破壊的変更なし
  • 公開 API への影響なし。変更は内部的なソースジェネレータの実装
  • 修正前:null byte[] → "" → ラウンドトリップで空配列に変換
  • 修正後:null byte[] → null → ラウンドトリップで null として復元

#129801 Async profiler: V1 pooled ValueTask instrumentation.

概要

V1 AsyncProfiler インストルメンテーションを PoolingAsyncValueTaskMethodBuilder / PoolingAsyncValueTaskMethodBuilder<T> に拡張しました。これまでプーリングビルダーは Resume/Complete/Unwind イベントを発行せず、トレースにギャップが生じていました。本変更により、通常の Task/ValueTask ビルダーとプーリングビルダー間でプロファイラー計測を一貫させ、完全な非同期トレースを取得できるようにします。

変更内容

  • プーリングボックスインストルメンテーション (PoolingAsyncValueTaskMethodBuilderT.cs)

    • StateMachineBox<T>.MoveNext に Resume フック追加
    • SetResult/SetException に Complete/Unwind フック追加
    • GetDiagnosticData 実装(methodId + ステートマシン状態 + ValueTask ソースからの継続)
  • Task 以外のボックスの Suspend/Complete 分類 (AsyncStateMachineDispatcher.cs, AsyncProfiler.cs)

    • プーリングボックスのインライン回収に対応するため、AsyncProfiler.Info.CurrentContinuationCompleted フラグを導入
    • CompleteAsyncMethod/UnwindAsyncFrame を統合し TLS フェッチを一度に実施
  • プーリングチェーンのコールスタックウォーク (AsyncStateMachineDispatcher.cs, AsyncProfiler.cs)

    • LastContinuation を Task? から IAsyncStateMachineBox? に型変更(unsafe キャスト削除)
    • ManualResetValueTaskSourceCore.ContinuationForDiagnostics 公開
  • カスケードガード (ValueTaskAwaiter.cs, ConfiguredValueTaskAwaitable.cs)

    • IAsyncStateMachineBox is not ガード追加により、プーリングボックスのディスパッチャー分割を防止しダイレクトな box→box 継続チェーンを形成
  • テスト拡充 (AsyncProfilerV1Tests.cs)

    • 14 の新規テスト(プーリング 13 件 + 通常 ValueTask 1 件)
    • イベントライフサイクル、メソッド別イベント、コールスタック深度、例外アンワインド等をカバー

パフォーマンスへの影響

影響なし(インストルメンテーション追加のため計測オーバーヘッドはあるが、計測機能が無効時の性能は変わらず)

関連Issue

#129043(V1 AsyncProfiler インストルメンテーション初期導入)

その他

  • 公開 API: ManualResetValueTaskSourceCore.ContinuationForDiagnostics を新規公開
  • 内部実装の変更により、非同期プロファイラーがプーリング型ビルダーに基づいた完全なトレースを取得可能に
  • Task と IValueTaskSource の両方のバックアップに対して一貫した計測パスを実現

#129764 [cDAC] Add Hijack DacDbi API

  • 作成者: @rcj1
  • 作成日時: 2026年06月23日 19:03:44(UTC)
  • マージ日時: 2026年07月01日 15:52:14(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Data Access Component)に例外ハイジャック(Hijack)機能を追加し、スレッドコンテキストの書き込みサポートを実装するPRです。StackPusher、IntegerArgPlacerといった ABI 準拠のユーティリティ、スレッドコンテキスト書き込み用デリゲート、OS 例外レコード/コンテキストポインタの公開、および DacDbi Hijack API の実装が含まれます。

変更内容

コア機能追加:

  • StackPusher.cs - スタックへの任意バイト書き込み(ABI アライメント対応)
  • IntegerArgPlacer.cs - ネイティブ ABI に従う整数引数配置(レジスタ/スタック)
  • Debugger コントラクトに PrepareExceptionHijack() API 追加
  • Thread コントラクトに OS 例外レコード/コンテキストポインタ公開

デリゲート/コールバック統合:

  • ネイティブ側: cdac_reader.h に write_thread_context コールバック追加
  • cdac.cpp で ICorDebugMutableDataTarget::SetThreadContext をcDAC初期化時に接続
  • ContractDescriptorTarget に TrySetThreadContext 実装

プラットフォーム別実装:

  • x86/x64/ARM64 Context に UnsetSingleStepFlag() 実装
  • ARM/RISC-V/LoongArch64 では単一ステップエミュレーション使用のため例外スロー

DacDbi Hijack 実装:

  • DacDbiImpl.cs に managed Hijack パス実装
  • EXCEPTION_RECORD サイジング/書き込みヘルパー追加

データ構造拡張:

  • ExceptionInfo に OS exception record/context ポインタフィールド追加
  • ThreadData に例外進行中フラグと OS レコードポインタ追加

テスト/ドキュメント:

  • ThreadTests、DebuggerTests、PlatformContextTests に新規テスト追加
  • 各モック実装に新フィールド対応
  • Thread.md、Debugger.md に設計ドキュメント追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 38ファイル変更(追加:+770行、削除:-160行)
  • Copilot レビュー完了(7回のレビューサイクル実施)
  • Debugger_1.cs のファイル構成変更(従来ファイル削除、新規ファイル追加により整理)
  • 破壊的変更なし(公開API も内部実装も後方互換性を維持)

#129424 Fix ParameterInfo.DefaultValue and enum reflection APIs for nested enums on open generic types

  • 作成者: @Copilot
  • 作成日時: 2026年06月15日 13:35:32(UTC)
  • マージ日時: 2026年07月01日 11:03:44(UTC)
  • ラベル: area-System.Reflection

概要

ParameterInfo.DefaultValue が .NET 9 以降で、ジェネリック型にネストされたenum型のパラメータにアクセスする際にリグレッションが発生していた問題を修正。また、NativeAOT上で開いたジェネリックenum型に対して複数のenum反射API(GetEnumUnderlyingType、GetEnumNames など)が PlatformNotSupportedException をスローしていた問題も解決。開いたジェネリック型を含むenum型の場合は、enum インスタンスの具体化を試みず、基になるプリミティブ値を返すようフォールバック。

変更内容

  • MdConstant.cs: Enum.ToObject() をジェネリック型パラメータを含まないenum型にのみ使用し、含む場合は基になるプリミティブ定数にフォールバック
  • NativeAOT enum反射API: ReflectionAugments.cs、Enum.NativeAot.cs、NativeFormatRuntimeNamedTypeInfo.cs で複数のenum反射API(GetEnumUnderlyingType、GetEnumNames、GetEnumName、GetEnumValuesAsUnderlyingType、GetEnumValues、IsEnumDefined)を実装し、NativeAOT上での PlatformNotSupportedException を解決
  • テスト: ジェネリック型にネストされたenum型のデフォルト値取得についてのリグレッションテストを追加

パフォーマンスへの影響

影響なし

関連Issue

#129423

その他

内部実装の修正であり、公開APIの変更はない。NativeAOT環境での反射機能サポートを拡充。


#129255 JIT: Enable implicit tailcalls for tail-awaits

概要

JITコンパイラにおいて、async メソッドからの暗黙的なテールコール(tail-await)を再度有効にする変更です。従来はasync メソッドからのテールコールを全て無効化していましたが、tail-await の仕組みが導入されたため、tail-await に限定してテールコールを許可するように修正しました。

サンプルコード(変更前後):

private static Task Foo(bool b)
{
    return b ? Bar() : Baz();
}

[MethodImpl(MethodImplOptions.NoInlining)]
private static async Task Bar()
{
}

[MethodImpl(MethodImplOptions.NoInlining)]
private static async Task Baz()
{
}

変更内容

  • src/coreclr/jit/importer.cpp: async メソッドに対する無条件のテールコール無効化を削除
  • src/coreclr/jit/importercalls.cpp: async メソッドからのテールコール判定を後段で実施し、IsTailAwait マークされた呼び出しのみを許可する条件を追加

パフォーマンスへの影響

大幅な改善が期待できます。

提供例において:

  • コードサイズ: 52 バイト → 20 バイト(約62%削減)
  • スタック操作の削減: プロローグサイズ 4 バイト → 0 バイト
  • PerfScore: 8.50 → 3.50(約59%改善)
  • 命令数: 19 → 6(約68%削減)

tail.jmp命令を活用することで、不要なスタックフレーム管理と関数呼び出しオーバーヘッドを削減します。

関連Issue

なし

その他

この変更は内部実装(JITコンパイラの最適化ロジック)に限定されており、公開APIへの影響はありません。互換性問題もありません。


#129047 Fix ZstandardStream truncating multi-frame zstd responses to the first frame

概要

ZstandardStreamが複数フレームの連結されたzstd応答を最初のフレームだけで打ち切る問題を修正しました。RFC 8878で定義される複数フレームの連結に対応し、GZipStream/DeflateStreamと同様のパターンでフレーム間ループを実装しています。

変更内容

  • ZstandardStream.Decompress.cs: フレーム間のデコーディングロジックを実装。TryDecompressは単一フレームをデコードし、Read/ReadAsyncでフレーム境界ループを処理。AdvanceToNextFrameヘルパーで4バイトのフレームマジックを検出して次フレームへ遷移。マジックが有効な場合はNeedMoreDataで返り、その他の場合はInvalidDataとして扱い、末尾データと区別。
  • ZstandardDecoder.cs: PrepareForNextFrame()メソッドを追加。ZSTD_DCtx_resetをセッションモードで呼び出し、ウィンドウサイズと辞書参照を次フレームに引き継ぎつつ、単フレーム限定のプレフィックスはリセット。
  • CompressionStreamUnitTests.Zstandard.cs: 6つの新規テストを追加。連結フレーム、分割読み込みでのフレーム境界、空フレーム混在、末尾短トレーリングデータ、破損フレーム、スキップ可能フレームの各シナリオをカバー。

パフォーマンスへの影響

影響なし。内部デコーディングロジックの再構成であり、新規の処理オーバーヘッドはありません。

関連Issue

#129038

その他

  • 既存の一括ヘルパー(ZstandardDecoder.TryDecompress、TryGetMaxDecompressedLength)は複数フレーム対応済みのため変更なし
  • シーク可能なストリームでは末尾データ読み込みのため位置を巻き戻し
  • 検出ロジックがmanaged codeでフレームマジックを認識せず、decoder経由で結果判定することで、破損フレーム本体がトレーリングデータとして誤認識されることを防止
  • 既存の打ち切り検出(StreamTruncation_IsDetected)は引き続き動作

目次