Pull Request on 2026年07月17日

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

注意点

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


目次

  1. #130981 Revert free-threaded assert in FreeThreadedStrategy
  2. #130975 Add wasm HardwareIntrinsics PR pipeline
  3. #130974 Update outerloop convert tests for saturating float/double casts
  4. #130962 Fix build break in PackedSimdTests in outerloop
  5. #130956 Implement the sqrt, remainder, fma, scaleB, ilogB, bit increment/decrement, and quantize operations for the IEEE 754 decimal types
  6. #130955 Skip profiler leave callback on wasm instead of asserting
  7. #130945 [Wasm RyuJit] fix throw helper layout for side try entries in enclosed regions
  8. #130941 [wasm] Fix v128.load / v128.store opcodes in the R2R ObjectWriter
  9. #130939 [wasm] Disable optimistic instruction sets for WASI R2R
  10. #130937 Add check that libnethost contains no LTCG objects
  11. #130936 Add regression test for #124749
  12. #130934 Clarify WASM shuffle/swizzle codegen comments
  13. #130930 [release/10.0] Fix ComClassGenerator failure with generic types
  14. #130917 [release/9.0-staging] Migrate devdiv/dotnet-core-internal-tooling to WIF service connection
  15. #130916 [release/10.0] Migrate devdiv/dotnet-core-internal-tooling to WIF service connection
  16. #130915 [release/8.0-staging] Migrate devdiv/dotnet-core-internal-tooling to WIF service connection
  17. #130913 SuperPMI: fix spurious arm asmdiffs from out-of-range BL relocs
  18. #130911 [cDAC] Fix x86 context flags
  19. #130909 [cDAC] Add the last two location types to DebugVarInfo cDAC representation
  20. #130899 Add RuntimeHelpers.IsRuntimeAsync intrinsic
  21. #130892 Fix .NET Framework build: exclude TrimmingTests from compilation
  22. #130890 Implement INumber, IFloatingPoint, and the modulus operator for the IEEE 754 decimal types
  23. #130889 [cDAC] Include the highest assigned ID in IdToThread lookup
  24. #130878 [wasm] Correctly materialize integer constants in genCodeForConstant
  25. #130874 Add missing helix-platforms variables to superpmi-collect
  26. #130873 Handle cross-targeting Vector<T> size mismatch in the JIT
  27. #130856 Add DacDbiInterfaceInstance to cdac
  28. #130855 Fix: TryGenerateStructMarshallingMethod asserts on non-struct T in StructureMarshaler<T>
  29. #130826 Add System.Diagnostics.StackTrace.Tests to native AOT smoke test
  30. #130816 [wasi] Add CoreCLR-WASI corehost (wasihost)
  31. #130794 Document Process timing properties after exit
  32. #130766 Add Android CoreCLR runtime tests
  33. #130724 Merging internal commits for release/8.0
  34. #130665 Produce deprecated property in JsonSchema for obsolete types
  35. #130638 Re-enable assert for R2R PE mapping failure on OSX
  36. #130555 [Android] Add missing JNI exception checks across crypto PAL
  37. #130492 Use async ChangeToken.OnChange overload in FileConfigurationProvider
  38. #130416 Remove ThrowHelper from Microsoft.Extensions.Primitives
  39. #130164 Percent-encode JSON pointer reference tokens in JsonSchemaExporter $ref values
  40. #129698 Use granular FileAccess for zip entry operations
  41. #129319 Add NoInlining to ArrayPool Rent/Return
  42. #128799 Detect and use zicond in ifconversion on riscv64
  43. #128598 Fix Process.Kill(entireProcessTree: true) when intermediate child has KillOnParentExit
  44. #125662 [runtime tests] Report ActiveIssue-skipped tests and crashed runners

#130981 Revert free-threaded assert in FreeThreadedStrategy

概要

FreeThreadedStrategyに追加されたDEBUG専用のアサーションを削除するもの。当該アサーションが過度に厳密であり、現在のスレッドが既に正しいアパートメント型を持つアパートメント関連COMオブジェクトに対してもFreeThreadedStrategyは有効であるため、誤ったアサート失敗を引き起こしていた。併せてStrategyBasedComWrappers.DefaultIUnknownStrategyのドキュメントを明確化し、FreeThreadedStrategyにこれらのユースケースを説明するクラスコメントを追加した。

変更内容

  • FreeThreadedStrategy.cs: DEBUG専用のアジリティプローブ(agility probe)アサーション処理を削除し、使用可能なユースケースを説明するクラスコメントを追加
  • StrategyBasedComWrappers.cs: DefaultIUnknownStrategyの公開XMLリマークを更新し、想定される使用目的を明確化

パフォーマンスへの影響

影響なし

関連Issue

#130961、#130906

その他

このPRはCOM相互運用性の内部実装(System.Runtime.InteropServicesライブラリ)に関する変更であり、公開APIには影響しない。DEBUG限定のアサーションの削除であるため、Release構成の実行時動作に変更はない。


#130975 Add wasm HardwareIntrinsics PR pipeline

概要

Wasm向けのHardwareIntrinsicsテスト(src/tests/JIT/HardwareIntrinsics/Wasm)をPR段階でコンパイルするための新しいパイプラインを追加します。既存のPR-triggered intrinsicsパイプラインではwasm固有のテストが対象外となっており、コンパイル破損がローリングビルドまで検出されない問題を解決します。

変更内容

  • eng/pipelines/coreclr/hardware-intrinsics-wasm.yml (+28行): PR-triggered パイプライン定義。src/coreclr/jit/*wasm*(hwintrinsicwasm、lowerwasm.cpp、regallocwasm.cpp)およびsrc/tests/JIT/HardwareIntrinsics/Wasm/**をフィルタリング対象とし、変更検出時に実行されます。
  • eng/pipelines/coreclr/templates/jit-hardware-intrinsics-wasm.yml (+39行): Browser Wasm向けのビルドテンプレート。clr+libs+packsをビルドし、/p:EnableWasmHWIntrinsicsTests=trueフラグでWasm HardwareIntrinsicsテストツリーをコンパイルします。sendToHelix: falseでビルドのみ実行(ブラウザ/V8では実行不可)。

パフォーマンスへの影響

影響なし

関連Issue

#130962、#130850

その他

  • 本パイプラインはhardware-intrinsics-arm64.ymlをモデルにしています。
  • Azure DevOpsでのパイプライン定義登録が別途必要です。
  • ビルドのみで実行テストは行わないため、コンパイル破損検出に特化した構成です。

#130974 Update outerloop convert tests for saturating float/double casts

概要

#128604で実装された飽和演算(saturating)float/double → 小整数型キャストの仕様変更に対応するため、2つのouterloopテストを更新します。CoreCLRの飽和演算動作に合わせてテスト期待値を修正し、Monoとの動作の差異を適切に処理してCI失敗を防ぎます。

変更内容

  • b05617.ilproj: Monoでの実行をスキップするようCLRTestTargetUnsupportedを追加(Monoは従来の切り捨て動作のため)
  • b05617.il: ldc.i8定数を更新。CoreCLRの飽和演算により2.564783e7→255(従来214)、5246667200→127(従来-1)と変わったため、最終的なconv.u4定数を4294967086→4294967043に修正してテスト結果は100を維持
  • TestConvertFromIntegral.cs: ushort.MaxValue → shortへのConv_I2チェック済み変換2件をUnspecifiedBehaviourマークに変更(CoreCLRは飽和してshort.MaxValue、Monoは切り捨てて-1となるため、ファイル内の他のfloat→整数型アウトオブレンジケースと同様に処理)

パフォーマンスへの影響

影響なし

関連Issue

#128604(飽和演算実装)、#100368(Monoの動作差異追跡)、#130962(CI失敗の報告元)

その他

変更はテストのみで、ランタイム・コンパイラ動作への変更なし。ローカル検証済み:b05617は100を返し、TestConvertFromIntegralは"All tests passed"を報告。


#130962 Fix build break in PackedSimdTests in outerloop

概要

PR #130850で導入されたビルドエラーを修正するPull Requestです。PackedSimdTests内の1行を修正しています。

変更内容

  • src/tests/JIT/HardwareIntrinsics/Wasm/PackedSimd/PackedSimdTests.cs: 1行の修正(1行追加、1行削除)

パフォーマンスへの影響

影響なし

関連Issue

#130850

その他

なし


#130956 Implement the sqrt, remainder, fma, scaleB, ilogB, bit increment/decrement, and quantize operations for the IEEE 754 decimal types

概要

IEEE 754decimal型(Decimal32、Decimal64、Decimal128)に対して、IFloatingPointIeee754<TSelf>インターフェースの次バッチの操作を実装します。Sqrt、Ieee754Remainder、FusedMultiplyAdd、ScaleB/ILogB、BitIncrement/BitDecrement、Quantize/Quantum/SameQuantumを公開APIとして追加し、すべての操作はIEEE 754仕様に準拠した正準BID結果を生成します。

変更内容

  • Number.DecimalIeee754.cs: FMA、IEEE剰余、平方根、scaleB/ilogB、quantize/quantum/sameQuantum、nextUp/nextDownの実装ロジックを追加(+948行)
  • Decimal32/64/128.cs: 新しい7つの公開静的メソッド(Sqrt、Ieee754Remainder、FusedMultiplyAdd、ScaleB、ILogB、BitIncrement、BitDecrement)と3つのquantize関連メソッドを各型に追加(各+42行)
  • System.Runtime.cs(参照アセンブリ): 新しい公開surface areaを宣言(+30行)
  • テストファイル: Decimal32/64/128Tests.csとDecimalIeee754IntelTestData.csに対応するユニットテストとIntel readtest.inベクタを使用した検証テストを追加

パフォーマンスへの影響

Intel Decimal Floating-Point Math Libraryの参照実装(BSD 3-Clause)に基づいており、ビット完全性が検証されています。パフォーマンス数値は提供されていません。

関連Issue

#81376、#130890

その他

  • すべての操作は正準BID結果を生成し、仕様で定義されている推奨指数を保持し、NaN被演算子/結果を正規化します
  • 複雑でない操作体はIntelの参照実装に基づいており、必要な帰属表示ヘッダーを含みます
  • 各操作はIntelのreadtest.inベクタに対してビット完全性で検証されます
  • 超越関数(Exp/Log/Sin/Cos/Powなど)は意図的に後回しにされています(大引数三角関数の引数削減と正確な丸め戦略が別途必要)
  • コミットは操作ごとに分離されており、必要に応じてより小さなPRに分割可能な構成になっています

#130955 Skip profiler leave callback on wasm instead of asserting

概要

WASM バックエンドのプロファイラ leave コールバック処理を修正。従来は NYI_WASM スタブで実装されていましたが、対応する enter コールバックが WASM で削除されているため、JitWasmNyiToR2RUnsupported 診断下で不要なアサーションが発生していました。この PR では、leave コールバックを明示的な no-op に変更し、enter 側との対称性を保ちながら、WASM が ELT フック(Enter-Leave-Tailcall)から完全に解放されるようにしました。

変更内容

  • src/coreclr/jit/codegenwasm.cpp: genProfilingLeaveCallback の NYI_WASM("genProfilingLeaveCallback") スタブを明示的な no-op に置き換え、意図した暫定動作を説明するコメントを追加

パフォーマンスへの影響

影響なし。通常の DEBUG/Release ビルドでは既に no-op であり、変更は JitWasmNyiToR2RUnsupported 診断パスのみに影響します。

関連Issue

#130953(WASM 向け完全な enter/leave/tailcall コード生成の追跡)

その他

  • genReturn と genJmpPlaceArgs は compIsProfilerHookNeeded() の際に genProfilingLeaveCallback を呼び出しますが、genFnProlog の対応する enter コールバックは WASM では #if !TARGET_WASM でコンパイル除外されていました。この不対称性により、enter フックなしで leave フックが発行される状態が発生していました。
  • 本 PR はプロファイラ ELT の完全な実装ではなく、暫定的な修正です。

#130945 [Wasm RyuJit] fix throw helper layout for side try entries in enclosed regions

概要

Wasm RyuJit において、囲まれた try 領域がサイドエントリ(例:async 再開)を持つ場合に、throw helper ブロックのレイアウト配置を正しく保つためのフロー グラフ後続列挙の修正です。各領域内および囲まれたすべての try 領域内の helper ブロックへのエッジを追加することで、throw helper が各領域内のブロック後に配置されるようにします。

変更内容

  • compiler.h: ACD(Add Code Desc)領域種別を示す magic bit 値(0x40000000/0x80000000)を名前付きフラグ定数に置き換え。AddCodeDscKey::Designator() および AddCodeDscKey::RegionIndex() ヘルパーメソッドを追加してパック化された ACD キーデータの解釈を容易に。
  • fgwasm.h: Wasm 後続列挙を拡張し、サイドエントリを持つ try 領域に対して囲まれた try 領域の throw helper を後続として追加するロジックを実装。
  • flowgraph.cpp: AddCodeDscKey と bbThrowIndex において、magic bit 値の代わりに名前付き ACD フラグ定数を使用。

パフォーマンスへの影響

影響なし

関連Issue

#130153(本修正が一般化したもと)

その他

  • この変更は内部実装(JIT コンパイラのエラーハンドリング(EH)領域レイアウト)に限定されます。
  • Wasm ターゲット固有の修正であり、公開 API への影響はありません。

#130941 [wasm] Fix v128.load / v128.store opcodes in the R2R ObjectWriter

  • 作成者: @lewing
  • 作成日時: 2026年07月17日 01:27:04(UTC)
  • マージ日時: 2026年07月17日 06:17:26(UTC)
  • ラベル: area-VM-coreclr

概要

R2R Wasm ObjectWriterにおける128ビットメモリ命令(v128.load/v128.store)のオペコード定数が誤っていた問題を修正しました。修正前はV128Loadがv128.load64_splat、V128Storeがv128.loadに対応する値になっていたため、Vector128<T>値をスピル/リロードするサンク関数が無効なWebAssemblyモジュールまたは破損したベクトル値を生成していました。

修正内容:

// 修正前
V128Load  = unchecked((int)0xFD00000A),   // 誤り: v128.load64_splat
V128Store = unchecked((int)0xFD000000),   // 誤り: v128.load

// 修正後
V128Load  = unchecked((int)0xFD000000),   // 正: v128.load (0xFD 0x00)
V128Store = unchecked((int)0xFD00000B),   // 正: v128.store (0xFD 0x0B)

変更内容

  • src/coreclr/tools/Common/Compiler/ObjectWriter/WasmInstructions.cs
    • WasmExprKind.V128Loadを0xFD000000に修正(v128.load対応)
    • WasmExprKind.V128Storeを0xFD00000Bに修正(v128.store対応)
    • 作成者がWasmExprKindの全オペコードを仕様と照合し、この2つのみが不正だったことを確認

パフォーマンスへの影響

影響なし

関連Issue

  • #130866(Wasm v128 ABI作業によりこの問題が顕在化)

その他

  • この問題は以前潜在していました。Vector128<T>がメモリ値で渡されるようになるまで、V128.Store/V128.Loadは実際には出力されていませんでした。
  • 修正後、Vector128メソッド呼び出しのディレイロード・サンク関数がスピル時に有効なv128.store、リロード時に有効なv128.loadを生成することを確認済みです。

#130939 [wasm] Disable optimistic instruction sets for WASI R2R

  • 作成者: @lewing
  • 作成日時: 2026年07月17日 01:08:51(UTC)
  • マージ日時: 2026年07月17日 04:24:29(UTC)
  • ラベル: area-crossgen2-coreclr

概要

crossgen2がWASI(WebAssembly System Interface)ターゲットを、インタープリータのみで動作し実行時コード生成がないプラットフォーム(iOS、tvOS、Browser等)と同じ扱いにするよう修正。WASI向けのReadyToRun(R2R)イメージで、実行できない楽観的な命令セットが焼き込まれることを防ぎます。

if (targetOS is TargetOS.iOS or TargetOS.tvOS or TargetOS.iOSSimulator or TargetOS.tvOSSimulator
    or TargetOS.MacCatalyst or TargetOS.Browser or TargetOS.Wasi)

変更内容

  • src/coreclr/tools/aot/crossgen2/Program.cs: TargetOS.Wasiを楽観的(非ベースライン)命令セットを無効化する対象リストに追加(allowOptimistic = falseを強制)

パフォーマンスへの影響

影響なし。ただし、WASI向けR2Rイメージのコンパイル時に楽観的な命令セット最適化がスキップされるため、生成されるコードはより保守的になります。

関連Issue

なし

その他

  • 変更は単一トークンの追加で、WASI向けクロスコンパイルの正確性を改善する最小限の修正です
  • crossgen2のビルド確認済み(clr.aot、エラー0)
  • GitHub Copilotの支援を受けた変更です

#130937 Add check that libnethost contains no LTCG objects

  • 作成者: @elinor-fung
  • 作成日時: 2026年07月17日 00:15:54(UTC)
  • マージ日時: 2026年07月17日 16:30:41(UTC)
  • ラベル: area-Host

概要

libnethostビルド時にLTCG(/GL)オブジェクトが誤って含まれることを防ぐため、MSVCリンカーの出力を検査するCMakeリンカーランチャーを追加します。ビルド時に "module compiled with /GL found" メッセージが検出された場合、ビルドを失敗させます。

変更内容

  • run-linker-verify-no-ltcg.cmake(新規): MSVCリンカー出力を検査し、LTCG関連のメッセージを検出したらビルドを失敗させるリンカーランチャースクリプト
  • CMakeLists.txt: nativehost_staticターゲットにリンカーランチャーを接続し、IPOを無効化。hostmiscからhostmisc_public(IPO無効のOBJECTライブラリ)への依存を切り替え、LTCGオブジェクトの混入を防止

パフォーマンスへの影響

影響なし。ビルド時の検証ステップが追加されるのみで、実行時パフォーマンスに影響しません。

関連Issue

#111651(参考となったPR)

その他

このPRは既存のnativehost_staticテストのリンクステップに検証機能を統合するもので、過去にLTCGオブジェクトがlibnethostに混入した問題の再発防止が目的です。MSVCリンカー固有の対応となります。


#130936 Add regression test for #124749

概要

#124749で報告されたJITアサーション("Write to unaliased local overlaps outstanding read")のリグレッションテストを追加します。このバグはすでに#128962で修正されており、本PRは修正内容のカバレッジを追加するもので、プロダクトコード変更はありません。

変更内容

  • Runtime_124749.csproj: 新規テストプロジェクト。プロセス分離とティアード コンパイルを無効化し、JIT動作を安定化させるための設定を含む
  • Runtime_124749.cs: xUnitベースのリグレッションテスト。AVX-512 SIMD intrinsics(negation + add/sub操作の組み合わせ)を再現し、Avx512CD.VL.IsSupportedでテスト実行をゲート

技術的詳細: fgOptimizeHWIntrinsicがAdd(Neg(X), Y)をSub(Y, X)に書き換える際、オペランド評価順が逆転します。CSEがX内にCOMMA(STORE cse_temp, use)定義を配置し、Yに裸のLCL_VAR cse_tempを残した場合、スワップによってuse-before-defアサーションが発火していました。#128962の修正ではgtCanSwapOrder(op1, op2)ガードを追加し、op1がGTF_ASGを持つ場合はfalseを返すことで防止しています。

パフォーマンスへの影響

影響なし(テスト追加のみ)

関連Issue

#124749 (本PR で解決), #128962 (修正済み), #130936

その他

  • このテストはAVX-512 CDおよびVL拡張をサポートする環境でのみ実行されます
  • テスト環境がAVX-512を持たない場合、テストはno-opですが、SPMI収集がAVX-512対応環境で検証済みです

#130934 Clarify WASM shuffle/swizzle codegen comments

概要

WASM SIMD shuffle/swizzle命令のコード生成に関する説明コメントを改善するPR。#130850のマージ後フォローアップとして、コメントの正確性と明確性を向上させました。機能的な変更はありません。

変更内容

  • src/coreclr/jit/hwintrinsiccodegenwasm.cpp: Swizzle含有マスクのコメントを修正。genConsumeMultiOpOperandsは値スタックに影響を与えないため、「prior codegen left the source on the value stack once」と記述を改めました。

  • src/coreclr/jit/gentree.cpp: TARGET_WASM Shuffle降下分岐にコメントを追加。要素単位のセレクタがi8x16.swizzle用に連続したバイトインデックスに展開される仕組みと、範囲外セレクタが0xFFになって要素をゼロ埋めする動作を説明。冗長になったインラインコメントを削除。

パフォーマンスへの影響

影響なし

関連Issue

#130850

その他

  • コメント専用のPRで機能的な変更なし
  • 第3のコメント(lowerwasm.cpp、i8x16.shuffleの第2オペランドへの定数ゼロ供給)についてはスレッド内で対応済み。ソースのlocal.getの方が16バイトv128.constゼロの具体化より小さく、Swizzleノードが2オペランド(ソース、マスク→即値)で第2ベクトルスロットがないため特殊ケースを除去できない

#130930 [release/10.0] Fix ComClassGenerator failure with generic types

概要

COM相互運用ソースジェネレータで汎用型(ジェネリック型)の処理に失敗していた問題を修正します。汎用型の名前解析がサポートされていなかったため、ジェネリック型を含むCOMインターフェイスのコード生成が失敗していました。.NET 10で外部顧客から報告されており、この修正により組み込みCOMシナリオからソースジェネレーションへの移行がブロック解除されます。

変更内容

  • ComClassGenerator.cs: ソースジェネレータのジェネリック型名の解析ロジックを改善(3行追加、1行削除)
  • ComClassGeneratorOutputShape.cs: ジェネリック型を含むCOMクラスのコード生成を検証するテストケースを追加(21行追加)

パフォーマンスへの影響

影響なし

関連Issue

#122197(オリジナルの実装PR)

その他

  • このPRはrelease/10.0ブランチへのバックポート版です
  • 過去、ジェネリック型はCOMでサポートされていなかったため、この問題は新規発見です
  • リスク評価:低(ソースジェネレータの名前解析機能の拡張のみ)
  • テストが追加されているため、回帰防止が確保されています

#130917 [release/9.0-staging] Migrate devdiv/dotnet-core-internal-tooling to WIF service connection

概要

release/9.0-stagingブランチへのバックポート。devdiv/dotnet-core-internal-toolingをWIF(Workload Identity Federation)サービス接続に移行する変更です。

変更内容

  • eng/pipelines/common/restore-internal-tools.yml: WIFサービス接続への移行に関連するパイプライン設定を更新(3行追加、1行削除)

パフォーマンスへの影響

影響なし

関連Issue

#130264

その他

なし


#130916 [release/10.0] Migrate devdiv/dotnet-core-internal-tooling to WIF service connection

概要

release/10.0ブランチへの#130264のバックポート。devdiv/dotnet-core-internal-toolingをWIF(Workload Identity Federation)サービス接続に移行する変更です。

変更内容

  • eng/pipelines/common/restore-internal-tools.yml: WIFサービス接続関連の設定を追加・修正(3行追加、1行削除)

パフォーマンスへの影響

影響なし

関連Issue

#130264(オリジナルPR)

その他

  • 自動化されたバックポートPR(github-actions[bot]による作成)
  • パイプライン設定の変更であり、ランタイムコードの変更は含まれない
  • CI/CDパイプラインの認証方式更新に関連する変更

#130915 [release/8.0-staging] Migrate devdiv/dotnet-core-internal-tooling to WIF service connection

概要

release/8.0-stagingブランチへのバックポート(#130264より)。内部ツール復元パイプラインの設定を更新します。

変更内容

  • eng/pipelines/common/restore-internal-tools.yml: WIF(Workload Identity Federation)サービス接続への移行対応(+3/-1)

パフォーマンスへの影響

影響なし

関連Issue

#130264

その他

このPRはdevdiv/dotnet-core-internal-toolingをWIFサービス接続に移行するための設定変更です。具体的な設定変更の詳細は提供された情報に含まれていません。


#130913 SuperPMI: fix spurious arm asmdiffs from out-of-range BL relocs

概要

SuperPMIのasm-diffing検証を改善し、ARM32のBL(Branch and Link)命令における誤検知の削減と、baseline/diff JITが同じモジュールに解決される場合の検出を実装しました。ARM32_THUMB_BRANCH24リロケーションで、記録されたリロケーション情報を参照して比較することで、±16MBを超える距離にあるコールサイトでのプレースホルダ置換による偽陽性差分を防ぎます。

変更内容

  • superpmi.cpp: baseline/diff JITが同じ読み込まれたモジュールに解決される場合にエラーで終了する起動チェックを追加
  • jitinstance.h: 読み込まれたJITモジュールハンドルを公開するためのアクセサ getModule() を新規追加
  • neardiffer.cpp: ARM32オフセット比較をリロケーションメタデータに基づいた意味的等価性チェックに調整し、パッチ済みBLイミディエートからの偽陽性差分を回避
  • compileresult.cpp: 軽微な変更(+7/-7)

パフォーマンスへの影響

影響なし

関連Issue

#130736

その他

この変更はSuperPMIツール(JITコンパイラの検証ツール)の内部実装改善であり、公開APIへの影響はありません。ARM32アーキテクチャ特有の問題に対する修正です。


#130911 [cDAC] Fix x86 context flags

  • 作成者: @rcj1
  • 作成日時: 2026年07月16日 19:17:16(UTC)
  • マージ日時: 2026年07月17日 18:01:39(UTC)
  • ラベル: area-Diagnostics-cdac

概要

x86プラットフォームのコンテキストフラグの処理に関する修正です。cDAC(Compact DAC)のスタックウォーク機能において、x86コンテキストの初期化時のフラグ値が修正されています。

変更内容

  • X86Context.cs: x86コンテキストフラグの設定を修正(2行変更)
  • PlatformContextTests.cs: x86コンテキストフラグに関するテストケースを追加(11行追加)

パフォーマンスへの影響

影響なし

関連Issue

#130911

その他

変更はcDAC(Compact Data Access Component)の診断機能に関するもので、実行時のデバッグやダイアグnosticsに影響する可能性があります。テストケースの追加により、修正内容の正確性が検証されています。


#130909 [cDAC] Add the last two location types to DebugVarInfo cDAC representation

  • 作成者: @rcj1
  • 作成日時: 2026年07月16日 19:15:09(UTC)
  • マージ日時: 2026年07月17日 00:15:57(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Data Access Contract)のDebugInfo機能を拡張し、残りの2つの変数ロケーションタイプ(VLT_FPSTK浮動小数点スタック、VLT_FIXED_VA固定可変長引数)をサポートするための対応です。新しいDebugVarLocKind列挙値の追加と、対応するDebugVarInfoフィールドによる表現・ラウンドトリップを実装しました。

変更内容

  • IDebugInfo.cs: 新しいDebugVarLocKind列挙値(FloatingPointStack、FixedVarArg)を追加
  • DebugInfoHelpers.cs: VLT_FPSTKとVLT_FIXED_VAのデコード処理を実装し、新しいDebugVarInfo表現にマッピング
  • DacDbiImpl.NativeCodeInfo.cs: VarLocの変換処理と検証ロジックを拡張して新しいロケーションタイプに対応
  • DacDbiImplTests.cs: FPスタックと固定可変長引数のVarLocデコード・マッピング処理の単体テストを追加(77行)
  • DebugInfo.md: コントラクト仕様ドキュメントを更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

テスト中に浮動小数点コンテキストの動作で発見された問題への対応です。cDAC内部のDebugInfo表現に関する変更で、公開APIレベルでの変更ではありません。既存のVarLocマッピング機能との互換性を維持しつつ、以前サポートされていなかったロケーションタイプの完全なサポートを実現しています。


#130899 Add RuntimeHelpers.IsRuntimeAsync intrinsic

概要

RuntimeHelpers.IsRuntimeAsyncイントリンシックを追加し、インタープリタとJITがこれを呼び出し関数がランタイム非同期かどうかに基づいて定数に折り畳むようにします。これにより、特に.NET 11でランタイム非同期がRoslynでオプトインである場合、async1呼び出し元の回帰を防ぐことができます。

// 使用例
if (RuntimeHelpers.IsRuntimeAsync())
{
    // ランタイム非同期コンテキストでのコード
}

変更内容

  • System.Private.CoreLib: RuntimeHelpers.IsRuntimeAsync()メソッドを追加
  • namedintrinsiclist.h: イントリンシック定義にIsRuntimeAsyncを登録
  • jit/importercalls.cpp: JITコンパイラがイントリンシックを認識・折り畳む処理を実装
  • jit/fgbasic.cpp: フロー解析時の定数折り畳み処理
  • interpreter/intrinsics.cpp: インタープリタがイントリンシックを認識する処理を追加
  • interpreter/compiler.cpp: インタープリタでの定数折り畳み実装

パフォーマンスへの影響

定数折り畳みによりJIT生成コードとインタープリタ実行時に条件判定が静的に解決されるため、実行時のランタイム非同期状態チェック処理が削減され、わずかなパフォーマンス向上が期待できます。

関連Issue

#130872、#130689

その他

なし


#130892 Fix .NET Framework build: exclude TrimmingTests from compilation

概要

.NET Framework対応時のビルド失敗を修正するPR。HybridCacheEntryOptionsAccessorTest.csが.NET 8+専用のUnsafeAccessorAttribute/UnsafeAccessorKindを使用しているため、net481をターゲットとする際にコンパイルエラーが発生していた。TrimmingTestsディレクトリをプロジェクトのデフォルトコンパイル対象から除外することで解決。

変更内容

  • Microsoft.Extensions.Caching.Abstractions.Tests.csproj: <Compile Remove="TrimmingTests\**" />を追加し、TrimmingTestsディレクトリ配下のソースをテストアセンブリのコンパイル対象から除外。これによりTrimmingTestsは別の*.TrimmingTests.projでスタンドアロンコンソールアプリとしてビルドされることが明記される。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は内部実装の修正であり、公開APIへの影響はない。.NET Framework(net481)とのマルチターゲット環境でのビルド互換性を復旧させるためのビルド設定調整。


#130890 Implement INumber, IFloatingPoint, and the modulus operator for the IEEE 754 decimal types

概要

IEEE 754 decimal型(Decimal32、Decimal64、Decimal128)に対して、IFloatingPoint<TSelf>、INumber<TSelf>、ISignedNumber<TSelf>、IFloatingPointConstants<TSelf>インターフェイスを実装し、modulus演算子(%)を追加します。このPRは#81376の段階的なビルドアウトの一部で、前回のPR #130807で追加された変換サーフェイスとINumberBase<TSelf>に続くものです。

変更内容

  • Number.DecimalIeee754.cs: truncated remainder(%/fmod)およびrounding to fractional digitsの共有ヘルパーメソッドを追加
  • Decimal32/64/128.cs: 以下の実装を追加
    • %演算子(IModulusOperators<TSelf, TSelf, TSelf>)
    • IFloatingPoint<TSelf>: Round(全overload)、Ceiling、Floor、Truncate、GetExponentByteCount/GetSignificandByteCount/TryWrite*ビットAPI
    • INumber<TSelf>: Max/Min/MaxNumber/MinNumber/Clamp/Sign/CopySign等(System.Halfのセマンティクスに準ずる)
    • ISignedNumber<TSelf>: NegativeOne
    • IFloatingPointConstants<TSelf>: E、Pi、Tau(各形式の精度に正しく丸められた値)
  • System.Runtime.cs: 公開ref surfaceを新しいインターフェイスとメンバーで更新
  • テストファイル(Decimal32/64/128Tests.cs、DecimalIeee754IntelTestData.cs): modulus、round-to-digits、exponent/significand write APIのテストを追加。Intel参照ベクトルとの検証も実施

パフォーマンスへの影響

影響なし

関連Issue

#81376、#130807

その他

  • %演算子はfloat/double/Halfと同じ truncated-remainder(fmod)セマンティクスに従います(x - Truncate(x / y) * y)。IEEE 754のround-to-nearest quotient(IEEE754Remainder)とは異なり、そちらはIFloatingPointIeee754の追加時に実装予定
  • 主要なメンバーはIntel BID参照実装からポーティングされ、参照ベクトルに対してbit-exactに検証済み
  • IFloatingPointIeee754<TSelf>/IDecimalFloatingPointIeee754<TSelf>とその関連インターフェイスは今後のPRで別途実装予定

#130889 [cDAC] Include the highest assigned ID in IdToThread lookup

概要

cDAC(Compact Debugger Access Component)のIThread.IdToThread実装におけるオフバイワンエラーを修正。ネイティブランタイムのIdDispenser::IdToThreadは包含的上限(id <= m_highestId)を使用していますが、cDACの実装は排他的比較(id <)を使用しており、最高ID番号のスレッドが解決できませんでした。

変更内容

  • Thread_1.cs: IdToThreadルックアップの上限チェックをid <= idDispenserObj.HighestIdに修正(包含的上限)
  • ThreadTests.cs: 最高IDが期待通りのスレッドに解決され、HighestId + 1がnullを返すことを検証する新規単体テストThreadTests.IdToThread_IncludesHighestIdを追加
  • Thread.md: Thread契約仕様のアノテーション化されたコードを包含的上限の動作に合わせて更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • ネイティブセマンティクスの整合性確保:ネイティブ実装(src/coreclr/vm/threads.h)と同等の境界条件に統一
  • テスト結果:cDAC単体テストスイート全体で2705件合格、16件スキップ、0件失敗
  • 対象外:リサイクルされたディスペンサースロット検証(IdToThreadWithValidation内のフリーリストチェック)は修正範囲外
  • Copilot補助による実装

#130878 [wasm] Correctly materialize integer constants in genCodeForConstant

概要

WebAssembly JITバックエンドのgenCodeForConstantにおける2つの正確性修正です。ハンドル定数がcompReloc設定に関わらず常に適切に再配置されるようにし、i32.constが符号なしを含む任意の32ビットパターンを受け入れるようにします。これにより、SuperPMI replay時のアサーション失敗が大幅に削減されます。

変更内容

  • src/coreclr/jit/codegenwasm.cpp
    • ハンドル定数(IsIconHandle())をopts.compRelocの設定に関わらず常にemitAddressConstant()経由でルーティング。WebAssemblyには絶対アドレスリテラルが存在しないため、すべてのハンドルはモジュールベース相対の再配置定数として具体化される必要があります。
    • i32.const発行時のアサーションを緩和し、符号付きINT32または符号なしUINT32の両方を受け入れるように変更。Wasmの整数は符号不定であり、値は正規的なSLEB128エンコーディングのため符号付き32ビット形式に正規化されます。

パフォーマンスへの影響

影響なし(正確性修正)。

SuperPMI replay結果(coreclr_tests および libraries_tests_no_tiered_compilation):

メトリクス coreclr FitsIn libs FitsIn coreclr total ISSUE libs total ISSUE
修正前 151,242 118,936 179,560 141,917
修正後 1,440 5,274 47,610 30,288

ハンドルルーティング修正でFitsInアサーション失敗のほぼ全量削減を達成。残存するカウントは64ビットホストアドレス定数(凍結オブジェクト/スタティックベースアドレス)が主で、これらはx64ホスト上のruntime-JIT収集下でのみ発生する已知の問題です。

関連Issue

なし

その他

  • この修正は内部実装(JITコンパイラのコード生成)に限定されるため、公開APIへの影響はありません。
  • ハンドル定数ルーティング修正が削減効果の大部分を占めており、i32.const緩和が符号なしパターンケース(例:UIntPtrジェネリック数学)のブロック解除に追加で機能します。

#130874 Add missing helix-platforms variables to superpmi-collect

概要

superpmi-collectパイプラインで、Helixプラットフォーム設定に不足していたhelix_macos_arm64_latest_internal変数を追加するための修正です。これにより、Helixビルドシステムにおける「エントリが存在しない」エラーを解決します。

変更内容

  • eng/pipelines/coreclr/superpmi-collect-test.yml: helix-platforms変数に不足していたマッピングを追加(+1行)
  • eng/pipelines/coreclr/superpmi-collect.yml: helix-platforms変数に不足していたマッピングを追加(+1行)

パフォーマンスへの影響

影響なし

関連Issue

#130874

その他

本修正はビルドパイプラインの設定に関するもので、Helixプラットフォーム構成に必要な変数定義を補完するものです。macOS ARM64プラットフォームに対する内部ビルド環境の対応が目的と推測されます。


#130873 Handle cross-targeting Vector<T> size mismatch in the JIT

概要

getBaseTypeAndSizeOfSIMDTypeがJIT計算のSIMDサイズとVMのクラスサイズの不一致をアサートしていた問題を修正します。クロスターゲティング時(例:SuperPMI、x64キャプチャコンテキストをwasmで再生)にVector<T>のサイズがターゲット依存になるため、サイズ不一致時はVector<T>を通常のstructとして扱う(SIMD対応なし)ようにします。これにより、後続のサイズクエリとVM間の一貫性を保ちながら、マッチしたVM環境では既存の動作は変わりません。

変更内容

  • src/coreclr/jit/simd.cpp: Vector<T>のサイズ不一致チェックを追加し、クロスターゲティング環境でのアサート失敗を回避します。JIT計算のgetVectorTByteLength()がVMの記録されたクラスサイズと異なる場合、Vector<T>を非SIMD型(TYP_UNDEF)に格下げします。

パフォーマンスへの影響

なし。この変更はアサート失敗のシナリオのみに影響し、マッチしたVM環境では影響ありません。

関連Issue

#130873

その他

検証結果:SuperPMI base-vs-diff検証(wasmアルトJIT、JitWasmSimdNyiToR2RUnsupported=1、ライブラリMCH 397,158コンテキスト):

  • simd.cpp (448)のアサート発生回数:137 → 0
  • 他のアサートシグネチャ:変更なし(バイト同一)
  • 新しいアサート署名は導入されず、従来のアサーティングVector<T>メソッドはSuperPMIミス(wasm SIMD NYIパスで既に許容される)として再生されるようになりました。

#130856 Add DacDbiInterfaceInstance to cdac

  • 作成者: @hoyosjs
  • 作成日時: 2026年07月16日 09:17:46(UTC)
  • マージ日時: 2026年07月17日 21:25:08(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(mscordaccore_universal)にDacDbiInterfaceInstanceエントリポイントを追加し、DBI(Debugger Backend Interface)が管理対象のデータコントラクトリーダーによってサポートされたIDacDbiInterfaceを取得できるようにします。これにより、DBI は従来はネイティブDAC経由でのみサービスされていたのに対し、cDAC経由でのサービスが可能になります。

変更内容

  • DacDbiImpl.cs: スタンドアロンパス(非レガシー)でのCheckDbiVersionおよびDacSetTargetConsistencyChecksの実装を追加。DacSetTargetConsistencyChecksはスタンドアロンパスで常に成功を返す。
  • IDacDbiInterface.cs: ICorDebugDataTarget COM相互運用宣言を追加し、DbiVersionフィールドレイアウトをネイティブに合わせて更新。
  • ICLRData.cs: ランタイムベースの交差チェック用にICLRRuntimeLocator COM相互運用宣言を追加。
  • Entrypoints.cs: DacDbiInterfaceInstanceアンマネージドエントリポイントと、ICorDebugDataTargetからContractDescriptorTargetを構築するヘルパーを追加。
  • CorDbHResults.cs: マネージド使用向けにCORDBG_E_INCOMPATIBLE_PROTOCOL定数を追加。
  • DacDbiImplTests.cs: スタンドアロンDacDbiのバージョンチェックと一貫性チェックの切り替えのユニットテストを追加。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 設計上、cDAC はランタイムベースの自己位置特定を埋め込まれたコントラクト記述子経由で実行し、渡されたランタイムベースはICLRRuntimeLocator::GetRuntimeBaseとの交差チェックにのみ使用されます。
  • ターゲットは読み取り専用で、メモリ書き込みパスはE_NOTIMPLを返します。
  • DBI は既に期待するエクスポート名とシグネチャを持つネイティブDAC互換のエントリポイントを取得でき、スタンドアロンパスと一貫した起動モデルが実現されています。

#130855 Fix: TryGenerateStructMarshallingMethod asserts on non-struct T in StructureMarshaler<T>

  • 作成者: @Copilot
  • 作成日時: 2026年07月16日 08:25:45(UTC)
  • マージ日時: 2026年07月17日 17:24:35(UTC)
  • ラベル: area-Interop-coreclr

概要

TryGenerateStructMarshallingMethod内のデバッグアサーション(_ASSERTE(pStructMT->IsValueType()))を削除し、実行時ガードに置き換えた変更です。StructureMarshaler<T>に値型以外の型(例:StructureMarshaler<object>)が渡された場合、デバッグビルドでプロセスがクラッシュするという問題を修正します。修正後は、JITがfalseを返してC#のデフォルト実装にフォールバックし、アサーション失敗を回避するようになります。

変更内容

  • src/coreclr/vm/dllimport.cpp: デバッグアサート_ASSERTE(pStructMT->IsValueType())を、Tが値型でない場合にfalseを返す実行時ガードに変更(+8/-1)

パフォーマンスへの影響

影響なし

関連Issue

#129649

その他

この変更は内部実装(CoreCLR VM)の修正で、jit-dasm-pmiなどのツールでRuntimeHelpers.PrepareMethodを呼び出す際の安定性向上を目的としています。公開APIの変更はありません。


#130826 Add System.Diagnostics.StackTrace.Tests to native AOT smoke test

概要

Native AOT環境でのスタックトレース機能の動作確認を強化するため、System.Diagnostics.StackTrace.TestsをNative AOTスモークテストに追加します。このテストプロジェクトはNative AOT環境特有のコードパスを網羅しています。

変更内容

  • src/libraries/tests.proj: System.Diagnostics.StackTrace.TestsをテストNativeAotスモークテストリストに追加(Android、Apple-mobileを除く)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはテスト範囲の拡大であり、Native AOT環境下でのスタックトレース関連の実装が正しく動作することを保証するための変更です。


#130816 [wasi] Add CoreCLR-WASI corehost (wasihost)

概要

CoreCLR-WASI用の軽量な独立型corehostであるwasihostを新規追加します。これは静的アーカイブlibWasiHost.aとして構築され、browserhost/apphostのモデルに従い、CoreCLR-WASIライブラリテストが出荷ホストアーカイブに対してリンク可能になります。従来のcorerunの再リンクが不要になり、corerunはランタイムテスト専用として分離されます。

変更内容

  • src/native/corehost/wasihost/ (新規): CoreCLR-WASIホスト実装

    • wasihost.cpp: CORE_ROOTベースのプロパティ構築、ランタイムコントラクト設定、ICU事前ロード、アセンブリ実行/シャットダウン、終了マーカー出力を実装
    • CMakeLists.txt: libWasiHost.aの構築・インストール、corerun PAL ヘッダの再利用
    • configure.cmake: config.h生成(corerun共有ヘッダの機能チェック用)
    • config.h.in: config.hテンプレート
  • ビルド・パッケージング変更:

    • corehost/CMakeLists.txt: WASI固有のビルドブランチを追加(wasihostのみビルド、hostmisc依存なし)
    • corehost.proj: WASI SDK取得、libWasiHost.aをランタイムパックネイティブディレクトリにステージング
    • Directory.Build.props: libWasiHost.aをプラットフォームマニフェストに追加
    • liveBuilds.targets: libWasiHost.aをWASI CoreCLRランタイムパックに含含(runtime-testsビルドは除外)

パフォーマンスへの影響

影響なし。ホストの構築・パッケージングの改善であり、ランタイム動作への変更ではありません。

関連Issue

#130745(CoreCLR-WASIライブラリテスト基盤。本PRは該当のホスト実装基盤)

その他

  • 実装は__main_argc_argvをエントリポイント(whole-archive)として定義し、coreclr_initialize/coreclr_execute_assemblyを実行します
  • P/Invoke override設定により、app生成のcallhelpers_pinvoke_overrideを登録(ランタイムコントラクト経由)
  • GlobalizationNative_LoadICUDataを弱参照として定義しICU事前ロードに対応(invariantモードでは省略)
  • DOTNET_WASI_PRINT_EXIT_CODE=1下でWASM EXIT <n>マーカーを出力
  • 検証済み: System.Runtime.Testsのリリンク後、wasmtime上でのCoreeCLR初期化・テスト実行が成功(251/251テスト成功)

#130794 Document Process timing properties after exit

概要

System.Diagnostics.Processのタイミング関連プロパティ(StartTime、ExitTime、プロセッサー時間)がプロセス終了後にどのように動作するかを文書化し、クロスプラットフォーム対応のテストカバレッジを追加するPRです。Windows ではプロセスハンドルを通じてタイミング情報が保持されますが、Unix系ではプロセス回収時に未キャッシュ情報が破棄される動作の違いを明確にしています。

変更内容

  • Process.cs: StartTimeとExitTimeのキャッシング動作と例外発生時の動作をXML文書に記載
  • Process.Windows.cs: Windows でのプロセッサー時間プロパティが終了後も取得可能であることを文書化
  • Process.Linux/OSX/FreeBSD/OpenBSD/SunOS/iOS.cs: Unix系各OS で終了後にプロセッサー時間プロパティが InvalidOperationException をスローすることを文書化
  • ProcessTests.cs: 即座にプロセスが終了した後のタイミングプロパティの動作をクロスプラットフォームで検証するテストを追加

パフォーマンスへの影響

影響なし

関連Issue

#125741

その他

  • 変更は公開API ドキュメント(XML コメント)の充実とテストカバレッジの追加のみで、実装変更なし
  • クロスプラットフォーム間の動作差異が明確に文書化されるため、開発者が各OS での挙動を事前に理解可能

#130766 Add Android CoreCLR runtime tests

概要

Android x64エミュレーター上でのCoreC LR ランタイムテストのInnerloopカバレッジを追加します。新しいジョブはclr+libsをビルドし、Androidランタイムテストをパッケージ化して、Ubuntu 22.04環境でHelix実行します。同時に、CoreCLRの共有フレームワークで既に提供されているネイティブアーカイブの重複を回避するため、ライブビルドパッケージング処理を改善します。

変更内容

  • runtime-extra-platforms-androidemulator.yml: Android x64 CoreCLRランタイムテスト用の新規Helixサブミッションジョブを追加
  • liveBuilds.targets: Android CoreCLR向けにCoreC LR共有フレームワークで既に提供されているネイティブアーカイブをLibrariesRuntimeFilesから除外(NativeAOT runtime packの動作は保持)
  • runtime-extra-platforms-android.yml: 廃止されたAndroid ARM64 Mono runtime-test構成を削除(.NET 11モバイルテスティングではCoreC LRとNativeAOTを使用)

パフォーマンスへの影響

影響なし(CI/CDパイプラインの改善であり、ランタイムパフォーマンスには直接的な影響なし)

関連Issue

#60128

その他

検証結果: android-x64 Release AllSubsets_CoreCLR_RuntimeTestsジョブが75個のHelixワークアイテムすべて完了し、0件の失敗を記録。


#130724 Merging internal commits for release/8.0

概要

.NET 8.0向けのリリース内部コミットのマージです。複数のネットワーク・セキュリティ・XML処理関連ライブラリにおいて、バグ修正、パフォーマンス改善、セキュリティ対策が実施されています。主な対象は System.Net.Http、System.Net.Security、System.Private.Xml、System.Security.Cryptography.Xml です。

変更内容

System.Net.Http:

  • Http2Connection.cs: HTTP/2接続処理の改善(53行追加)
  • Http2StreamWindowManager.cs: ウィンドウマネージャー修正
  • SocketsHttpHandlerTest.cs: HTTP/2機能テスト追加(170行)
  • Strings.resx: エラーメッセージ追加

System.Net.Security:

  • SslStream.IO.cs: SSL/TLS I/O処理の調整
  • NegotiateAuthentication.cs: 認証処理の改善
  • TlsFrameHelper.cs: TLSフレーム処理修正
  • テスト追加(SslStreamStreamToStreamTest.cs、NegotiateAuthenticationTests.cs)
  • Strings.resx: エラーメッセージ追加

System.Net.Mail:

  • EightBitStream.cs: メール送信時のストリーム処理改善(57行追加)

System.Private.Xml:

  • XPathNodeInfoAtom.cs、XmlTextReaderImpl.cs、XmlTextReaderImplHelpers.cs: XML処理の最適化
  • AttributeReadingPerformanceTests.cs: パフォーマンステスト追加(183行)

System.Security.Cryptography.Xml:

  • LocalAppContextSwitches.cs: AppContextスイッチ追加(31行)
  • CryptoHelpers.cs、SignedXml.cs、Transform.cs他: XML署名・暗号化処理の改善
  • 複数のTransform実装クラスに検証ロジック追加

パフォーマンスへの影響

  • XML属性読み取り: XmlTextReaderImpl.cs の最適化により属性読み取り処理が改善(AttributeReadingPerformanceTests.cs で検証)
  • メール送信: EightBitStream.cs の改善によりストリーム効率が向上

関連Issue

なし

その他

  • 複数のセキュリティ関連モジュール(System.Security.Cryptography.Xml)で AppContextSwitches を導入し、互換性維持のための制御メカニズムが追加されています
  • 広範なテストスイート拡充(HTTP/2、SSL/TLS、XML属性読み取り)により、品質保証が強化されています
  • リソースファイル(Strings.resx)への複数エラーメッセージ追加から、新たなエラー処理・診断機能が実装されたと考えられます

#130665 Produce deprecated property in JsonSchema for obsolete types

概要

System.Text.Json の JSON Schema エクスポーターが [Obsolete] 属性を持つ .NET 型をエクスポートする際に、JSON Schema の deprecated キーワードを出力するように更新されました。JSON Schema 仕様(draft 2020-12)に準拠した実装です。

変更内容

  • JsonSchema.cs: Deprecated プロパティを内部モデルに追加し、JSON シリアライズ時に出力するようにしました。
  • JsonSchemaExporter.cs: エクスポート対象の型に [Obsolete] 属性が付与されている場合、生成されたスキーマの deprecated: true を設定する検出ロジックを追加しました。
  • テスト: [Obsolete] 型に対して deprecated が正しく出力されることを検証するテストケースを追加しました。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 公開API への変更はなく、JSON Schema エクスポートの内部実装の機能追加です。
  • JSON Schema 出力形式の変更により、[Obsolete] マークされた型を含むスキーマは新たに deprecated: true フィールドを含むようになります。

#130638 Re-enable assert for R2R PE mapping failure on OSX

  • 作成者: @Copilot
  • 作成日時: 2026年07月13日 18:07:26(UTC)
  • マージ日時: 2026年07月17日 18:21:22(UTC)
  • ラベル: area-VM-coreclr

概要

Unix(Linux/macOS)プラットフォームにおけるReadyToRun (R2R) PEマッピング失敗を検出するデバッグアサーションを再度有効化します。以前はmacOSで無効化されていましたが、SDK/公開ビルドの修正が完了したため再度有効化し、同時にR2Rがイメージに対して許可されていない場合の条件も追加します。

変更内容

  • src/coreclr/vm/peimagelayout.cpp
    • アサーション保護条件を TARGET_LINUX から TARGET_UNIX に変更し、macOSを含めるようにしました
    • _ASSERTE 条件を改善し、R2Rヘッダが存在してもイメージに対して AllowR2RForImage(pOwner) が false である場合を除外するようにしました

パフォーマンスへの影響

影響なし(デバッグアサーション機能の変更のため、リリースビルドには影響しません)

関連Issue

なし

その他

この変更はPR #68845で一時的に無効化されたアサーションを再度有効化するものであり、CoreCLR VMにおけるR2R PE変換処理の堅牢性向上を目的としています。デバッグビルドにおいて、不正なR2R動作をより早期に検出できます。


#130555 [Android] Add missing JNI exception checks across crypto PAL

概要

AndroidプラットフォームにおけるSystem.Security.CryptographyネイティブPAL全体で、JNI例外チェックを追加し、未処理のJava例外がマネージドコードに漏洩することを防ぐセキュリティ強化PRです。後続のJNI呼び出しで未定義動作やデータ破損が発生するリスクを排除し、JNI例外発生時に区別可能なエラーコード(負の値など)を返すことで、マネージド層での適切な例外処理を実現します。

変更内容

ネイティブ実装(内部)

  • pal_x509chain.c — X509チェーン構築・検証・エラー収集の各フローにおいて、全てのJNI呼び出し後にON_EXCEPTION_PRINT_AND_GOTOを追加。ローカル参照管理をINIT_LOCALS/RELEASE_LOCALSパターンで統一
  • pal_bignum.c — BigNumToBinaryとGetBigNumBytesIncludingPaddingByteForSignにJNI例外チェックを追加。JNI例外発生時は-1を返す
  • pal_cipher.c — キー設定・AAD更新・CipherUpdateに例外チェックを追加。失敗時も含めて出力配列を全パスでリリース
  • pal_ecdsa.c、pal_eckey.c、pal_hmac.c、pal_misc.c、pal_pbkdf2.c、pal_sslstream.c、pal_x509.c — 各関数のCall*Method/NewObject/Get*ArrayRegion呼び出し後にJNI例外チェックを追加

マネージド実装(公開API に影響)

  • Interop.X509Chain.cs — X509ChainGetErrorCountの戻り値を負数にしてJNI例外を示すように変更。ラッパーがCryptographicExceptionをスロー
  • Interop.Bignum.cs — AndroidCryptoNative_BigNumToBinaryが-1をJNI例外として返すよう変更。ExtractBignumが腐敗したバッファを返さず例外をスロー

パフォーマンスへの影響

影響なし(例外チェックはエラーパスのみで、正常系のパフォーマンスに影響なし)

関連Issue

#128777

その他

  • ネイティブビルド(android-arm64 Release):警告/エラー 0件
  • マネージドビルド(System.Security.Cryptography含む):警告/エラー 0件
  • 「成功時のみ結果をアウト・パラメータに昇格させる」パターンを採用し、JNI例外発生時の部分出力状態を完全に排除

#130492 Use async ChangeToken.OnChange overload in FileConfigurationProvider

概要

FileConfigurationProviderのファイル変更検知時のリロードコールバックを、新しい非同期オーバーロード(Func<Task>)のChangeToken.OnChangeを使用するように更新しました。ブロッキング的なThread.Sleepによる遅延をの代わりに、await Task.Delayを使用することで、リロード前の遅延時間中にスレッドをブロックしないようになります。

_changeTokenRegistration = ChangeToken.OnChange(
    () => Source.FileProvider.Watch(Source.Path!),
    async () =>
    {
        await Task.Delay(Source.ReloadDelay).ConfigureAwait(false);
        Load(reload: true);
    });

変更内容

  • FileConfigurationProvider.cs: リロードコールバックを非同期ラムダに変更し、Thread.Sleep(Source.ReloadDelay)をawait Task.Delay(Source.ReloadDelay).ConfigureAwait(false)に置き換え。usingディレクティブをSystem.ThreadingからSystem.Threading.Tasksに更新。

パフォーマンスへの影響

スレッドプール効率の改善: リロード遅延中にスレッドがブロックされなくなるため、スレッドプール内のスレッドがより効率的に利用可能になります。特に複数のファイル監視が並行する環境で、スレッド枯渇のリスクが軽減されます。

関連Issue

#69099

その他

  • 他のChangeToken.OnChange呼び出し箇所(ConfigurationRoot、ConfigurationManager、OptionsMonitor)では、短い同期的な非ブロッキング処理(RaiseChanged/InvokeChanged)が使用されているため、非同期オーバーロードの利点がないため変更対象外とされています。
  • AspNetCoreリポジトリで関連する変更があります(aspnetcore#67732)。

#130416 Remove ThrowHelper from Microsoft.Extensions.Primitives

概要

Microsoft.Extensions.Primitives から独立した ThrowHelper パターンを廃止し、BCL の標準的な引数検証ヘルパー(ArgumentNullException.ThrowIfNull、ArgumentOutOfRangeException.ThrowIf*)と直接的な throw ステートメントに置き換えます。ダウンレベルターゲットフレームワーク用には共有の ExceptionPolyfills で対応します。

変更内容

  • ThrowHelper.cs を削除:レガシーな throw ヘルパーと ExceptionArgument/ExceptionResource 列挙型を廃止
  • StringValues.cs、StringTokenizer.cs、CompositeChangeToken.cs:null チェックを ArgumentNullException.ThrowIfNull に置き換え
  • StringSegment.cs:コールドパスの throw ヘルパーを導入して、inlining と高速パスチェックを保持しながら検証を近代化
  • InplaceStringBuilder.cs:ThrowValidationError を直接 throw に簡略化
  • ChangeToken.cs:ThrowHelper 使用と InvalidOperationException を直接 throw/リソースに置き換え
  • ExceptionPolyfills.cs:ThrowIfGreaterThan/ThrowIfGreaterThanOrEqual を追加(netstandard2.0/net462 ターゲット向けポリフィル)
  • テスト更新:新しい throw ヘルパー動作に合わせて ParamName を更新

パフォーマンスへの影響

影響なし。throw を含むメソッドは inlining されにくいため、チェック条件(if (parameter is null) など)はホットパスに留まり、実際の例外発生は別メソッドで処理されます。ArgumentNullException.ThrowIfNull などの BCL メソッドは容易に inlining されるため、パフォーマンス上の懸念は最小限です。StringSegment の単一比較高速パスは保持されています。

関連Issue

なし

その他

  • この変更は内部実装の近代化であり、公開 API に対する破壊的変更はありません
  • より簡潔で現代的なパターンを採用することで、コード保守性が向上します
  • CallerArgumentExpression を利用して呼び出し元の引数名を自動的にキャプチャし、例外メッセージの精度が向上

#130164 Percent-encode JSON pointer reference tokens in JsonSchemaExporter $ref values

  • 作成者: @Copilot
  • 作成日時: 2026年07月03日 08:16:24(UTC)
  • マージ日時: 2026年07月17日 15:20:11(UTC)
  • ラベル: area-System.Text.Json

概要

JsonSchemaExporterの$refポインタが、RFC 6901のトークン逃げ処理(~0/~1)のみを適用し、URIフラグメント内で違法な文字をパーセントエンコードしていなかった問題を修正。プロパティ名hello%20worldが#/.../hello%20worldではなく#/.../hello%2520worldとして正しくエンコードされるようになり、$ref解決の失敗を回避。

RFC 6901 §6に従い、URIフラグメントとして使用されるJSON Pointerは、RFC 3986のfragment生成規則外の文字をパーセントエンコードする必要がある(既存の~0/~1トークン逃げに加えて)。

// 変更前: "$ref": "#/anyOf/0/properties/hello%20world/additionalProperties"   // 無効
// 変更後: "$ref": "#/anyOf/0/properties/hello%2520world/additionalProperties" // 有効

変更内容

  • JsonSchemaExporter.FormatJsonPointer: URIフラグメント内で許可されていない文字(例:%→%25、^→%5E、スペース→%20)をパーセントエンコード。UTF-8オクテットを出力し、サロゲートペアを処理。RFC 6901の~0/~1逃げ処理は保持。ローカルValueStringBuilderをusing宣言からtry/finallyに切り替え、新しいAppendEscapedReferenceToken/AppendPercentEncodedヘルパーにrefで渡せるように改善。
  • テスト: ClassWithJsonPointerEscapablePropertyNamesを拡張。プロパティ名~/path/to/value → ~/path/to/value%20^で、期待される$refは#/properties/~0~1path~1to~1value%2520%5E/properties/Nextとなり、ポインタ逃げとパーセントエンコード両方をカバー。新しいテスト型をソース生成コンテキストに登録。

パフォーマンスへの影響

影響なし

関連Issue

#130164

その他

なし


#129698 Use granular FileAccess for zip entry operations

概要

System.IO.Packaging と System.IO.Compression ライブラリで、ZIP エントリの操作時に細粒度の FileAccess オプションを活用し、メモリ効率を改善する変更です。FileAccess.ReadWrite で開かれたパッケージから圧縮済みパートを読み取る際、未変更のパートは MemoryStream にデコンプレスせず直接ストリーミングするようになります。ただし、この最適化により、そうしたストリームは前方向のみになり(CanSeek = false)、シークが必要な場合は事前に MemoryStream にコピーする必要があります。

変更内容

  • System.IO.Compression/ZipArchiveEntry.cs, ZipArchiveEntry.Async.cs: Update モードで Open(FileAccess.Read) を呼び出す際のセマンティクスを変更し、セッション内の変更を反映させ、新規作成エントリを空として扱うロジックを追加
  • System.IO.Compression.ZipFile/ZipFileExtensions: 抽出処理で Open(FileAccess.Read) を使用
  • System.IO.Packaging/ZipStreamManager.cs: discardExistingContent および requireSeekableStream オプションを備えた最適化された開放ポリシーを追加(NET11+ のみ)
  • System.IO.Packaging/ZipPackagePart.cs: Update モードでの FileMode.Create 時に新しいパスを使用、デコンプレス+切詰処理を回避
  • System.IO.Packaging/ZipWrappingStream.cs: 前方向のみの圧縮読取ストリームに対して Length の動作を調整
  • System.IO.Packaging/InterleavedZipPackagePartStream.PieceDirectory.cs: インターリーブアクセス用にシーク可能なストリームを要求
  • テスト: Update モードでの可視性、新規エントリ読取、前方向のみの圧縮読取、順序付きオープンの組み合わせをカバーする回帰テストを追加

パフォーマンスへの影響

改善点: FileAccess.ReadWrite で開かれたパッケージから圧縮済みかつ未変更のパートを読み取る場合、全体デコンプレスが不要になり、メモリ使用量削減と処理速度の向上が期待できます。

懸念点: 一部のシナリオ(特に同じセッション内で未変更の圧縮パートをシーク必要とするコード)では、ユーザーが MemoryStream へのコピー処理を明示的に追加する必要が生じます。

適用条件: 以下すべてが満たされた場合のみ動作が変わります:

  1. パッケージが FileAccess.ReadWrite で開かれている
  2. パートが読取のみで開かれている
  3. パートが圧縮されている
  4. パートが同一セッション内で未変更
  5. コンシューマーがストリームをシークするか Position を読む

その他(読取専用パッケージ、非圧縮パート、既に変更されたパート、Stream.Length、マルチピースパート)は影響を受けません。最適化は NET11_0_OR_GREATER でゲートされているため、ダウンレベルフレームワークは動作不変です。

関連Issue

[#129698](https://github


#129319 Add NoInlining to ArrayPool Rent/Return

概要

ArrayPool.Rent() および ArrayPool.Return() メソッドに NoInlining 属性を追加し、これらのメソッドの不適切なインライン化を防ぐ変更です。.NET 10でこれらのメソッドがインライン化されることにより、ベンチマークコードのサイズが .NET 9の200バイトから1567バイトに増加していた問題を解決します。また、Return() メソッドは finally 句に頻繁に現れ、インライン化がfinally cloning(finally句の複製)を無効にするため、この変更で最適化を回復できます。

変更内容

  • System.Private.CoreLib/src/System/Buffers/ConfigurableArrayPool.cs: Rent() および Return() メソッドに [MethodImpl(MethodImplOptions.NoInlining)] 属性を追加
  • System.Private.CoreLib/src/System/Buffers/SharedArrayPool.cs: Rent() および Return() メソッドに [MethodImpl(MethodImplOptions.NoInlining)] 属性を追加

パフォーマンスへの影響

改善あり: ベンチマークコードのサイズ削減(1567バイト → 200バイトに復帰見込み)。これにより以下が期待できます:

  • インライン化によるコードサイズ膨張の回避
  • finally 句内での Return() 呼び出し時の finally cloning 最適化が機能するようになる可能性

メソッド呼び出しのオーバーヘッド増加の可能性は、コードサイズ削減により命令キャッシュ効率が改善される利益が上回ると考えられます。

関連Issue

#124285

その他

なし


#128799 Detect and use zicond in ifconversion on riscv64

概要

RISC-V 64ビット向けのJITコンパイラに「Zicond」拡張命令セット対応を追加し、条件付き移動命令の生成を最適化するPRです。If-conversionパスにおいて、Zicond拡張(czero.nez、czero.eqz)を活用してブランチをより効率的な条件付き移動に変換できるようになりました。

提供されたアセンブリ出力では、Zicond有効時に従来のblt+分岐分割の代わりに、czero.nezとczero.eqzを組み合わせた3命令シーケンスでの条件付き値選択が可能になることが示されています。

変更内容

  • 命令セット定義: corinfoinstructionset.h、readytoruninstructionset.hにZicond対応を追加
  • JIT If-conversion: ifconversion.cppでZicond対応の条件付き移動生成ロジックを実装(GenConditionCode関連)
  • コード生成:
    • codegenriscv64.cppでZicond用の命令生成処理を追加
    • emitriscv64.cppでczero.nez、czero.eqzの逆アセンブル出力対応
    • instrsriscv64.hに新命令定義
  • Lower/LSRAパス: lowerriscv64.cpp、lsrariscv64.cppでZicond活用の最適化を支援
  • 設定: DOTNET_EnableRiscV64Zicond環境変数(デフォルト有効)でZicond生成を制御
  • CPU機能検出: cpufeatures.c/hでZicond対応を追加

パフォーマンスへの影響

提供アセンブリの比較から:

  • コードサイズ: 1216バイト(Zicond無効)→ 1218バイト(Zicond有効)で微増(1216→1218)
  • 命令効率: 従来はbeqz/bnezによる分岐フロー(複数ブロック)を使用していましたが、Zicond活用時はczero.nez/czero.eqz + orの3命令で条件付き値選択を実現
  • 分岐予測コスト削減: 分岐命令削減による予測ミスペナルティ軽減が期待される
  • ただし、コードサイズの微増は命令エンコーディングの複雑性による可能性がある

関連Issue

提供情報に記載なし

その他

  • RISC-V Zicond拡張(条件付きゼロ演算)は比較的新しい拡張命令で、対応CPUでの効率化が期待される
  • 環境変数で動的に有効/無効を制御可能
  • マルチリポジトリ対応:コアランタイム側と共有ツール側の両方で定義が追加されている

#128598 Fix Process.Kill(entireProcessTree: true) when intermediate child has KillOnParentExit

概要

Linux環境でProcess.Kill(entireProcessTree: true)を実行した際に、中間の子プロセスがPR_SET_PDEATHSIG(KillOnParentExit)を設定している場合、孫プロセスが強制終了されない不具合を修正しました。Windows環境ではJob オブジェクトの継承により既に正常に動作していました。修正は二段階アルゴリズム(停止→強制終了)を導入し、プロセスツリー全体を発見してから一括強制終了することで問題を解決します。

変更内容

  • Process.Unix.cs: KillTreeメソッドを二段階アプローチに リファクタリング

    • StopTreeフェーズ:深さ優先探索で全プロセスをSIGSTOP(停止)し、フラットなリストに収集
    • Kill フェーズ:収集された全プロセスにSIGKILL を実行
    • StopTreeがboolを返し、早期終了またはSIGSTOP失敗時には即座にProcessインスタンスを破棄
    • finallyブロック内で強制終了ループを実行し、例外発生時も必ず実行
    • GetLastErrorInfo().RawErrnoを使用してerrnoを明示的に記録し、上書き防止
  • KillOnParentExitTests.cs: 回帰テストを追加

    • 3段階のプロセス階層(ルート→子(KillOnParentExit有無指定可)→孫)を作成
    • ルートプロセスでKill(entireProcessTree: true)を呼び出し
    • 孫プロセスも確実に終了することを検証
    • パラメータ化テストで両ケース(KillOnParentExit:有効/無効)をカバー
  • pal_signal.c: 軽微な調整

パフォーマンスへの影響

影響なし

関連Issue

#107992

その他

本修正はLinux固有の問題を解決するもので、Windowsでは既にJob オブジェクト継承メカニズムにより正常に動作していました。テストはプラットフォーム限定([PlatformSpecific])や条件付き無効化([ActiveIssue])がなく、全プラットフォーム対応テストとして設計されています。


#125662 [runtime tests] Report ActiveIssue-skipped tests and crashed runners

概要

このPRは、[ActiveIssue]属性でマークされたテストがコンパイル時に排除されて見えない問題を解決するもので、以下の改善を実施します:

  • ActiveIssueテストを実行時スキップとして報告し、結果に可視化
  • テストランナーのクラッシュを検出・報告
  • ランナーをフィルタリングして特定エリアのテスト実行を高速化
  • ActiveIssueスキップを集約・分析する機能を追加

変更内容

XUnit wrapper生成器と実行時ライブラリ

  • ITestInfo.cs:AlwaysSkippedTestとSkipReportingPassthroughを追加し、スキップ理由を追跡
  • XUnitWrapperGenerator.cs:コンパイル時排除をコンパイル時に判定可能なActiveIssueはAlwaysSkippedTestで実行時スキップ報告に変換;実行時判定が必要なものはConditionalTestのまま

テスト結果分析と報告(run.py / run.sh)

  • run.py:ActiveIssue集約表(イシュー別テスト数)、オプション詳細表示(--active-issue-details)、クラッシュランナー報告、アセンブリ実行サマリーにActiveIssueカラムを追加
  • run.sh:--runner-filterと--active-issue-detailsフラグを追加

ランナークラッシュ検出(tests.targets)

  • 非ゼロ終了時に.crashedマーカーファイル(終了コード記録)を生成
  • 各実行前に古いマーカーをクリーンアップし、テスト完了後のXML結果のみをコピー
  • クラッシュによるファイル不在はマーカーで検出

パフォーマンスへの影響

影響なし。コンパイル時排除からコンパイル時に判定可能なActiveIssueの実行時スキップへの変更ですが、テスト実行の基本動作は変わらず、総スキップテスト数が増加するのみ(pass/fail数は不変)。

関連Issue

なし

その他

  • 動作変更:以前は見えなかったActiveIssueテスト(コンパイル時排除)がスキップとして表示されるため、総テスト数とスキップ数が増加します
  • XML出力:スキップテストにactive-issue-skipped属性が付与される
  • --runner-filter:マージされたランナー名に一致する部分文字列で実行対象を限定(大文字小文字不区別)、特定領域の反復開発を加速化
  • 出力例:ActiveIssue別テスト数表と、--active-issue-details指定時のランナー別テスト一覧が提供される

目次