Pull Request on 2026年07月14日

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

注意点

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


目次

  1. #130706 Accept canonical NaN in HalfTests.ExplicitConversion_FromSingle on WASM
  2. #130658 Disable LTCG for the nethost's minipal_objects
  3. #130656 Avoid duplicate PropertyRef[] allocation in UTF-8 property cache publish
  4. #130654 Add RequiresProcessIsolation to FullPdbThrower project
  5. #130648 bring wasm R2R abi up to date
  6. #130644 Treat Guid and Int128 types as bitwise equatable
  7. #130643 [cDAC] Reduce SOSDacImpl.GetFieldDescData dependencies (add GetFieldDescNext; use GetFieldDescApproxTypeHandle)
  8. #130639 Don't emit ELT callbacks for P/Invoke methods
  9. #130636 Compare CredentialCache prefix path case-sensitively
  10. #130633 Add the static number interface surface to Decimal32/64/128
  11. #130618 Fix net481 build break and private-constructor assert regressions from PR #130503
  12. #130616 [wasm] Fix ReferenceNewAssembly rebuild test: driver-gen.c regeneration and stale-native comparison
  13. #130604 Update container image digests
  14. #130593 Enable NativeAOT CMake on additional architectures
  15. #130590 Enable Enum.HasFlag box elision in Tier0
  16. #130584 Fix CORECLR_NOTIFICATION_PROFILERS dropping entries without trailing ';'
  17. #130582 Fix DiagnosticListener IsEnabled cyclical dispatch and lost activity hooks
  18. #130581 Consolidate downlevel library API polyfills
  19. #130580 Fix HFA/HVA by-value argument marshalling on ARM64 in CallTargetWorker
  20. #130574 Fix incorrect rounding in Math.Round and MathF.Round with digits
  21. #130559 Re-enable CborDocument_Roundtrip on iOS/tvOS
  22. #130542 Fix Delegate.GetHashCode for type-equivalent delegates
  23. #130527 Fix DAC AMD64 unwinder null deref on zero read address (#126081)
  24. #130484 Disable Utf8JsonReader whitespace-skip vectorization on browser/WASM
  25. #130478 Handle relative exepath on OpenBSD after the sysctl
  26. #130472 [release/10.0] Disable failing iOS device tests
  27. #130467 Arm64: keep SP in base operand for large-offset adds
  28. #130444 JIT: Remove transparent scalar/vector conversion HWINTRINSIC nodes during lowering
  29. #130442 Pause scheduled runs for runtime-coreclr gc-simulator pipeline
  30. #130420 Async Profiler: Emit the method's native code start address as the async-profiler V1 MethodID.
  31. #130411 Expand Windows DNS sync-query detection for inline-completing names
  32. #130405 Speed up virtual method resolution in the compiler
  33. #130379 Implement struct return thunks in CoreCLR WASM InterpToNativeGenerator
  34. #130354 [release/10.0] [QUIC] Update MsQuic to the latest 2.5 version
  35. #130305 Fix build with disabled event trace/perftracing
  36. #130272 [RyuJIT Wasm] SIMD Codegen for ExtractScalar/ReplaceScalar, Unsigned Compares
  37. #130202 JIT: add NativeAOT support for non-shared GVM devirtualization
  38. #130081 Recognize Task<->ValueTask adaptions in async versions
  39. #129457 [EventPipe] Add Blocking EventPipe Mode
  40. #128082 Add Copilot CLI settings.local.json to .gitignore
  41. #127849 Address PR feedback on Random.NextXx
  42. #99200 Optimize and simplify delegate layout

#130706 Accept canonical NaN in HalfTests.ExplicitConversion_FromSingle on WASM

概要

float → Half 変換テストにおいて、WebAssemblyエンジンによるNaNペイロードの正規化に対応しました。従来はWASM上でNaNケースをスキップしていましたが、本変更により正規化されたNaN結果(sign | 0x7E00)を受け入れる一方、他のプラットフォームではビット厳密なチェックを維持します。これにより、WASM上でもNaNケース(符号ビットを含む)の検証が実施されるようになります。

変更内容

  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/HalfTests.cs
    • ExplicitConversion_FromSingleテストケースにおいて、Mono+WASM用のNaNスキップ処理を削除
    • WASM環境でのみ、正規化されたHalf NaNビットパターン(sign | 0x7E00)を許容するロジックを追加
    • AssertExtensions.Equal(Half, Half)は共有ユーティリティのため変更せず、WASM以外のプラットフォームではビット厳密なチェックを継続

パフォーマンスへの影響

影響なし(テストコードの変更)

関連Issue

#103347

その他

  • WebAssembly仕様ではf32.abs/f32.min/f32.max/f32.add操作時のNaNペイロード正規化を許可していますが、V8エンジン(WASM Helixキューで使用)はこれを実施しています
  • 本変更により、ペイロード保持実装(IEEE 754/WASM推奨動作、アーキテクチャネイティブターゲット)ではビット厳密チェックで合格し、正規化実装ではNaN値の許容により合格し、不正なペイロード(例:符号ビット喪失)は引き続き失敗します
  • このアプローチにより、WASM上でNaNケースが実際に実行され、他のターゲットではビット厳密性が保たれます

#130658 Disable LTCG for the nethost's minipal_objects

  • 作成者: @elinor-fung
  • 作成日時: 2026年07月14日 00:56:17(UTC)
  • マージ日時: 2026年07月14日 18:11:38(UTC)
  • ラベル: area-Host

概要

libnethostは外部向けに静的ライブラリとして配布されています。PR #128420によりminipal_objectsが含まれるようになりましたが、LTCG(Link Time Code Generation)でコンパイルされたオブジェクトファイルはlld-linkなどのMSVC以外のリンカーで"is not a native COFF file"エラーが発生して拒否されます。本PRではホスト側のminipal_objectsの対間手続き最適化を無効化し、既存のlibnethostのLTCG無効化と同じ方針に統一します。

変更内容

  • src/native/corehost/CMakeLists.txt: minipalサブディレクトリ追加後、minipal_objectsターゲットのINTERPROCEDURAL_OPTIMIZATIONを無効化(+6行)

パフォーマンスへの影響

影響なし(LTCG無効化により若干のコード生成最適化は失われますが、既存のlibnethostで同じ方針のため一貫性を優先)

関連Issue

#71056、#128420

その他

  • この変更はランタイムビルド内部の実装に関するもので、公開APIへの影響はありません
  • libnethost/libhostfxr静的ライブラリを外部ツールでリンクする際の互換性改善です
  • AppModel関連チームと連携して進行しています

#130656 Avoid duplicate PropertyRef[] allocation in UTF-8 property cache publish

  • 作成者: @artl93
  • 作成日時: 2026年07月14日 00:24:00(UTC)
  • マージ日時: 2026年07月14日 10:17:35(UTC)
  • ラベル: area-System.Text.Json

概要

JsonTypeInfo.UpdateUtf8PropertyCacheでPropertyRefCacheBuilder.ToArray()が2回呼び出されていた問題を修正。1回目の呼び出しでPropertyRef[]を取得し長さをアサートした後、2回目で同じ配列を生成していたため、1回目の結果を再利用することで重複割り当てを削除。

PropertyRef[] newCache = cacheBuilder.ToArray();
Debug.Assert(newCache.Length <= PropertyRefCacheBuilder.MaxCapacity);
_utf8PropertyCache = newCache;  // 変更前: cacheBuilder.ToArray()の再実行

変更内容

  • src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Metadata/JsonTypeInfo.Cache.cs
    • _utf8PropertyCacheの割り当てでnewCacheを直接再利用し、cacheBuilder.ToArray()の2回目の呼び出しを削除
    • キャパシティ不変式チェック(Debug.Assert)はそのまま保持

パフォーマンスへの影響

キャッシュ発行時のメモリ割り当てを削減。測定結果(arm64、.NET 11 preview):

プロパティ数 改善量
1個 48 B
7個 191 B
32個 792 B

削減量は消去されたPropertyRef[N]分(ヘッダ24B + N×24B)でプロパティ数に比例。ただし、System.Text.Jsonはオプション等価性でキャッシュコンテキストをプール利用するため、定常状態の繰り返し処理ではほぼ0に償却される(ウォームアップパス限定の改善)。

関連Issue

なし

その他

  • 動作保証: バイト単位で同一。発行配列の内容、順序、大文字小文字非感度、重複プロパティ処理、エスケープ、例外パスは変更なし
  • テスト: System.Text.Json全体テストスイート合格(52,124テスト、0失敗)
  • 並行処理検証: UpdateUtf8PropertyCacheは楽観的な最終書き込み者勝利方式。敗者パスでの割り当てなし。18スレッド×5,000回のレーステスト実施で正確性不一致なし、例外なし

#130654 Add RequiresProcessIsolation to FullPdbThrower project

概要

CoreCLRテストプロジェクト FullPdbThrower にプロセス分離要件を追加し、テスト実行時に独立したプロセスで実行されるようにしました。これにより、マージされた共有テスト実行への参加を避け、outerloopsの問題を解決します。

変更内容

  • FullPdbThrower.csproj: <RequiresProcessIsolation>true</RequiresProcessIsolation> プロパティを追加
  • インラインコメントを追加してプロセス分離を有効化する意図を記載

パフォーマンスへの影響

影響なし(テスト実行の隔離化による変更で、パフォーマンス特性への直接的な影響はありません)

関連Issue

なし

その他

テスト基盤の設定変更で、公開APIや製品コードには影響しません。FullPdbThrowerテストの実行方法のみが変更されます。


#130648 bring wasm R2R abi up to date

概要

WebAssembly向けのReadyToRun (R2R) ABI仕様ドキュメントを最新の実装に合わせて更新しました。ポータブルエントリポイント、R2R/インタープリタ遷移、スタックフレームレイアウト、関数レット、localloc unwinding、スタックウォーキングなどの詳細を追加・更新しています。

変更内容

  • docs/design/coreclr/botr/clr-abi.md (+112/-48)
    • ポータブルエントリポイントセクションを拡張し、Wasm R2R + インタープリタ使用法と最初のPortableEntryPointフィールドの意味を記述
    • Wasmの型ロアリング仕様(空構造体など)を調整
    • アウトバウンド呼び出しABI説明を拡張し、pep_ptrおよび_pActualCodeの使用方法を含める
    • "R2R stack frame layout"セクションを新規追加(スタックウォーキング疑似コードおよびインタープリタスタブ説明を含む)

パフォーマンスへの影響

影響なし(ドキュメント更新のため)

関連Issue

なし

その他

これは設計ドキュメント(BoTR: Book of the Runtime)の更新であり、実装コード自体の変更ではありません。Wasm環境でのR2Rランタイムの動作仕様を明確化することで、開発者やメンテナーの理解を向上させます。


#130644 Treat Guid and Int128 types as bitwise equatable

  • 作成者: @EgorBo
  • 作成日時: 2026年07月13日 20:09:52(UTC)
  • マージ日時: 2026年07月14日 18:17:45(UTC)
  • ラベル: area-CodeGen-coreclr

概要

Guid、Int128、UInt128型をbitwise equatableとして扱い、SequenceEqualがメモリ比較の最適化(memcmp unrolling)を利用できるようにしました。これにより、Guid.Equalsをメモリセーフなコードで実装できるようになります。

void Foo(Guid g1, Guid g2)
{
    if (((Span<Guid>)[g1]).SequenceEqual((Span<Guid>)[g2]))
    {
        Console.WriteLine("Equal");
    }
}

上記のコード例では、関数呼び出しからSIMD命令(vmovups、vpcmpnequq)を使った直接メモリ比較に最適化されます。

変更内容

  • src/coreclr/tools/Common/TypeSystem/IL/Stubs/RuntimeHelpersIntrinsics.cs: RuntimeHelpers.IsBitwiseEquatable<T>()のIL生成時に、Guid、Int128、UInt128をbitwise equatableな既知型のホワイトリストに追加
  • src/coreclr/vm/jitinterface.cpp: EEがILサブスティテューション時にこれらの型を認識するための実装を追加
  • src/coreclr/jit/instr.cpp: JitDisasmで使用される整数比較の疑似名を修正

パフォーマンスへの影響

改善あり。Guidの比較が関数呼び出しベースからSIMD命令(vmovups、vpcmpnequqなど)を用いたメモリ直接比較に最適化され、呼び出しオーバーヘッドと命令数が削減されます。提供されたコード例では、SpanHelpers:SequenceEqualへの関数呼び出しが排除され、より効率的なマシンコードが生成されます。

関連Issue

#130644

その他

この変更は内部実装の最適化であり、公開APIには変更はありません。互換性への影響もありません。


#130643 [cDAC] Reduce SOSDacImpl.GetFieldDescData dependencies (add GetFieldDescNext; use GetFieldDescApproxTypeHandle)

概要

cDAC(Compact Debugging Access Component)のSOSDacImpl.GetFieldDescDataのリファクタリングです。FieldDescレイアウトへの依存性を減らすため、2つの改善を実施:

  1. GetFieldDescNextメソッドをIRuntimeTypeSystem契約に追加し、次のFieldDescポインタ計算をカプセル化
  2. フィールド型のMethodTable取得時に既存のGetFieldDescApproxTypeHandleを活用し、ISignature依存性を削除

変更内容

  • IRuntimeTypeSystem.cs: GetFieldDescNext(TargetPointer fieldDescPointer)メソッドを追加
  • RuntimeTypeSystem_1.cs: CoreCLR実装としてGetFieldDescNextを追加(fieldDescPointer + sizeof(FieldDesc)を返却)、GetFieldDescApproxTypeHandleによる型情報取得の呼び出しを改善
  • SOSDacImpl.cs: GetFieldDescDataで新しい契約API(GetFieldDescNext、GetFieldDescApproxTypeHandle)を利用し、直接的なレイアウト依存性を削除
  • ドキュメント・テスト: RuntimeTypeSystem.mdの設計ドキュメント更新、MethodTableTests.csとMockDescriptors.RuntimeTypeSystem.csでテストケース追加

パフォーマンスへの影響

影響なし。リファクタリングであり、CoreCLRの動作は変更されません。

関連Issue

なし

その他

  • cDAC全体でビルド成功(警告0件、エラー0件)
  • cDACユニットテスト全2693件合格(スキップ16件、失敗0件)
  • 本PR作成にはGitHub Copilotが使用されています

#130639 Don't emit ELT callbacks for P/Invoke methods

概要

P/Invoke メソッドが不正なプロファイラ Enter/Leave/Tailcall (ELT) コールバックを発火していた問題を修正しました。#126509 で forward P/Invoke が transient IL から mcPInvoke MethodDesc にコンパイル方式が変わったため、ELT フィルタリング条件を更新し、P/Invoke メソッドを ELT ゲートから除外します。P/Invoke は Managed-to-Unmanaged/Unmanaged-to-Managed トランジション コールバック経由でプロファイラに公開されるべきです。

変更内容

  • jitinterface.cpp: GetCompileFlags() の ELT ゲートに IsPInvoke() チェックを追加し、mcPInvoke MethodDesc 型のメソッドを CORJIT_FLAG_PROF_ENTERLEAVE フラグから除外
  • プロファイラ回帰テスト追加:
    • profiler/elttransitions/: ELT フック と code-transition モニタリングを同時に有効化
    • forward P/Invoke が M2U/U2M トランジション コールバック経由のみで公開されることと、reverse P/Invoke (UnmanagedCallersOnly メソッド) が ELT を保持することを検証

パフォーマンスへの影響

影響なし

関連Issue

#130242 (修正対象) #126509 (root cause となった変更)

その他

  • スコープ確認: UnmanagedCallersOnly/reverse P/Invoke 対象は mcIL managed メソッド(mcPInvoke ではない)のため ELT フックを保持; varargs P/Invoke は既存の IsNoMetadata() チェックで除外のまま
  • テスト検証: テストは修正前に失敗(forward P/Invoke が 2 つの不正な ELT コールバックを受信)し、修正後に成功することを確認

#130636 Compare CredentialCache prefix path case-sensitively

  • 作成者: @rzikm
  • 作成日時: 2026年07月13日 17:09:29(UTC)
  • マージ日時: 2026年07月14日 15:24:51(UTC)
  • ラベル: area-System.Net

概要

CredentialCache.GetCredentialのURIパス部分のプレフィックスマッチング方式を、大文字小文字を区別しない比較(OrdinalIgnoreCase)から大文字小文字を区別する比較(Ordinal)に変更します。サーバー側でURIパスが大文字小文字を区別する場合、異なるケースのパスで登録された認証情報が誤って返されるセキュリティ上の問題を修正します。スキーム、ホスト、ポートの比較は変更されません(ホストはUri正規化により引き続き大文字小文字を区別しません)。

変更内容

  • src/libraries/Common/src/System/Net/CredentialCacheKey.cs: IsPrefixメソッドのパスプレフィックス比較をStringComparison.OrdinalIgnoreCaseからStringComparison.Ordinalに変更(9行追加、1行削除)
  • src/libraries/System.Net.Primitives/tests/FunctionalTests/CredentialCacheTest.cs: パス部分の大文字小文字区別を検証する新しい機能テストを追加(57行追加)

パフォーマンスへの影響

影響なし

関連Issue

#130667
#130672

その他

本PR は公開API CredentialCache.GetCredential の動作を修正する互換性に影響する変更です。これまで大文字小文字を区別しないパスマッチングに依存していたコードは、修正後は大文字小文字を区別したマッチングが行われるため、認証情報の取得に失敗する可能性があります。


#130633 Add the static number interface surface to Decimal32/64/128

概要

Decimal32/Decimal64/Decimal128型に、INumberBase、INumber、ISignedNumber、IFloatingPointConstantsインターフェースで定義される静的メンバーの具体実装を追加します。インターフェース自体の実装は後続のPRに委譲し、ここでは静的なAPI表面(定数やヘルパーメソッド)を先行実装することで、型の即時利用を可能にします。

変更内容

  • System.Number.DecimalIeee754.cs (新規追加): Abs、CopySign、Sign、Is*述語、Max/Minファミリの共有ヘルパー実装(337行)
  • Decimal32/64/128.cs: 以下の公開静的メンバーを追加
    • INumberBase由来: One、Abs、IsCanonical/IsFinite/IsInfinity/IsInteger/IsNaN/IsNegative/IsNormal/IsSubnormal/IsZero、MaxMagnitude/MinMagnitude(Number型)、MultiplyAddEstimate
    • INumber由来: Max/Min(Native/Number型)、Clamp/ClampNative、CopySign、Sign
    • ISignedNumber由来: NegativeOne
    • IFloatingPointConstants由来: E、Pi、Tau
    • 各メンバーは共有ヘルパーに委譲
  • 参照アセンブリ更新: 新しい公開API表面をシグネチャに追加(102行)
  • テスト拡張: Intel readtest.inクロスバリデーション機構を拡張し、abs、negate、copySign、Is*述語をすべての型で検証。ビット完全な検証を実施(3テストファイルに各736行追加)

パフォーマンスへの影響

影響なし(静的メンバーの追加であり、ランタイム動作への影響はなし)

関連Issue

#81376 (Decimal32/64/128型の段階的なビルドアウト)

その他

  • NegativeOne/E/Pi/Tauを明示的実装ではなく公開メンバーとしたのは、これらの型に数値リテラルが無いため(例:Decimal32.NegativeOneが-Decimal32.Oneより可読性が高い)
  • MultiplicativeIdentityは意図的に公開していない。Oneで十分であり、AdditiveIdentity/Radixとの統一性を保つため、インターフェース実装時に明示的メンバーとして後続PRで追加予定
  • MaxNative/MinNative/ClampNative/MultiplyAddEstimateは2023年の初期API承認後に追加されたが、現在の汎用数学インターフェース要件に合致
  • 後続PR対象:丸め、IEEE 754操作、Sqrt、超越関数、IDecimalFloatingPointIeee754、変換メソッド、明示的メンバー
  • Intel検証: minnum/maxnumファミリは意図的に除外。Intel は IEEE 754-2008実装、.NET は 754-2019実装

#130618 Fix net481 build break and private-constructor assert regressions from PR #130503

  • 作成者: @Copilot
  • 作成日時: 2026年07月13日 12:44:53(UTC)
  • マージ日時: 2026年07月14日 04:27:02(UTC)
  • ラベル: area-System.Text.Json

概要

PR #130503 で導入された RuntimeFeature.IsDynamicCodeCompiled の使用と ReflectionMemberAccessor へのルーティングに関連する2つの回帰を修正。.NET Framework でのコンパイル破損と、プライベートコンストラクタに対する不正な Debug.Assert による実行時クラッシュを解決。

// サポートされるべきプライベート [JsonConstructor] は以前のassertで拒否されていた
class PrivateParameterizedCtor_WithAttribute
{
    public int X { get; }
    [JsonConstructor]
    private PrivateParameterizedCtor_WithAttribute(int x) => X = x;
}

変更内容

  • ExceptionTests.cs: RuntimeFeature.IsDynamicCodeCompiled の参照を #if NET でガード。.NET Framework には存在しないため CS0117 コンパイルエラーが発生していた問題を修正。
  • ReflectionMemberAccessor.cs: コンストラクタの IsPublic チェックを削除(3箇所)。プライベート [JsonConstructor] は有効なシナリオだが、assert により不正に拒否されていた。DeclaringType と !IsStatic チェックは保持。
  • ReflectionEmitMemberAccessor.cs: コンストラクタの IsPublic チェックを削除(2箇所)。既に skipVisibility: true でプライベートコンストラクタ呼び出しをサポートしている。

パフォーマンスへの影響

影響なし

関連Issue

#130503

その他

  • 修正範囲は System.Text.Json の内部実装(ReflectionMemberAccessor)
  • 公開API の変更なし
  • 互換性への影響なし

#130616 [wasm] Fix ReferenceNewAssembly rebuild test: driver-gen.c regeneration and stale-native comparison

  • 作成者: @pavelsavara
  • 作成日時: 2026年07月13日 11:23:43(UTC)
  • マージ日時: 2026年07月14日 16:06:12(UTC)
  • ラベル: area-Build-mono

概要

WASM用のネイティブリビルドテストReferenceNewAssemblyRebuildTestの2つの独立した問題を修正します。

問題1: AOT環境でdriver-gen.cが再生成されない(原因:テスト対象コードが既に依存していたアセンブリを参照していたため、AOT対象アセンブリの集合が変わらず、driver-gen.cの内容が同一だった)

問題2: リリンクケースで公開済みの古いdotnet.native.wasmと新しくビルドされたもののサイズが一致しない(原因:同じ論理ファイルの複数の指紋付きバリアントが並存し、アルファベット順で古いファイルが選ばれていた)

変更内容

  1. ProjectProviderBase.cs: FindAndAssertDotnetFilesメソッドを修正。複数の指紋付きバリアントが存在する場合、最後の更新時刻が最新のものを選択するように変更。

  2. NativeRebuildNewAssembly.cs: System.Text.RegularExpressions(Regex.IsMatch)への参照を追加。これにより、アプリの閉包に含まれていない新しいフレームワークアセンブリが確実に追加され、リビルド時にdriver-gen.cが再生成される。

パフォーマンスへの影響

影響なし

関連Issue

#130540

その他

  • テストアセットの変更は内部実装(テストコード)のみで、公開APIへの影響なし
  • テスト検証:5つのテストケース全てが成功
  • 修正はWASM/ブラウザビルド環境特有で、他の.NETプラットフォームには影響しない

#130604 Update container image digests

概要

dotnet-buildtools/prerejsコンテナイメージのダイジェスト値を更新する自動依存関係更新PRです。複数のビルドパイプライン設定ファイルにおいて、使用するコンテナイメージの参照を最新バージョンに更新します。

変更内容

  • eng/pipelines/common/templates/pipeline-with-resources.yml: コンテナイメージダイジェスト5つを更新
  • eng/pipelines/coreclr/templates/helix-queues-setup.yml: コンテナイメージダイジェスト2つを更新
  • eng/pipelines/installer/helix-queues-setup.yml: コンテナイメージダイジェスト2つを更新
  • eng/pipelines/libraries/helix-queues-setup.yml: コンテナイメージダイジェスト10個を更新

計12個のmcr.microsoft.com/dotnet-buildtools/prerejsのダイジェスト値が更新されています。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは.NET Renovate Botにより自動生成されました。ビルド環境の依存関係管理のための定期更新で、実装コードへの変更はありません。


#130593 Enable NativeAOT CMake on additional architectures

概要

NativeAOT CMakeビルドをs390x、ppc64le、Unix x86アーキテクチャに拡張するPRです。プレースホルダーアセンブリソースファイルを追加し、CMakeLists.txtの制限を緩和してWASM以外のすべてのアーキテクチャでNativeAOT機能を有効にします。

変更内容

  • CoreCLR ランタイムアセンブリ(内部実装): s390xおよびppc64leに対して、AllocFast、StubDispatch、WriteBarriersのプレースホルダーアセンブリソースファイルを追加
  • NativeAOT ランタイムアセンブリ(内部実装): s390xおよびppc64leに対してUniversalTransition、PInvoke、MiscStubs、InteropThunksHelpers、GcProbe、ExceptionHandling、DispatchResolveのプレースホルダーファイルを追加。Unix x86に対してはGcProbeとDispatchResolveのプレースホルダーを追加
  • 共有アセンブリマクロヘッダ(内部実装): s390xおよびppc64le向けのAsmMacros_Shared.hシムを追加
  • CMake設定(内部実装): src/coreclr/CMakeLists.txtでnativeaotサブディレクトリのWASM除外制限を削除し、すべての非WASMホストアーキテクチャでビルドを有効化

パフォーマンスへの影響

影響なし(ビルドインフラストラクチャの変更のみ)

関連Issue

なし

その他

  • 本変更は純粋にビルドシステムの対応であり、実装ロジックの追加ではなく、プレースホルダーファイルの追加により今後の実装を可能にするためのインフラ整備です
  • 既存の公開APIや言語仕様への影響はありません

#130590 Enable Enum.HasFlag box elision in Tier0

概要

Tier0/minopts コンパイラで Enum.HasFlag のボックス化を削除(box elision)できるようにするため、JIT importer のボックス化一時変数管理ロジックを修正しました。Enum 型のボックス化では単一定義で正確な型情報を持つ一時変数を割り当てることで、既存の最適化が Tier0 でも動作するようにしました。

変更内容

  • src/coreclr/jit/importer.cpp: impImportAndPushBox の条件判定を修正
    • isEnum(hClass) != TypeCompareState::Must から == TypeCompareState::Must に変更
    • Enum のボックス化に対して単一定義・正確な型情報を持つ一時変数を割り当てるようにしました
    • 非Enum の積分型ボックス化は従来通り共有一時変数に戻すことで、フレームサイズを削減

パフォーマンスへの影響

  • コードサイズ: 6,641 コンテキスト全体で -175,983 バイト の削減

    • 改善: 4,583 メソッドで -218,115 バイト
    • 回帰: 1,789 メソッドで +42,132 バイト(最大1メソッド +47 バイト)
  • ヒープ割り当て: Enum.HasFlag メソッドの CORINFO_HELP_NEWSFAST 呼び出し が 2 → 0 に削減(2つのボックス化の排除)

  • JIT スループット: MinOpts で -0.06%~-0.00% の軽微な改善、FullOpts は変化なし

  • Tier0 具体例:

    • HasFlagConst: 103 → 49 バイト
    • HasFlagVar: 105 → 59 バイト

関連Issue

#89348

その他

修正はガード条件の反転による単純な変更で、import 時の1つの条件判定を修正するだけです。本修正により、Enum のボックス化でも正確な型情報が保持されるため、既存の gtOptimizeEnumHasFlag 最適化が Tier0 で有効に機能するようになります。


#130584 Fix CORECLR_NOTIFICATION_PROFILERS dropping entries without trailing ';'

概要

CORECLR_NOTIFICATION_PROFILERS環境変数のパーサーがバグを修正しました。末尾にセミコロン(;)がないプロファイラーリスト(最後のエントリーまたは唯一のエントリー)が処理されない問題を解決します。.NET 8のwcstok_sベースのパーサーからの回帰を修正しました。

変更内容

  • src/coreclr/vm/profilinghelper.cpp: ProfilingAPIUtility::AttemptLoadProfilerListの実装を修正。セクションの解析ロジックを改良し、次の;または文字列終端まで処理するよう変更。連続したセパレーターまたは末尾のセパレーターによる空セクションをスキップし、不正なパス警告の誤報を除去。
  • src/tests/profiler/common/ProfilerTestRunner.cs: ProfilerTestRunner.RunメソッドにappendNotificationSeparatorフラグを追加。末尾のセパレーターなしで通知プロファイラーリストを生成可能に。
  • src/tests/profiler/multiple/multiple.cs: 複数プロファイラーシナリオを拡張。CORECLR_およびDOTNET_両方の環境変数プレフィックスで、末尾セパレーターあり/なしの両ケースでテストを実行。

パフォーマンスへの影響

影響なし

関連Issue

#126197

その他

  • この修正は内部実装(ランタイムのプロファイリングAPI初期化処理)に限定されており、公開APIへの影響はありません。
  • 回帰テストが追加され、今後の同様の問題の発生を防ぎます。

#130582 Fix DiagnosticListener IsEnabled cyclical dispatch and lost activity hooks

概要

DiagnosticListenerのサブスクリプション処理における2つの正確性バグを修正します。

  1. 3引数の述語関数を受け取るSubscribeオーバーロードが、1引数のIsEnabled(string)呼び出しを不正に3引数の仮想メソッドにルーティングし、サブクラスのオーバーライドを誤って呼び出していた問題を解決
  2. サブスクリプション削除時にリンクリストの再構築でOnActivityImport/OnActivityExportフィールドがコピーされず、アクティビティフックが失われていた問題を解決

変更内容

  • DiagnosticListener.cs:Subscribe(..., Func<string, object?, object?, bool> ...)オーバーロードを修正し、1引数のIsEnabledコールバックが提供された述語関数を直接呼び出すようにクロージャ内で保持。DiagnosticSubscription.Removeでノード再構築時にOnActivityImport/OnActivityExportフィールドをコピーするよう修正。
  • DiagnosticSourceActivity.cs:同様に1引数のIsEnabledコールバックが提供された述語関数を直接呼び出すように修正。
  • DiagnosticSourceTests.cs:IsEnabledルーティングバグとサブスクリプション削除時のアクティビティフック保持に関する回帰テストを追加。

パフォーマンスへの影響

影響なし。本修正は不正な仮想メソッド呼び出しのオーバーヘッドを削減し、ディスパッチチェーンを簡潔にするため、若干のパフォーマンス改善の可能性がありますが、主な目的は正確性の修正です。

関連Issue

#125306

その他

この修正はSystem.Diagnostics.DiagnosticSourceライブラリの公開APIの動作を正す内部実装修正です。外部への破壊的変更はありませんが、既存のコードが誤った仮想ディスパッチに依存していた場合、動作が変わる可能性があります。


#130581 Consolidate downlevel library API polyfills

  • 作成者: @EgorBo
  • 作成日時: 2026年07月12日 17:07:40(UTC)
  • マージ日時: 2026年07月14日 05:07:36(UTC)
  • ラベル: area-Meta

概要

複数のライブラリにおける下位レベル(downlevel)フレームワークの API ポリフィルを src/libraries/Common/src/Polyfills に統合し、複雑な条件付きコンパイル分岐 (#if NET...) を削除することで、コード重複を減らし保守性を向上させる変更です。呼び出し元は、ターゲット フレームワークに関わらず統一された API を使用できるようになります。

変更内容

新規ポリフィルファイルの追加(src/libraries/Common/src/Polyfills/):

  • ArrayPolyfills.cs - Array.Clear() と汎用 Array.Reverse<T>()
  • BitOperationsPolyfills.cs - BitOperations.LeadingZeroCount()
  • CollectionsPolyfills.cs - List<T>.AddRange(ReadOnlySpan<T>)
  • ConcurrentDictionaryPolyfills.cs - 3 引数版 GetOrAdd と TryRemove(KeyValuePair<,>)
  • ConvertPolyfills.cs - Convert.ToHexStringLower(ReadOnlySpan<byte>)
  • DecimalPolyfills.cs - decimal.GetBits(decimal, Span<int>)
  • DictionaryPolyfills.cs - IDictionary<TKey,TValue>.TryAdd
  • EnumPolyfills.cs - 汎用 Enum.Parse<TEnum>()
  • Int32Polyfills.cs、Int64Polyfills.cs、DoublePolyfills.cs - span ベースの TryParse/TryFormat
  • ExceptionPolyfills.cs - ArgumentOutOfRangeException.ThrowIf* メソッド群
  • ReflectionPolyfills.cs - MethodInfo.CreateDelegate<T>()
  • RuntimeFeaturePolyfills.cs - RuntimeFeature.IsDynamicCodeSupported
  • RuntimeHelpersPolyfills.cs - TryEnsureSufficientExecutionStack()、GetUninitializedObject()
  • StreamSpanPolyfills.cs - span ベース Stream メソッド(Read、Write、ReadExactly、ReadAtLeast)
  • MemoryExtensionsPolyfills.cs - Count()、CommonPrefixLength() など span ヘルパー
  • BinaryPrimitivesPolyfills.cs - BinaryPrimitives.WriteSingle/DoubleLittleEndian と ReverseEndianness

複数ライブラリの更新:

  • System.Text.Json、System.Security.Cryptography.Cose、System.Resources.Extensions など 15+ ライブラリ
  • .csproj ファイル修正により、非 .NETCoreApp ターゲットに対して必要なポリフィル ソースをリンク
  • 呼び出し元コードから #if NET... 条件分岐を削除し、ポリフィルで統一したコード パスに統合

パフォーマンスへの影響

影響なし(条件付きコンパイル分岐の削除は実行時挙動を変えない)

関連Issue

なし

その他

  • 内部実装(ポリフィル)の変更のみで、公開 API に破壊的変更なし
  • 下位フレームワーク(.NET Framework、.NET Standard など)でも最新 API を一貫性を持って使用可能
  • GitHub Copilot により自動生成された変更

#130580 Fix HFA/HVA by-value argument marshalling on ARM64 in CallTargetWorker

  • 作成者: @steveisok
  • 作成日時: 2026年07月12日 16:48:37(UTC)
  • マージ日時: 2026年07月14日 20:11:39(UTC)
  • ラベル: area-VM-coreclr

概要

ARM64でのHFA/HVA(Homogeneous Floating-point/Vector Aggregate)構造体の値渡し引数マーシャリングを修正します。MethodDescCallSite::CallTargetWorkerで、HFA/HVA構造体のフィールドを個別のFP/SIMD レジスタスロットに展開するように変更し、ARM64 ABIの「各フィールドを独立したFP/SIMDレジスタに配置」という規約に準拠させます。従来は構造体バイト列を連続コピーしていたため、デバッガのfunc-eval実行時にベクトル演算が破損していました。

変更内容

  • src/coreclr/vm/callhelpers.cpp: CallTargetWorkerにTARGET_ARM64分岐を追加し、HFA/HVA引数を検出してArgDestination::CopyHFAStructToRegisterを呼び出す処理を実装。非HFA構造体およびスタックにこぼれたHFAは既存のデフォルトコピー動作を維持。

パフォーマンスへの影響

影響なし

関連Issue

#126564

その他

  • この問題は「ベクトル演算がデバッガ内でのみ破損する」という現象として顕現しました。通常のJIT生成呼び出しおよびリフレクション呼び出しスタブはこの手動マーシャリングパスを使用しないため、デバッガのfunc-eval実行経路でのみ影響を受けます。
  • 既存のCopyValueClassArgUncheckedで使用されているパターンに合わせた実装で、他のABI(UNIX_AMD64_ABI、LOONGARCH64、RISCV64)の既存コードに変更なし。

#130574 Fix incorrect rounding in Math.Round and MathF.Round with digits

概要

Math.Round(double, digits, mode)とMathF.Round(float, digits, mode)のラウンディング精度を修正しました。従来のRound(value * 10^digits) / 10^digitsアプローチは、スケーリング時の浮動小数点誤差により、ランダム入力の約5%で誤った結果を生成していました。本修正により、入力値の正確なIEEE-754値に基づいた計算に変更し、ToString("F{digits}")と同じ結果を得られるようになりました。

Math.Round(655.925, 2, MidpointRounding.AwayFromZero);            // 従来: 655.93 → 修正後: 655.92
Math.Round(1111111111111111.5, 1, MidpointRounding.AwayFromZero); // 従来: ...1.6 → 修正後: ...1.5

変更内容

  • System/Number.Rounding.cs(新規): BigIntegerを用いた任意精度演算による参照実装と、FMA(融合乗算加算)またはinteger演算による高速パスの実装。Number.TryRoundToDecimalDigitsFastとNumber.RoundToDecimalDigitsを提供
  • System/Math.cs、System/MathF.cs: Round(*, digits, mode)オーバーロードを更新。新しいNumber helperを呼び出し、MidpointRoundingの検証を厳格化
  • TensorPrimitives.Round.cs: テンソル演算のRound実装を簡略化(新しいMath.Roundの動作に統合)
  • テスト追加: Math.cs、MathF.csに正確なビット単位の結果検証テストを追加。subnormal値や無効なMidpointRounding値のテストケースも含む

パフォーマンスへの影響

  • 高速パス: FMA3対応x86またはARM64の場合、FusedMultiplyAddを利用した高速パスで任意精度演算を回避
  • フォールバック: FMA非対応環境では、ulong/UInt128による正確なinteger演算を使用
  • JIT最適化: Fma.IsSupported || AdvSimd.Arm64.IsSupportedガードがJIT定数として折畳まれ、コンパイル時に分岐が決定される

関連Issue

#1643

その他

  • 破壊的変更: このPRは動作上の変更であり、dotnet/docsに対して変更ドキュメント(breaking-change doc)を提出予定
  • テスト確認: FMA対応パスと整数フォールバックパス両方で全Math/MathFテストが成功(DOTNET_EnableAVX2=0で非AVX2環境を検証)
  • Mode検証の強化により、無効なMidpointRounding値に対して例外がスローされるようになった

#130559 Re-enable CborDocument_Roundtrip on iOS/tvOS

概要

iOS/tvOS プラットフォームで無視されていた CborDocument_Roundtrip プロパティテストを再有効化するテスト変更です。BigInteger の内部実装の書き直しとその後のバグ修正後、iOS/tvOS での BigInteger.CompareTo クラッシュが依然として発生するかを検証するため、プラットフォーム固有の [ActiveIssue] 属性を削除します。

変更内容

  • src/libraries/System.Formats.Cbor/tests/PropertyTests/CborPropertyTests.cs: CborDocument_Roundtrip メソッドから [ActiveIssue("https://github.com/dotnet/runtime/issues/73150", TestPlatforms.iOS | TestPlatforms.tvOS)] 属性を削除。

パフォーマンスへの影響

影響なし(テスト属性の変更のみ)

関連Issue

#73150

その他

  • 本 PR は GitHub Copilot (AI) によって作成されました
  • iOS/tvOS CI が唯一の信頼できる検証手段です。CI でなお BigInteger.CompareTo のクラッシュが発生する場合は、属性を復元して #73150 を再度オープンし、Mono/iOS の数値演算の基盤にある問題をさらに詳細に調査する必要があります

#130542 Fix Delegate.GetHashCode for type-equivalent delegates

  • 作成者: @Copilot
  • 作成日時: 2026年07月11日 03:41:19(UTC)
  • マージ日時: 2026年07月14日 05:00:49(UTC)
  • ラベル: area-Interop-coreclr

概要

型互換なデリゲートに対して Delegate.GetHashCode() が同一のハッシュコードを返すように修正しました。Delegate.Equals() が true を返すような型互換デリゲート(同一メソッドを指す)に対して、GetHashCodeコントラクトを満たすため、同じハッシュコードを返すべきという問題に対応しています。

変更内容

  • System/Delegate.CoreCLR.cs: GetHashCode実装を修正し、型互換デリゲートの処理を改善(+14/-3)
  • DelegateTests.cs: 型互換デリゲートのハッシュコード一致を検証する新規テストケースを追加(+23/-1)
  • TestEquivalentTypes: 型互換性テスト用のアセンブリプロジェクトを新規追加(TestEquivalentTypes.cs: +11、csproj: +9)

パフォーマンスへの影響

影響なし

関連Issue

#99200のコードレビュー時に発見

その他

  • 互換性への影響: GetHashCodeの戻り値が変更される可能性がありますが、コントラクト準拠のため必要な修正です
  • テスト戦略: 型互換性を検証するための専用テストアセンブリを新規作成し、包括的なテストカバレッジを実現

#130527 Fix DAC AMD64 unwinder null deref on zero read address (#126081)

概要

DAC(Data Access Component)のAMD64スタックアンワインダーが、特殊なターゲットアドレス(0および(TADDR)-1)からのメモリ読み取り時にnullポインタ逆参照で クラッシュする問題を修正しました。MemoryRead64とMemoryRead128にDAC専用の検証を追加し、throwEx==trueの読み取り契約を遵守するようにしました。

変更内容

  • src/coreclr/unwinder/amd64/unwinder.cpp
    • MemoryRead64にDAC専用ガード追加:アドレス0および(TADDR)-1の読み取りを拒否し、DacError(HRESULT_FROM_WIN32(ERROR_READ_FAULT))を発生させる
    • MemoryRead128に対応するDAC専用ガード追加:同じ失敗モードを128ビット読み取りで防止

パフォーマンスへの影響

影響なし。この修正はDAC専用(DACCESS_COMPILEスコープ)で、オンライン/JITアンワインダーは変更されないため、本番実行時のパフォーマンスへの影響はありません。

関連Issue

#126081

その他

  • 修正はDAC専用の防御的変更で、デバッグシナリオ(out-of-processデバッグング)でのクラッシュを防止します
  • ContextRecord->Rspが0になる場合など、スタック展開中にこれらのアドレスから読み取る際に、DAC内部でのセグメンテーションフォルトの代わりに、制御されたDacErrorが発生するようになります

#130484 Disable Utf8JsonReader whitespace-skip vectorization on browser/WASM

概要

Utf8JsonReader.SkipWhiteSpaceのベクトル化されたホワイトスペーススキップ処理をブラウザ/WASM環境で無効化し、元のスカラーループに回帰させるパッチです。PR #129701で導入されたベクトル化実装はネイティブではニュートラルからより高速ですが、WASM AoT環境ではSIMD入力コストが高いため、JSON処理で一般的な短いトークン間のホワイトスペース(~4バイト)に対して約2.6倍遅くなるため、環境別の最適実装に切り替えます。

変更内容

  • src/libraries/System.Text.Json/src/System/Text/Json/Reader/Utf8JsonReader.cs: SkipWhiteSpaceメソッドにOperatingSystem.IsBrowser()条件を追加し、ブラウザ環境ではスカラーループを、それ以外ではベクトル化SearchValuesスキャンを使用するよう変更。OperatingSystem.IsBrowser()はコンパイル時に定数畳み込みされるため、ネイティブコード生成は変わらず、ブラウザビルドのみスカラーパスを実行します。

パフォーマンスへの影響

WASM AOT(ブラウザ環境)での改善:

  • インデント4KB文書:43.2ns → 16.3ns(62%削減)
  • インデント40KB文書:43.2ns → 16.4ns(62%削減)
  • インデント400KB文書:43.0ns → 16.3ns(62%削減)
  • ミニファイ40KB文書:27.5ns → 10.7ns(61%削減)

ネイティブプラットフォーム: 影響なし(コード生成はmainと同一、スカラー分岐はデッドコード除去)

関連Issue

#129701 #75553

その他

  • OperatingSystem.IsBrowser()はブラウザ/WASM環境のみを対象。WASI/iOS/Android Mono AoTへの拡張は後で検討可能。
  • 正確性検証済み:スカラーオラクルに対して3,220万件の差分テストケースを実行、ミスマッチ0件。既存リーダーテストにより合格確認済み。

#130478 Handle relative exepath on OpenBSD after the sysctl

概要

OpenBSD環境でsysctlが相対パス(dotnet)を返す場合のハンドリングを追加しました。相対パスが返された際は、PATH環境変数を参照して実行可能ファイルを検索し、絶対パスに解決する実装になっています。OpenBSDは他のOS(FreeBSD/Solaris等)のような標準的なAPI提供がないため、ベストエフォート的なアプローチで対応しています。

変更内容

  • src/native/minipal/getexepath.h: sysctlから相対パスが返された場合、PATH環境変数を検索して実行可能ファイルを探索し、絶対パスへの解決を試みるロジックを追加(+47行、-4行)

パフォーマンスへの影響

相対パスが返されるケースでのみPATH検索が発生するため、通常は絶対パスが返される環境ではパフォーマンス影響はありません。相対パスが返される環境では追加の検索処理が発生しますが、1回限りの初期化処理のため実行時への影響は軽微と考えられます。

関連Issue

#124911

その他

この修正はOpenBSD特有の問題への対応です。ktrace/kdumpの動作を改善し、実行可能ファイルパスの正確な検出を可能にします。


#130472 [release/10.0] Disable failing iOS device tests

概要

iOS物理デバイスで実行されるCI テストを、サービング ブランチ(release/10.0)上で無効化します。これらのテストはCI シグナルを提供しなくなり、サービング ブランチではmacOS 更新に対応する予定がないため、メンテナンス負担を軽減します。

変更内容

  • iOS.Device.Aot.Test.csproj:テスト無効化設定を追加(2行追加)
  • iOS.Device.ExportManagedSymbols.Test.csproj:テスト無効化設定を追加(2行追加)

パフォーマンスへの影響

影響なし(テスト実行の削除による CI パイプラインの実行時間短縮の可能性)

関連Issue

#119665

その他

  • このPRはサービング ブランチ(release/10.0)に限定されたもので、メイン ブランチには影響しません
  • 物理 iOS デバイスのインフラが必要なため、ローカルテストは実施されていません
  • CI環境での検証が本変更の妥当性を確認します

#130467 Arm64: keep SP in base operand for large-offset adds

概要

ARM64コードジェネレーションで大きなスタックオフセットを処理する際、ベースレジスタがSP(スタックポインタ)である場合にアサーション失敗を防ぐための修正です。emitIns_R_R_R関数の制約(reg3は汎用レジスタであること)を満たすために、大きなオフセット計算でのadd命令のオペランド順序を調整し、SPをベースオペランド位置(reg2)に配置するようにしました。

変更内容

  • src/coreclr/jit/emitarm64.cpp: emitInsLoadStoreOp関数内の大きなオフセットアドレス計算パスで、add命令のオペランド順序を入れ替え(ベースレジスタをreg2に、テンポラリをreg3に)
  • src/coreclr/jit/codegenarm64.cpp: CodeGen::instGen_Set_Reg_To_Base_Plus_Imm関数の大きな即値フォールバックパスで、同様にadd命令のオペランド順序を調整
  • テストケース追加: GitHub_130437回帰テスト(IL形式)を新規追加

パフォーマンスへの影響

影響なし(バグ修正であり、オペランド順序の変更のみで生成命令に変化なし)

関連Issue

#130437

その他

この修正はARM64アーキテクチャのJITコンパイラ内部実装の修正です。ランタイムのコード生成パスに関わるため、大きなスタックオフセットを使用するARM64プラットフォーム上での実行時エラーを防ぎます。


#130444 JIT: Remove transparent scalar/vector conversion HWINTRINSIC nodes during lowering

概要

JIT低レベル化段階で、CreateScalarUnsafe、ToVector*Unsafe、GetLower*などの「透過的な」スカラー/ベクトル変換HWIntrinsicノードをHIR専用として削除し、消費側が基盤となる値を直接使用するように変更します。これにより、脆弱な2段階containment設計を排除し、LSRA/codegenの特殊ケース処理を簡潔化しながら、既存のcontainmentチェックで操作数サイズ保証を維持します。

変更内容

  • lowerxarch.cpp/lowerarmarch.cpp: 低レベル化時に透過的なHWIntrinsicノード(CreateScalarUnsafe、ToVector*Unsafe、GetLower*)を削除。新しいContainHWIntrinsicOperandヘルパーで2段階containmentを回避
  • lower.cpp: InsertNewSimdCreateScalarUnsafeNodeを更新し、xarch/arm64での浮動小数点reinterpretを削除し、生成されたノードを内部で低レベル化
  • gentree.cpp: CreateScalar containability hookを削除。DEBUG操作数形状アサーションを緩和し、低レベル化後のスカラー操作数を許容
  • codegenxarch.cpp: 透過的ノード削除後のスカラー/幅不一致SIMDソース対応にDEBUGストアサイズアサーションを緩和
  • instr.cpp/hwintrinsiccodegenxarch.cpp: 含有CreateScalarノードの特殊ケース処理を削除
  • lsraxarch.cpp: 透過的ラッパー削除に伴い、「含有単項式スキップ」ヘルパーを削除
  • lowerwasm.cpp: 新しく挿入されたCreateScalarUnsafeノードの手動低レベル化を廃止

パフォーマンスへの影響

SPMI asmdiffsの検証結果(Checked、Windows):

  • x64: −23,238バイト (−21,441 FullOpts / −1,797 MinOpts)、0リグレッション
  • arm64: −15,796バイト (1,570改善 / 9リグレッション +68バイト、最大クラスタ +40)

~2.6M (x64) / ~2.8M (arm64)コンテキスト全体でリプレイ失敗とJITアサート なし。改善はIndexOfAnyAsciiSearcher、Ascii.Equals/IsValidCore、ProbabilisticMap、StringSearchValues、Vector128/Numericsなどのメモリ/実行速度を要するコンシューマーで顕著。arm64のリグレッションはノード削除によるアライメント/順序の軽微な変動で、改善に比べ無視できる程度。

関連Issue

なし

その他

  • JIT/HardwareIntrinsics/General: 2551/2551合格(Checked、_r/_ro)
  • JIT/SIMD: 114/114実テスト合格(2つのVector3Interopケースはネイティブ相互運用DLL欠落のため失敗、コード生成とは無関係)
  • 7つのコミットで段階的に実装。操作数形状アサーションはHIRのみに制限(`fgNode

#130442 Pause scheduled runs for runtime-coreclr gc-simulator pipeline

概要

runtime-coreclr gc-simulator パイプラインの夜間スケジュール実行を一時停止します。根本原因の調査中のため、パイプライン定義自体は保持され、削除されません。手動実行は引き続き可能で、スケジュール再開はコメント解除で簡単に復旧できます。

変更内容

  • eng/pipelines/coreclr/gc-simulator.yml: schedules: cron ブロックをコメントアウト(+9/-7)
  • パイプライン一時停止の理由と再開方法を説明するコメントを追加
  • trigger: none は既に設定されているため、スケジュール無効化によって自動実行は停止

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • パイプライン定義は完全に削除されず、コメントアウト状態で保持されています
  • 修正検証時など、必要に応じて手動トリガーでパイプラインを実行できます
  • 再開時は schedules: ブロックのコメント解除のみで対応可能な設計です

#130420 Async Profiler: Emit the method's native code start address as the async-profiler V1 MethodID.

概要

async-profiler V1(StateMachineAsync)のMethodID識別方式を、メソッドハンドルポインタからネイティブコード開始アドレスに変更します。これにより、V2(RuntimeAsync)や通常のスタックフレームと同じ方法でシンボル化が可能になり、EventPipeランダウンイベントへの依存を排除し、クロスプロセス・オフラインでのシンボル化が堅牢化します。

変更内容

  • CoreCLR: 新規QCall RuntimeMethodHandle_GetNativeCode を追加(PCODE返却)。RuntimeMethodHandle にマネージドラッパーを追加
  • Mono: 新規icall RuntimeMethodHandle.GetNativeCode と、メソッドのネイティブコード開始アドレスを取得するランタイムコールバックを追加
  • 共通CoreLib: AsyncStateMachineDiagnostics.ResolveMethodId を更新し、MoveNext のネイティブコード開始アドレスを返すように変更
  • テスト: AsyncProfiler V1テストを拡充し、エンドツーエンド検証を実施

パフォーマンスへの影響

影響なし。MethodIDの取得元が変更されるのみで、パフォーマンス特性に変化なし。

関連Issue

#130420

その他

  • Tier0/Tier1の複数バージョンのメソッドが存在する場合でも、すべてが同じシンボルにマッピングされるため、古いバージョンのアドレスでも正しくシンボル化されます
  • CoreCLRとMonoの両ランタイムで既存のV1テストがパスしており、カスタムPerfviewパーサーによるエンドツーエンド検証も完了しています

#130411 Expand Windows DNS sync-query detection for inline-completing names

  • 作成者: @Copilot
  • 作成日時: 2026年07月09日 14:20:05(UTC)
  • マージ日時: 2026年07月14日 10:35:03(UTC)
  • ラベル: area-Infrastructure

概要

Windows 22000より前のバージョンでDnsQueryExが同期的に完了する名前解決のワークアラウンドを拡張します。従来はlocalhostのみに限定されていましたが、IPリテラル、マシンホスト名、loopback、localhost、..DnsServers、..localmachineなど、OS チームが特定した全ての同期完了名に対応します。

if (IPAddress.IsValid(name))
{
    return true;
}

変更内容

  • DnsResolverPal.Windows.cs: localhostのみのチェックをIsSynchronouslyCompletingQueryName述語に置き換え、IP リテラル検出と追加の特殊ケース名に対応。割り当てフリーなIP リテラル検出にIPAddress.IsValid(...)を使用。プロセス全体でのキャッシング無しに現在のホスト名と比較。ホスト名ルックアップ失敗時は新しい障害モードを導入せず通常の非同期パスにフォールバック。

  • DnsResolverTest.cs: 既存の Windows リグレッションテストを拡張し、追加の同期完了名を同期/非同期のリゾルバーエントリーポイント両方でカバー。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は公開 API には影響しません。内部実装(System.Net.NameResolutionライブラリのDnsResolverPal)の改善です。Windows pre-22000環境での DNS クエリの非効率性を解消するリグレッション対応の拡大となります。


#130405 Speed up virtual method resolution in the compiler

概要

CoreCLR AOTコンパイラにおける仮想メソッド解析のパフォーマンス最適化です。仮想スロットの列挙と実装への解析が複数回繰り返されていたため、キャッシング機構を導入しました。また、インスタンス化されたジェネリックメソッドに対する不正な動作を修正し、スロット定義メソッドの不変条件を強化しました。

変更内容

  • 新規: CachingVirtualMethodAlgorithm.csを追加し、vtableスロット→実装マッピングをメモ化してキャッシュします
  • 非同期処理対応: CompilerTypeSystemContext.Async.csで非同期対応の仮想メソッド解析をキャッシング機構に切り替え
  • 不変条件の強化: MetadataVirtualMethodAlgorithm.csでFindSlotDefiningMethodForVirtualMethodにアサートを追加し、メソッド定義のみを受け付けるよう制限
  • ジェネリック処理修正: インスタンス化されたジェネリックメソッドに対する不正な動作を修正
  • 呼び出し側の正規化: スロット定義解析の前にメソッド定義に正規化する処理を複数箇所で追加(GraphBuilder、Compilation、ReflectionVirtualInvokeMapNodeなど)

パフォーマンスへの影響

大幅な改善が確認されています:

  • dotnet new webapiaotコンパイル: 7.4秒 → 6.2秒(約16%削減)
  • DynamicGenericsテスト: 2.45秒 → 2.09秒(約15%削減)

改善は、仮想スロット列挙と解析結果のキャッシング化による重複計算削減に起因します。

関連Issue

なし

その他

  • このPRには2つの準備用コミット(前置き修正)が含まれています:
    1. FindSlotDefiningMethodForVirtualMethodがインスタンス化メソッドで不正に動作する問題を修正(C#では常にスロット定義メソッド経由で呼ぶため、IL/VB.NETでのみ検出可能でした)
    2. FindVirtualFunctionTargetMethodOnObjectTypeがインスタンス化されていないジェネリックメソッドで無意味な処理をしていた問題を修正
  • 作成者は、インターフェース解析についても同様の最適化が可能だが、本PRではスコープを限定しています

#130379 Implement struct return thunks in CoreCLR WASM InterpToNativeGenerator

概要

CoreCLR WASM の interp-to-native thunk generator に構造体戻り値サポートを実装しました。以前はポートability assertで実行時クラッシュが発生していた、ネイティブ関数から構造体を返すPInvoke呼び出しに対応します。

構造体サイズごとに C typedef(例:typedef struct { char d[N]; } wasm_ret_SN;)を生成し、生成された CallFunc_* thunk の戻り値型として使用します。emcc が自動的に構造体戻り値を sret ポインタ規約に変換するため、特別な ABI 処理は不要です。

変更内容

  • InterpToNativeGenerator.cs: 構造体戻り値サイズを収集し、各サイズ用の C typedef を生成。従来の PORTABILITY_ASSERT を削除し、生成された thunk の戻り値型として typedef を使用するよう変更(+27/-3)
  • PInvokeTableGeneratorTests.cs: EnsureWasmAbiRulesAreFollowedInInterpreter テストから native-mono テストカテゴリを削除。本修正によりこのテストが CoreCLR でも成功するようになったため(+2/-2)

パフォーマンスへの影響

影響なし

関連Issue

#120897

その他

  • browser-wasm および wasi-wasm の両方で動作確認(同じ generator、同じ wasm32 ABI)
  • GitHub Copilot の支援を受けて作成されたPR

#130354 [release/10.0] [QUIC] Update MsQuic to the latest 2.5 version

概要

MsQuic(QUIC用のネイティブライブラリ)を2.4.18から2.5.9にアップデートするバックポートです。MsQuic 2.4ブランチはサポート終了予定であるため、アクティブにサポートされている2.5ブランチに更新することで、セキュリティアップデートとバグ修正を受け取ります。

変更内容

  • eng/Versions.props: MicrosoftNativeQuicMsQuicSchannelVersionプロパティを2.4.18から2.5.9に更新

パフォーマンスへの影響

影響なし

関連Issue

#130173(main ブランチへの対応PR)

その他

  • System.Net.Quic および HTTP/3テストスイートにより、標準CIで検証済み
  • 破壊的変更なし。既に出荷されているアクティブにサポートされているMsQuic 2.5.xパッケージへのバージョン更新のみ
  • リスク評価:低。MsQuic 2.5は現在サポートされているサービシング対象ブランチ

#130305 Fix build with disabled event trace/perftracing

概要

NativeAOT環境でFEATURE_PERFTRACINGおよびFEATURE_EVENT_TRACEを無効化した場合のビルド失敗を修正するPull Requestです。イベントトレース機能を無効化した設定でのコンパイルが正常に完了するよう調整されています。

変更内容

  • CMakeLists.txt: NativeAOT Runtime buildの条件付きコンパイル設定を調整(23行追加、9行削除)
  • eventtrace.h: イベントトレース関連のコード定義削除(4行削除)
  • CoffNativeCodeManager.cpp: イベントトレース無効化時の必要なコード追加(2行追加)
  • AotCompilerCommon.props: EventSourceSupportの無効化設定を追加

パフォーマンスへの影響

影響なし(ビルド修正のみで、実行時動作への変更なし)

関連Issue

なし

その他

本変更はNativeAOTに限定した修正であり、作成者が以下の設定でのテストを実施済みです:

set(FEATURE_PERFTRACING 0)
set(FEATURE_EVENT_TRACE 0)

イベントトレース・パフォーマンストレーシング機能を完全に無効化する組み込みシナリオでのビルドサポート改善です。


#130272 [RyuJIT Wasm] SIMD Codegen for ExtractScalar/ReplaceScalar, Unsigned Compares

概要

このPRは、WebAssembly RyuJIT向けのSIMD命令生成を拡張し、ExtractScalar/ReplaceScalarなどの追加パックド演算のコード生成を実装するとともに、Vector128<ulong>の順序付き比較演算をサポートしています。即値オペランドが必須の命令に対しては、ネストされたWasmブロックの制御フロー版「ジャンプテーブル」を用いた非即値フォールバック機構を導入しました。

変更内容

  • lowerwasm.cpp: Vector128<ulong>の順序付き比較用にサインビットをXORして符号付き比較に書き直すロジックを追加
  • hwintrinsiccodegenwasm.cpp: HW_Category_IMMカテゴリの命令コード生成とジャンプテーブルフォールバックの実装(146行追加)
  • hwintrinsiclistwasm.h: より多くのPackedSimd操作(順序付き比較、extract/replaceレーン、シフト、splat)を有効化
  • hwintrinsicwasm.cpp: Wasm即値上限値計算と即値オペランド検出の改善
  • targetwasm.cpp: ABI分類でTYP_SIMD16を構造体と同様に扱うよう調整
  • regallocwasm.cpp: ジャンプテーブルフォールバック時のHWIntrinsicオペランド向け一時レジスタ管理
  • hwintrinsic.h/cpp: 即値位置ヘルパーとジャンプテーブルフォールバッククエリ機能を拡張
  • emitwasm.h/cpp: emitIns_Laneシグネチャをリファクタリング(要素サイズを命令から導出)

パフォーマンスへの影響

影響なし(実装パターン変更ですが具体的なベンチマーク数値は提供されていません)

関連Issue

なし

その他

  • ABI互換性: SIMD型をABI処理上で構造体として扱う設計上の変更により、.NET 11ではv128の値型ABI導入は予定されていません
  • 既知問題: 3引数のHWIntrinsic(ReplaceScalar、LoadScalarAndInsert、StoreSelectedScalar)で、範囲外レーン値がジャンプテーブルのデフォルトに落ちた場合、ArgumentOutOfRangeExceptionではなくWasm unreachableトラップが発生する可能性があります
  • 非即値オペランドはMultiplyUsedとして標記され、ジャンプテーブルの各分岐でWasm値スタック上に再具現化されます(ネストブロックが上位スタックにアクセスできないため)

#130202 JIT: add NativeAOT support for non-shared GVM devirtualization

概要

NativeAOT環境でジェネリック仮想メソッド(GVM)のDevirtualization(仮想呼び出しの直接呼び出しへの変換)をサポートします。従来はGVM呼び出しが早期にfat-pointerに変換されていたため、JITのdevirtualization logic が認識できませんでしたが、本変更により変換のタイミングを遅延させることで、devirtualization後にfat-pointer展開を行えるようにします。

上記サンプルコードでは、devirtualization前は動的なスロット検索(CORINFO_HELP_GVMLOOKUP_FOR_SLOT)を使用していましたが、修正後は直接Console.WriteLineへの呼び出しに最適化されています。

変更内容

  • importercalls.cpp: NativeAOT GVM ldvirtftn 呼び出しの早期temp spill を廃止し、fat-pointer候補マークのみを設定。Devirtualization時にfat-pointer候補マークをクリア。ガード付きdevirtualizationをジェネリック仮想呼び出しに対してスキップ。
  • indirectcalltransformer.cpp: Indirect call transformation中に、ジェネリック仮想fat-pointer候補に対して遅延temp materialization を実装。Fat-pointer展開前に関数ポインタを一時ローカル変数に具体化。
  • CorInfoImpl.cs: Fat-pointer処理関連の微調整。

パフォーマンスへの影響

改善あり。サンプルコード実行時、修正前は複数のhelper call(CORINFO_HELP_NEWSFAST、CORINFO_HELP_GVMLOOKUP_FOR_SLOT)を含むコードが生成されていましたが、修正後は不要な間接呼び出しが排除され、直接呼び出しに最適化されています。スタック領域の使用量も削減(32→40バイトは別要因の可能性)。

関連Issue

#112596

その他

  • Late devirtualizationおよびGuarded devirtualizationはNativeAOT環境では未対応。
  • Shared GVMはIL scanner の制限により非対応。
  • 本変更はNativeAOTのみが対象で、通常の.NETランタイムには影響なし(内部JIT実装)。

#130081 Recognize Task<->ValueTask adaptions in async versions

概要

JIT コンパイラが new ValueTask(Task) と ValueTask.AsTask() パターンを認識できるように拡張し、これらを直接的な非同期呼び出しとして最適化できるようにしました。これにより、BCL(Base Class Library)で一般的なこのパターンのオーバーヘッドが大幅に削減されます。

// 最適化対象のパターン
private static ValueTask TestTaskToValueTask()
{
    return new ValueTask(TestTask());
}

private static async Task TestTask()
{
    await Task.Yield();
}

変更内容

  • System.Private.CoreLib: ValueTask/ValueTask<T> の Task ベースコンストラクタと AsTask() メソッドに [Intrinsic] 属性を追加し、JIT が認識できるようにしました。
  • JIT 認識パターン: JIT importer で return new ValueTask(TaskFunc()) および return ValueTaskFunc().AsTask() パターンを検出し、新しい「adapted」フラグを設定して非同期呼び出しの最適化を可能にしました。
  • NamedIntrinsic: ValueTask ctor と AsTask に対応する新しい NamedIntrinsic ID を追加しました。
  • 継続フラグ: CORINFO_CONTINUATION_VALUETASK_ADAPTED_TO_TASK フラグを追加して、Task↔ValueTask 変換を追跡できるようにしました。
  • テスト: Task↔ValueTask アダプタのテストプロジェクトと、非同期版認識の IL ベーステストを追加しました。
  • AOT/Interpreter サポート: ILCompiler と CoreCLR interpreter でも同様のパターン認識を実装しました。

パフォーマンスへの影響

大幅な改善:提供されたコード例では、最適化により以下のように改善されます:

  • コードサイズ: 115 バイト → 29 バイト(約 75% 削減)
  • 命令数: 31 → 10(約 68% 削減)
  • PerfScore: 25.67 → 6.25(約 76% 削減)
  • プロローグサイズ: 24 → 4 バイト

スタック フレームの割り当て、ValueTask 構造の初期化、および不要な継続処理が排除され、ダイレクト呼び出しに変換されます。

関連Issue

#130081

その他

  • この最適化は JIT(Tier0・FullOpts)、AOT コンパイラ(RyuJIT)、CoreCLR interpreter に適用されます。
  • BCL 内で一般的なアダプタパターン(例:Socket.Tasks.cs、PipeStream.Unix.cs)の性能向上を実現します。
  • 破壊的変更なし。[Intrinsic] 属性追加により、内部実装の最適化が可能になります。

#129457 [EventPipe] Add Blocking EventPipe Mode

  • 作成者: @mdh1418
  • 作成日時: 2026年06月16日 04:45:42(UTC)
  • マージ日時: 2026年07月14日 13:38:21(UTC)
  • ラベル: area-Tracing-coreclr

概要

EventPipeに非破壊的(ブロッキング)バッファリングモードを追加し、dotnet-gcdumpで大規模ヒープダンプ時のイベント欠落を防止します。従来は満杯バッファを持つプロデューサがイベントを破棄していましたが、Block モード有効時はプロデューサをパーク(待機)させて、リーダーがバッファ容量を解放するまで再試行します。また、GC ヒープウォーク開始前にドレインスレッドが起動するようコールバック発火タイミングを変更し、デッドロックを防止します。

変更内容

コア実装(ネイティブ EventPipe):

  • ep-types-forward.h: EventPipeBufferingMode(DROP/BLOCK)と EventPipeWriteEventResult(WRITTEN/DROPPED/BLOCKED)列挙型を追加
  • ep-buffer-manager.c/h: ブロッキングモード時のパーク・再試行ロジック、FIFO キュー、イベント信号機構を実装;書き込み API の戻り値を EventPipeWriteEventResult に変更
  • ep-session.c/h: バッファリングモードをセッションオプションに統合;プロバイダコールバックをセッションに保持し、ep_start_session で一括発火
  • ep.c/h: コールバック発火タイミングをep_enable_3からep_start_sessionに遅延;disable 時にパーク中のプロデューサを abort
  • ep-thread.h: EP_SESSION_USE_WRITE_BUFFER_IN_USE ビットフラグを追加し、ライター/リーダー間の調整

セッション API 拡張:

  • ds-eventpipe-protocol.c/h: IPC CollectTracing6(0x0207)コマンド対応(バッファリングモード指定用)
  • ep-config.c: DOTNET_EventPipeBufferingMode 環境変数サポート(0=Drop、1=Block)

ランタイム統合(CoreCLR/Mono/NativeAOT):

  • ep-rt-coreclr.h, ep-rt-mono.h, ep-rt-aot.h: ネイティブドレインスレッド開始ロジックを追加

テスト:

  • ep-tests.c, ep-buffer-manager-tests.c: 新しい戻り値型に対応

互換性:

  • 破壊的変更: ep_session_write_event() の戻り値が boolean から EventPipeWriteEventResult に変更(内部 API)
  • 非サポート構成は明示的にエラー(失敗):Block モードは streaming スレッド持つセッション(FILESTREAM/IPCSTREAM)のみ許可;その他は Session 起動失敗;単一スレッド環境(PERFTRACING_DISABLE_THREADS)は Block を拒否

パフォーマンスへの影響

パフォーマンス改善:

  • Drop(従来モード)比較: 1 MB 循環バッファ、100 万イベント発行時:
    • Drop モード(=0): 38万4,976 / 100万 (61.5% 欠落)
    • Block モード(=1): 100万 / 100万 (100% キャプチャ)
  • 大規模ヒープダンプで 200 万ノードオブジェ

#128082 Add Copilot CLI settings.local.json to .gitignore

  • 作成者: @vcsjones
  • 作成日時: 2026年05月12日 14:23:30(UTC)
  • マージ日時: 2026年07月14日 02:04:00(UTC)
  • ラベル: area-Infrastructure

概要

Copilot CLIの設定ファイル.github/copilot/settings.local.jsonを.gitignoreに追加します。このファイルは個人用のローカル設定オーバーライドを格納するもので、リポジトリにコミットすべきではありません。

変更内容

  • .gitignore: .github/copilot/settings.local.jsonのエントリを追加(3行追加)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

.github/copilot/settings.local.jsonはリポジトリ設定ファイル(.github/copilot/settings.json)と同じスキーマを使用し、これに優先して適用されます。個人的なローカルオーバーライドに使用される設定ファイルのため、バージョン管理の対象外にする必要があります。


#127849 Address PR feedback on Random.NextXx

概要

Random.NextInteger<T>() API に対する マージ後のフィードバック対応です。IBinaryInteger<T> 実装の要件ドキュメント化/検証の強化と、全範囲生成パスの簡素化が主な変更内容です。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Random.cs
    • NextInteger<T>() の XML ドキュメントを更新し、二進数補数とフルレンジ生成に関する前提条件を明記
    • NextInteger<T>() で T.MaxValue の符号検証を追加
    • フルレンジ生成時の棄却ループを削除して処理を簡素化
    • 範囲生成ロジックをリファクタリング(三項演算子の簡略化)
    • ジェネリック棄却サンプリングヘルパーを NextBinaryIntegerInRange に統合

パフォーマンスへの影響

棄却ループの削除により、フルレンジ生成の呼び出しでは条件分岐が削減され、わずかなパフォーマンス改善が見込まれます。

関連Issue

なし

その他

このPRは前のマージ時に含まれなかった追加コミットを反映したものです。変更はランタイムライブラリの公開API(System.Random)に対するものですが、内部実装の整理とドキュメント強化が主体です。


#99200 Optimize and simplify delegate layout

概要

デリゲート インスタンスのメモリ フットプリントを削減するため、マネージド MethodInfo キャッシュをネイティブ MethodDesc* ポインタに置き換える内部構造の最適化です。デリゲート オブジェクトから GC 参照フィールドを1つ削減し、将来の割り当て戦略(不変 GC フィールドに依存するもの)を可能にします。

変更内容

  • デリゲート フィールド レイアウト変更(ネイティブ側): _methodBase OBJECTREF を削除し、_methodDesc ネイティブポインタ(MethodDesc*)を追加
  • マネージド キャッシング戦略変更: MethodInfo キャッシュを ConditionalWeakTable<Delegate, MethodInfo> に移動し、デリゲート オブジェクト外で管理
  • QCall 追加: Delegate_GetMethodDesc と Delegate_CreateMethodInfo QCall を実装して、MethodDesc の取得と MethodInfo 生成を提供
  • MulticastDelegate の再利用: _invocationList を DynamicMethod ストレージと collectible keep-alive(LoaderAllocator via GCHandle)の保持に転用
  • Delegate.Equals/GetHashCode 更新: MethodDesc を使用した比較に変更
  • DAC(Debugging Support)更新: デリゲート情報取得ロジックをネイティブ フィールド レイアウト変更に対応
  • NativeAOT 対応: Delegate.cs の軽微な更新

パフォーマンスへの影響

  • メモリ削減: デリゲート インスタンスあたり 1 ポインタ フィールド(8 バイト on x64)の削減
  • GC 圧力軽減: デリゲート オブジェクトが管理する GC 参照が 1 つ減少し、GC スキャン対象が削減
  • キャッシング オーバーヘッド: MethodInfo キャッシュが ConditionalWeakTable に移動したことで、初回アクセス時の検索オーバーヘッドが増加する可能性がある点は設計トレードオフ
  • 具体的数値: 提供されていません

関連Issue

#85014

その他

  • 破壊的変更なし: デリゲート使用時の公開 API は変更されず、内部実装のみの最適化
  • テスト追加: System.Runtime.Tests に委譲関連テスト追加
  • 設計ドキュメント更新: docs/design/datacontracts/Object.md でデリゲート構造を明記

目次