Pull Request on 2026年06月23日

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

注意点

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


目次

  1. #129744 [release/10.0] Fix ValueType.GetHashCode for nested generic field
  2. #129730 Better generic cycle detection in MethodEntryGenericLookupResult
  3. #129728 Fix ValueType.GetHashCode for nested generic field
  4. #129727 [mono][wasm] Add Truncate/CopySign/ScaleB intrinsics + narrow #103347 test exemption
  5. #129722 JIT: invert oversize loops with their own bounds checks
  6. #129721 [cDAC] Fix IsSharedByGenericInstantiations for non-shared canonical MTs
  7. #129720 [cDAC] Fix context alignment and content on debug validation paths
  8. #129714 Fix GC hole when method return is hijacked for GC suspension
  9. #129711 [release/10.0] Fix NativeAOT GC hole issue
  10. #129706 Revert dotnet-optimization dependency update from #129405
  11. #129704 Increase RemoteExecutor timeout for DiagnosticSource bridge tests
  12. #129699 [mono][llvm] Recognize MathF.Abs/Log and Single/Double.MinNumber/MaxNumber as intrinsics
  13. #129669 Fix ReferenceTrackerHost fixed-address storage
  14. #129640 Optimize HashBytes for 64-bit and remove dead code
  15. #129628 Fix compiled/source-generated lazy loop stack unwinding when giving up at max iteration
  16. #129623 Clean up S.S.AccessControl
  17. #129563 Ensure other types of SIMD related loads, stores, and indirections are marked as used with SIMD intrinsics
  18. #129475 Port System.Net.Http to OpenBSD
  19. #129426 Take in account mandatory Zip64 Ext Info Extra Fields presence when required by spec
  20. #129407 [release/9.0-staging] Update dependencies from dotnet/xharness
  21. #129380 add tracing configuration
  22. #129377 [release/9.0-staging] Update dependencies from dotnet/icu
  23. #129232 [wasm] Delete obsolete wasm console templates and related WASI build tests
  24. #129216 Implement computed goto dispatch for the CoreCLR interpreter

#129744 [release/10.0] Fix ValueType.GetHashCode for nested generic field

概要

ジェネリック型フィールドを持つ値型に対する ValueType.GetHashCode() のデフォルト実装で発生していたクラッシュを修正します。この問題は PR #98754 で導入されたリグレッションであり、顧客から報告されています。

変更内容

  • src/coreclr/vm/comutilnative.cpp: ネストされたジェネリックフィールドの処理ロジックを修正(4行追加、1行削除)
  • src/coreclr/System.Private.CoreLib/src/System/ValueType.cs: 関連する修正(1行追加)
  • src/tests/Regressions/coreclr/GitHub_129692/test129692.cs: リグレッション用テストケースを追加(39行)
  • src/tests/Regressions/coreclr/GitHub_129692/test129692.csproj: テストプロジェクト設定(11行)

パフォーマンスへの影響

影響なし

関連Issue

#129728(オリジナルのfix)、#129692(リグレッション報告)

その他

  • これはrelease/10.0ブランチへのバックポートです
  • リスク評価:低
  • 修正対象:ランタイム(VM層)のジェネリック型フィールド処理
  • テスト:ターゲット指定テストで検証済み

#129730 Better generic cycle detection in MethodEntryGenericLookupResult

概要

NativeAOT の ジェネリック型ルックアップ処理において、メソッドエントリ(関数ポインタ)のジェネリック循環検出が一貫性を持つように改善されました。従来は canonical/non-concrete パス上でのみ循環検出が実施されていたのに対し、この変更により全パスで統一的に検出されるようになります。

変更内容

  • src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericLookupResult.cs
    • MethodEntryGenericLookupResult.GetTarget() で DetectGenericCycles(dictionary.Context, instantiatedMethod) を無条件に実行するよう変更
    • canonical/non-abstract shadow-method ブランチからの重複する循環検出呼び出しを削除

パフォーマンスへの影響

影響なし

関連Issue

#129697

その他

テストは #128702 に含まれています。


#129728 Fix ValueType.GetHashCode for nested generic field

概要

ネストされたジェネリック型フィールドを持つValueType のGetHashCodeメソッドの不正な動作を修正します。この問題は #98754 の修正時に発見された未カバーのケースです。

変更内容

  • src/coreclr/System.Private.CoreLib/src/System/ValueType.cs: GetHashCode実装に1行追加
  • src/coreclr/vm/comutilnative.cpp: ネストされたジェネリック型フィールドのハッシュコード計算ロジックを4行追加、1行修正
  • テスト追加: GitHub_129692 回帰テスト(C#テストファイルとプロジェクトファイル)

パフォーマンスへの影響

影響なし

関連Issue

#129692、#98754

その他

本修正は完全な回帰ではなく、#98754 の修正時に発見された未カバーのケースの対応です。


#129727 [mono][wasm] Add Truncate/CopySign/ScaleB intrinsics + narrow #103347 test exemption

概要

Mono の WASM インタープリター・ジタープリターに Math.Truncate、Math.CopySign、Math.ScaleB 各メソッドのネイティブ WASM 命令対応を追加し、Half/BFloat16 の explicit conversion テストで WASM 特有の NaN 処理の問題に対する exemption スコープを最適化します。WASM ハードウェア命令(f64.trunc、f32.trunc、f64.copysign、f32.copysign)および既存の libm インポート(scalbn、scalbnf)を有効活用し、従来の BCL C# 実装での低速な解釈実行を排除します。

変更内容

1. Math/MathF 演算の WASM ネイティブ対応(コミット1):

  • src/mono/mono/mini/interp/mintops.def: MINT_TRUNC、MINT_TRUNCF、MINT_COPYSIGN、MINT_COPYSIGNF オペコードを D/F ブロック対応位置で新規追加
  • src/mono/mono/mini/interp/transform.c: IL→MINT_* 変換段階で Truncate、CopySign を intrinsic として認識
  • src/mono/mono/mini/interp/interp.c: 新オペコードのインタープリター実装を追加
  • src/mono/browser/runtime/jiterpreter-tables.ts: MINT_TRUNC* および MINT_COPYSIGN* を mathIntrinsicTable に登録し、WASM ネイティブ命令に下位変換
  • src/mono/browser/runtime/jiterpreter-trace-generator.ts: MINT_SCALEB* のトレース生成時コードを追加(既存 MINT_FMA パターンを踏襲し、int 型第2引数に対応)
  • src/mono/browser/runtime/jiterpreter.ts: scalbn/scalbnf の libm インポートと関連型シグネチャを定義

2. テスト exemption スコープの最適化(コミット2):

  • src/libraries/System.Runtime/tests/System.Runtime.Tests/System/HalfTests.cs、BFloat16Tests.cs: PlatformDetection.IsWasm 時に ..._TestData メンバーデータソース内の NaN 行をフィルタリング、[ActiveIssue("#103347", TestPlatforms.Browser)] を削除
  • 非 NaN 行(ULP 丸め、subnormal、符号処理、オーバーフロー検証)はすべてのプラットフォームで実行;WASM では NaN 行のみスキップ

パフォーマンスへの影響

改善点:

  • Math.Truncate/MathF.Truncate、Math.CopySign/MathF.CopySign: インタープリター時は従来の BCL C# 実装歩行から WASM ネイティブ命令(f64.trunc、f32.trunc、f64.copysign、f32.copysign)に変更、ジタープリターはトレースの CPU サイクル削減
  • Math.ScaleB/MathF.ScaleB: 従来はトレース実行中に遭遇時にインタープリター化を強制していたが、ジタープリータ対応により熱い WASM コード内でのトレース中断を回避

定量的ベンチマー


#129722 JIT: invert oversize loops with their own bounds checks

概要

JITのループ反転ヒューリスティック(optTryInvertWhileLoop)を改善し、独自の境界チェックを持つループに対して、ループクローニングが有益である場合により積極的に反転を行うようにしました。同時に、過度に大きなループの反転を制限する従来の「too big to clone」「1.25x liberal」制限を撤廃し、より大きなループでのクローニング判断を後段のメカニズムに委譲します。

変更内容

  • src/coreclr/jit/optimizer.cpp: ループ反転のサイズゲーティングロジックを再構成し、現在のループと入れ子ループの境界チェックを分けて追跡。従来の「too big to clone」および「1.25x liberal」拒否ロジックを削除。入れ子ループのみに境界チェックが存在する場合の特定のベイルアウト処理を追加(+45行/-22行)。

パフォーマンスへの影響

ループクローニング時に不要な重複をコンパイラが回避することで、下流のLICM(ループ不変コード移動)やCSE(共通部分式除去)の効率が向上します。特にBenchstone.BenchF.InvMtなどのケースで改善が期待されます。

関連Issue

#116486

その他

この変更はoptTryInvertWhileLoopの内部ヒューリスティック改善であり、公開APIへの影響はありません。JITコンパイラの最適化判断に関わる変更のため、特定の負荷パターンでコンパイル時間やコード品質が変わる可能性があります。


#129721 [cDAC] Fix IsSharedByGenericInstantiations for non-shared canonical MTs

概要

cDAC(Compact Data Access Contract)の IsSharedByGenericInstantiations の実装を修正するPRです。従来は IsCanonMT && HasInstantiation という条件で判定していましたが、これは過度に広すぎました。値型のジェネリック型(例:ArraySortHelper<int>)は独自のcanonical MTであり、実際にはinst argを必要としないメソッドに対して誤って InstArgMethodTable を報告していました。

本修正は、ランタイムの MethodTable::IsSharedByGenericInstantiations と同じロジック(GenericsMask ビットが SharedInst(0x20))を使用するよう改善します。これにより、ArraySortHelper<int>.cctor() や ReadOnlySpan<char>.ToString() など複数のメソッドが正しく分類されるようになります。

変更内容

  • MethodTableFlags_1.cs: GenericsMask_SharedInst (0x20) フラグを追加し、IsSharedByGenericInstantiations ヘルパープロパティを公開(内部実装の修正)
  • RuntimeTypeSystem_1.cs: 共有ジェネリック型判定をフラグベースの新しい実装に変更(内部実装の修正)
  • methodtable.h: cDAC依存コメントを SharedInst フラグを含めるよう更新
  • RuntimeTypeSystem.md: 新しいフラグ値と簡素化されたロジックをドキュメント化

パフォーマンスへの影響

影響なし(デバッグ・診断機能の正確性向上)

関連Issue

なし

その他

本修正は cDAC ストレステスト(DOTNET_CdacStress=0x201)の ArgIterator サブチェックで検出されました。これは内部診断APIの挙動を改善するもので、公開APIの変更はありません。


#129720 [cDAC] Fix context alignment and content on debug validation paths

  • 作成者: @rcj1
  • 作成日時: 2026年06月22日 22:58:08(UTC)
  • マージ日時: 2026年06月23日 15:44:24(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Data Access)のデバッグ検証パスにおいて、コンテキストバッファのメモリアライメントと初期化を改善しました。バッファを16バイト境界にアライメントし、ネイティブメモリ書き込み前にクリアすることで、アライメント障害と未初期化メモリからの誤検知を削減します。

変更内容

  • Entrypoints.cs: readThreadContextデリゲート呼び出し時に使用される一時的なアライメント済みバッファをゼロ初期化
  • DacDbiImpl.cs: レガシースタックウォーク検証パスでbyte[] + fixedをNativeMemory.AlignedAlloc(..., 16)に置き換え、ネイティブバッファを呼び出し前にクリア

パフォーマンスへの影響

影響なし(バッファ初期化のオーバーヘッドは検証時のデバッグパスに限定され、本番環境への影響はありません)

関連Issue

なし

その他

  • 変更は内部実装(cDAC相互運用層)に限定されており、公開APIへの影響なし
  • デバッグシナリオでの安定性向上を目的とした修正で、互換性への影響なし

#129714 Fix GC hole when method return is hijacked for GC suspension

  • 作成者: @BrzVlad
  • 作成日時: 2026年06月22日 19:56:24(UTC)
  • マージ日時: 2026年06月23日 18:25:57(UTC)
  • ラベル: area-VM-coreclr

概要

GC中断時のメソッド戻り値ハイジャック処理における、インタプリタへの戻り時のGCホール問題を修正しています。ハイジャック対象の戻りアドレスがJITコードでない場合(インタプリタなど)、ハイジャックを無効化することで、戻り値レジスタがスキャン対象から漏れる問題を解決します。

変更内容

  • src/coreclr/vm/threadsuspend.cpp (+32)
    • Thread::HijackThreadに、ハイジャック対象の戻りアドレスがJITコードかを検証するEECodeInfoチェックを追加
    • X86以外のターゲットでは、JITコードでないアドレス(インタプリタなど)へのハイジャックをスキップ
    • ARM64ではPacStripPtrを使用してPACビットを除去してからコード検証を実施
    • ARM64ビルド向けにPacStripPtrの外部宣言を追加

パフォーマンスへの影響

影響なし(バグ修正による正確性の向上)

関連Issue

#129714

その他

本修正は、Interp-JIT混合実行モードでのライブラリテストスイート実行時の高い失敗率に対応するものです。インタプリタベースのメソッド呼び出し(リフレクション経由のMethodBaseInvoker.InterpretedInvoke_Methodなど)でも同様の問題が発生する可能性があります。DOTNET_HeapVerify=1で強制的にインタプリタ実行を行った場合に確実に再現可能です。


#129711 [release/10.0] Fix NativeAOT GC hole issue

概要

NativeAOTのGCホール(メモリ安全性の問題)を修正するバックポート。例外処理中にGCがスタックをスキャンする際、funcletから例外がエスケープしfinallyハンドラ実行時にGCが発生する特定のケースで、修正されていないレジスタ値がスタックフレームイテレータで保持されることによるメモリ破損を防ぎます。

変更内容

  • amd64/ExceptionHandling.S/asm: 非volatile レジスタ値をスタックフレームイテレータ内に確実に保存する処理を追加(各ファイルで異なるアセンブリ記述形式に対応)
  • clr-abi.md: ドキュメント更新(1行変更)
  • 回帰テスト: GitHub_129010ディレクトリに新規テストケース追加(104行のテストコード)

パフォーマンスへの影響

影響なし。変更はスタックフレーム管理のみで、実行パスに追加オーバーヘッドはありません。

関連Issue

#129598(オリジナルの修正PR) #115284(回帰の原因となった変更)

その他

  • リスク評価:低
  • .NET 10.0における回帰問題(#115284で導入)
  • 内部で発見された問題
  • Libraries テストで露出、実装専用回帰テストとCI全体でのテスト実施済み

#129706 Revert dotnet-optimization dependency update from #129405

概要

windows-x86 release CoreCLR_LibrariesビルドがMergeMibcFilesターゲットで失敗する問題を解決するため、#129405で行われたdotnet-optimizationパッケージの依存関係更新をリバートしました。問題の根本原因は、dotnet-pgo mergeが非致命的な警告メッセージを出力し、MSBuildのExecタスクがそれをエラーと判定してビルドを失敗させたものです。

変更内容

  • eng/Version.Details.props、eng/Version.Details.xml — MIBC/PGOパッケージをバージョン1.0.0-prerelease.26317.1から1.0.0-prerelease.26276.2にリバート(対応するSHA:4c45d9931b393b94ee8ae20e20ced71a02317e19 → 66482c2bec0351f496e4cc18d98f0f55f78b0c78)
  • src/coreclr/crossgen-corelib.proj — <Exec Command="$(DotNetPgoCmd)" />を元の状態に復元、IgnoreStandardErrorWarningFormat="true"ワークアラウンドを削除

パフォーマンスへの影響

影響なし

関連Issue

#129405(リバート対象)

その他

本変更は依存関係バージョン情報のみの変更のため、ビルド/テスト実行は不要。根本原因は後続の別途調査予定。


#129704 Increase RemoteExecutor timeout for DiagnosticSource bridge tests

概要

DiagnosticSource EventSource bridge テストにおいて、遅いCI環境でのRemoteExecutorのタイムアウト問題を解決するため、デフォルトの60秒タイムアウトを180秒(3分)に増加させるもの。テスト実行の失敗を削減することを目的としています。

変更内容

  • src/libraries/System.Diagnostics.DiagnosticSource/tests/DiagnosticSourceEventSourceBridgeTests.cs
    • 共有のRemoteInvokeOptionsインスタンスを導入(TimeOut = 180000ms)
    • DiagnosticSourceEventSourceBridgeTests内の全RemoteExecutor.Invoke()呼び出しを、デフォルトタイムアウトの代わりに共有の設定値を使用するように更新
    • テストケース(例:TestSamplingPrecedence)におけるタイムアウト問題への対応

パフォーマンスへの影響

テスト実行時間の増加の可能性あり。ただし、本変更は遅いCI環境でのタイムアウト発生を削減し、テストの信頼性を向上させることが目的であり、パフォーマンス改善ではなく安定性の向上に重点を置いています。

関連Issue

#129687

その他

なし


#129699 [mono][llvm] Recognize MathF.Abs/Log and Single/Double.MinNumber/MaxNumber as intrinsics

  • 作成者: @lewing
  • 作成日時: 2026年06月22日 14:25:33(UTC)
  • マージ日時: 2026年06月23日 02:47:32(UTC)
  • ラベル: area-Codegen-LLVM-mono

概要

Mono の LLVM バックエンド向けスカラー浮動小数点 API の intrinsic 認識を拡張します。MathF.Abs、MathF.Log、および IEEE 754-2019 の Single/Double.MinNumber/MaxNumber を LLVM intrinsic へ直接マッピングすることで、コード生成を最適化します。

変更内容

  • mini-ops.h: OP_LOGF、OP_FMINNUM、OP_FMAXNUM、OP_RMINNUM、OP_RMAXNUM の新規オペコード追加
  • llvm-intrinsics.h: INTRINS_LOGF、INTRINS_MINNUM、INTRINS_MINNUMF、INTRINS_MAXNUM、INTRINS_MAXNUMF の LLVM intrinsic 登録
  • mini-llvm.c: llvm.log.f32 および llvm.minnum.f32/f64・llvm.maxnum.f32/f64 intrinsic 呼び出しへのコード生成
  • intrinsics.c: MathF.Abs、MathF.Log、Single/Double.MinNumber/MaxNumber の BCL メソッド認識ロジック追加(Single/Double クラス専用ブロック新設)

パフォーマンスへの影響

改善あり。Single/Double.MinNumber/MaxNumber は従来 C# 本体の select(fcmp) チェーンがエンドツーエンド実行されていたのに対し、単一命令にマッピング:

  • AArch64: fminnm/fmaxnm
  • WASM: f32.min/f32.max(NaN 抑制セマンティクスに準拠)
  • x86: vminss/vminsd ファミリ

MathF.Log も同様に単一 llvm.log.f32 命令へ最適化。

関連Issue

#129593

その他

  • LLVM core intrinsic(LLVM 2.x 以降)のみ使用、ツールチェーン互換性あり
  • 既存認識動作への変更なし、SIMD パスへの影響なし
  • System.Runtime.Tests(iossimulator-arm64 LLVM AOT)で 4691/4691 テスト合格確認
  • MinMagnitude/MaxMagnitude/*Magnitude*Number 類は LLVM intrinsic 非対応のため別途対応予定

#129669 Fix ReferenceTrackerHost fixed-address storage

概要

ReferenceTrackerHostのs_globalHostServicesがIntPtr型に[FixedAddressValueType]属性を適用していましたが、この属性はプリミティブ型には対応していません。小さなラッパー値型を導入することで、COM ホストオブジェクトのレイアウトを変更せず、より適切に固定アドレスストレージを実装します。

[FixedAddressValueType]
private static readonly unsafe ReferenceTrackerHostObject s_globalHostServices =
    new((IReferenceTrackerHostVftbl*)Unsafe.AsPointer(in HostServices.Vftbl));

private readonly unsafe struct ReferenceTrackerHostObject
{
    public readonly IReferenceTrackerHostVftbl* Vftbl;
}

変更内容

  • s_globalHostServicesをIntPtr型から、vtableポインタを単一フィールドとして持つ値型ReferenceTrackerHostObjectに置き換え
  • [FixedAddressValueType]属性をプリミティブ型ではなく、値型に適用することで、ランタイムが正しく処理できるようになった
  • ネイティブ側のSetReferenceTrackerHostが期待するレイアウト(vtableポインタを最初のフィールドに持つオブジェクトへのポインタ)は変わらず

パフォーマンスへの影響

影響なし

関連Issue

#129669

その他

  • 内部実装(COM相互運用)の修正
  • 既存の公開APIやネイティブインターフェースに変更なし
  • [FixedAddressValueType]属性がプリミティブ型では機能しないという制限に対応した安全性向上

#129640 Optimize HashBytes for 64-bit and remove dead code

概要

HashBytes関数を最適化し、xxHash32プリミティブ(XXHash32_QueueRound/XXHash32_MixFinal)を使用して4バイト単位で処理することで、従来のバイト単位DJB2ハッシュを置き換えます。HashBytesは文字列リテラルのインターニングパス(JIT コンパイル中のldstrトークン解決)で使用されており、すべてのマネージドアプリケーションの定常状態コストの一部です。

xxHash32プリミティブをtypehashingalgorithms.hから新しい共有ヘッダsrc/coreclr/inc/dn_xxhash.hに抽出し、型ハッシング経路とHashBytes経路の両方で再利用できるようにします。

変更内容

  • src/coreclr/inc/dn_xxhash.h(新規): xxHash32プリミティブを共有ヘッダとして抽出
  • src/coreclr/inc/utilcode.h: HashBytesをxxHash32プリミティブを使用した実装に変更、未使用のハッシング関数(HashStringN、HashiStringA、HashiStringN)を削除
  • src/coreclr/vm/eehash.h/cpp: 未使用のEEUnicodeHashTableHelper、EEUnicodeStringHashTable実装を削除
  • src/coreclr/inc/shash.h: 未使用のCaseInsensitiveStringCompareHashを削除
  • src/coreclr/vm/typehashingalgorithms.h: xxHash32プリミティブを新しいヘッダに移行、不要なコードを削除
  • その他複数ファイル: 削除されたコードの参照を削除

パフォーマンスへの影響

大幅な改善: macOS ARM64(Apple M5)でのマイクロベンチマーク結果:

  • string.IsInterned()を200M回呼び出し(1000個の非インターン文字列のプール対象)
  • xxHash32プリミティブ方式: ベースラインから-10.3%(8.53秒→7.65秒) の改善
  • xxHash32クラス(uint32_t)では-2.7%、uint64_tでは+6.2%の結果から、直接プリミティブアプローチが選択されました。プリミティブはループに効率的にインライン化され、クラス方式のオーバーヘッド(位置追跡、分岐、アキュムレータ状態)を回避します。

関連Issue

なし

その他

  • このPRはGitHub Copilotの支援を受けて生成されました
  • 内部実装(utilcode.h、eehash.cppなど)の変更であり、公開APIへの影響はありません
  • 削除されたコードはすべて未使用(dead code)です

#129628 Fix compiled/source-generated lazy loop stack unwinding when giving up at max iteration

概要

Compiled および Source-Generated Regex エンジンで、最大イテレーション数に達した遅延ループからのバックトラック時に IndexOutOfRangeException が発生する問題を修正しました。遅延ループが複数回イテレーションした後、ループが終了時に正しくスタック状態をアンワインドしていなかったことが原因です。

// 修正例:遅延ループの最大イテレーション達成時のスタック巻き戻し
// 修正前: stackpos -= entriesPerIteration;  // 1イテレーション分のみ
// 修正後: stackpos -= lazyloop_iteration * entriesPerIteration;  // 全イテレーション分

変更内容

  • RegexGenerator.Emitter.cs: Source Generator エンジンの遅延ループ終了パスで、stackpos -= {iterationCount} * {entriesPerIteration} を生成するように修正
  • RegexCompiler.cs: Compiled エンジンの遅延ループ終了パスで、IL 生成時に iterationCount * entriesPerIteration を計算してスタック位置を更新
  • Regex.Match.Tests.cs: 遅延ループの最大イテレーション達成時のバックトラック処理をカバーする回帰テストケースを追加

パフォーマンスへの影響

影響なし

関連Issue

#129511、#68138、#97890

その他

  • 問題の根本原因:遅延ループの 2 つのアンワインドパスのうち、LazyLoopBacktrack 給与パスで複数イテレーション時の全スタック領域を巻き戻していなかった
  • Interpreter エンジンは異なるバックトラック機構を使用しているため、既に正しい結果を返していた
  • 修正後、Interpreter、Compiled、NonBacktracking、SourceGenerated の全エンジンで一貫した動作が確認されている

#129623 Clean up S.S.AccessControl

  • 作成者: @vcsjones
  • 作成日時: 2026年06月19日 15:56:14(UTC)
  • マージ日時: 2026年06月23日 23:40:10(UTC)
  • ラベル: area-System.Security

概要

System.Security.AccessControlライブラリのコードスタイルをクリーンアップし、現在のコーディング標準に合わせた内部実装の整理です。機能的な変更はありません。

変更内容

  • #region/#endregionブロック: 11ファイル全体で削除
  • コメント整理: 装飾的なバナーコメントと空の//セパレータ行を削除、コメント間隔を調整
  • コード整理: 冗長なthis.修飾子を削除、過度な空行を統合
  • 命名規則の統一: Privilege.csのプライベートフィールド名を現在の命名規則に変更

主な変更ファイル:

  • ACL.cs: 623行削除(コメント/リージョン/空行削除)
  • ACE.cs: 462行削除(同上)
  • SecurityDescriptor.cs: 279行削除(同上)
  • Privilege.cs: フィールド名変更とthis.修飾子削除

パフォーマンスへの影響

影響なし(コード整理のみ)

関連Issue

#15934

その他

  • 非破壊的な内部実装の変更(パブリックAPI変更なし)
  • S.S.AccessControlのポート時の遺産的なコードスタイルの解消
  • 既に各種アナライザーとコードフィッサーにより処理されていた項目の手動整理

#129563 Ensure other types of SIMD related loads, stores, and indirections are marked as used with SIMD intrinsics

概要

SIMD関連の負荷、格納、間接参照を適切にマーク付けすることで、構造体の昇格(struct promotion)を防止し、SIMDビットキャストが行われるパフォーマンスクリティカルなコードの最適化を改善します。従来は直接的なローカル読み書きのみが認識されていましたが、本変更によりIND(LCL_ADDR ...)などのIR形状も含めて対応します。

変更内容

  • compiler.h: SetOpLclRelatedToSIMDIntrinsicメソッドを一元化し、古いsetLclRelatedToSIMDIntrinsicヘルパーを削除(-100行)
  • gentree.cpp: gtInitializeLclVarNodeを新規追加し、ローカルノード作成時にSIMD/maskマーク付けを一貫して実行(+5行、-66行)
  • simd.cpp: 廃止された古いマーク付けロジックを削除(+2行、-42行)
  • importer.cpp/importercalls.cpp/lclvars.cpp: gtInitializeLclVarNodeの呼び出しを追加し、SIMD/mask関連のストア、間接参照を適切にマーク付け(計+76行)
  • hwintrinsicarm64.cpp/hwintrinsicxarch.cpp: 重複ロジックを削除(計-15行)

パフォーマンスへの影響

顕著な改善が期待されます。最適化版コード生成で、以下の改善が達成されます:

  • 改善前: 52バイト、PerfScore 20.5(不要なスタック格納・復元、余分なmov命令を含む)
  • 改善後: 22バイト、PerfScore 16.25(SIMD値への単一命令アクセス(mov)を活用)

構造体昇格が防止されることで、特にビットキャストを行うユーザー定義構造体とVector64/128/256/512型間の変換時に、より効率的なコード生成が実現します。

関連Issue

#129563

その他

このパターンはユーザー定義構造体とSIMD型間のビットキャスト(Unsafe.BitCast)が一般的であり、以下のようなコードで頻出します:

[StructLayout(LayoutKind.Sequential)]
public struct Vector2Double(double x, double y)
{
    public double X = x;
    public double Y = y;

    public static Vector2Double operator +(Vector2Double left, Vector2Double right)
    {
        var simdLeft = Unsafe.BitCast<Vector2Double, Vector128<double>>(left);
        var simdRight = Unsafe.BitCast<Vector2Double, Vector128<double>>(right);
        return Unsafe.BitCast<Vector128<double>, Vector2Double>(simdLeft + simdRight);
    }
}

本変更により、SIMDイントリンシックに関連するローカル値へのアクセスが正確に認識され、構造体昇格の不要な展開が回避されます。


#129475 Port System.Net.Http to OpenBSD

概要

System.Net.HttpライブラリをOpenBSDプラットフォームに対応させるPull Requestです。OpenBSD環境での動作をサポートするための修正が施されています。

変更内容

  • System.Net.Http.csproj: プロジェクト設定の変更(1行追加、1行削除)
  • opensslshim.c: OpenBSD向けのOpenSSLシム実装を追加(112行新規追加)。プラットフォーム固有のSSL/TLS機能をサポートするためのシム層コードと考えられます。

パフォーマンスへの影響

影響なし

関連Issue

#124911

その他

このPRはOpenBSDプラットフォームへの対応強化を目的とした変更であり、既存の他プラットフォームへの影響は最小限に抑えられています。


#129426 Take in account mandatory Zip64 Ext Info Extra Fields presence when required by spec

概要

ZIP形式のZip64拡張情報フィールド解析を修正し、ZIP仕様書セクション4.5.3に準拠するようにしました。ローカルファイルヘッダー内では非圧縮サイズと圧縮サイズフィールドが必須であることを仕様で定義されているため、ローカルヘッダーからの出典かセントラルディレクトリからの出典かに応じて、これらフィールドを適切に処理するようにしました。

変更内容

  • src/libraries/System.IO.Compression/src/System/IO/Compression/ZipBlocks.cs
    • Zip64ExtraField.GetJustZip64BlockとGetAndRemoveZip64BlockメソッドにisInLocalHeaderフラグを追加
    • isInLocalHeaderがtrueの場合、仕様で必須とされている非圧縮サイズと圧縮サイズフィールドをスキップするロジックを実装
    • セントラルディレクトリ解析の呼び出し箇所でisInLocalHeader=falseを指定

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本PR実装では、まだローカルヘッダーから直接ZipBlocks情報を解析する機能は未使用ですが、将来的にこの機能を利用した解析機能の追加が検討されています。


#129407 [release/9.0-staging] Update dependencies from dotnet/xharness

概要

dotnet/xharnessの依存関係を更新するプルリクエストです。Microsoft.DotNet.XHarness関連パッケージ(CLI、TestRunners.Common、TestRunners.Xunit)をバージョン11.0.0-prerelease.26301.2から11.0.0-prerelease.26319.2に更新しています。

変更内容

  • .config/dotnet-tools.json: dotnet-toolsの設定を更新(+1/-1)
  • eng/Version.Details.xml: 依存関係の詳細バージョン情報を更新(+6/-6)
  • eng/Versions.props: ビルド用プロパティファイルのバージョン定義を更新(+3/-3)

更新対象パッケージ:

  • Microsoft.DotNet.XHarness.CLI
  • Microsoft.DotNet.XHarness.TestRunners.Common
  • Microsoft.DotNet.XHarness.TestRunners.Xunit

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このプルリクエストはdotnet-maestro[bot]による自動依存関係更新です。release/9.0-stagingブランチへの更新であり、xharnessコミットa0534aec8fに基づいています(2026年6月19日時点)。


#129380 add tracing configuration

概要

トレース設定のサポートを追加するPRです。ビルダースタイルAPIを用いた設定可能なトレース機能を実装し、Issue #100317の承認済み設計に準拠しています。

主な機能:

  • AddTracingとトレースビルダーAPI(Microsoft.Extensions.Diagnostics)
  • ソース・操作・リスナー・スコープマッチングによるトレース有効化/無効化ルール
  • 設定ベースのトレース制御
  • ActivitySourceFactoryと関連するActivitySource/ActivityListenerの拡張

変更内容

System.Diagnostics.DiagnosticSource(コア変更):

  • ActivitySourceをアンシールし、派生クラス対応を実現
  • ActivitySourceFactory基底クラスを導入(スコープ検証・バインド・ソース作成)
  • ActivitySourceOptionsにScopeオプション追加
  • ActivityListener.RefreshSources()メソッド追加(リスナーのフィルタ更新)
  • ActivitySource.ResetSourceFilters実装(述語例外集約対応)
  • 破棄状態フラグによるリフレッシュ/破棄競合時の安全化

Microsoft.Extensions.Diagnostics(DI統合):

  • TracingServiceExtensions.AddTracing()で登録
  • DefaultActivitySourceFactory(ルール評価・設定反映・キャッシング対応)
  • TracingConfigureOptions(設定→ルール解析)
  • ActivityListenerConfigurationFactory(リスナー単位の設定ビュー作成)
  • TracingBuilderConfigurationExtensions.AddConfiguration()

Microsoft.Extensions.Diagnostics.Abstractions(パブリックAPI):

  • ITracingBuilderインターフェース
  • TracingRule(ワイルドカードスコープ検証)
  • TracingOptions(ルールリスト保持)
  • ActivitySourceScopesenum(Global/Local)
  • ActivityListenerBuilder(リスナーコンフィグ用)
  • TracingBuilderExtensions(ルール・リスナー登録メソッド)

パフォーマンスへの影響

影響なし

関連Issue

#100317

その他

  • 公開API承認済みですが、2つの細部は追加レビュー予定
  • System.Diagnostics.DiagnosticSourceとMicrosoft.Extensions.Diagnosticsで包括的なユニットテスト追加(ルール評価・設定読み込み・リスナーリフレッシュ・ファクトリキャッシング・破棄シナリオ)
  • 下位互換ポリフィルArgumentException.ThrowIfNullOrEmpty追加

#129377 [release/9.0-staging] Update dependencies from dotnet/icu

概要

dotnet/icu依存関係を 9.0.0-rtm.26278.1 から 9.0.0-rtm.26313.3 に更新するAutomated Dependency Updateです。Microsoft.NETCore.Runtime.ICU.Transportパッケージが更新されます。

変更内容

  • eng/Version.Details.xml: Microsoft.NETCore.Runtime.ICU.Transportのバージョン参照を更新(+2行/-2行)
  • eng/Versions.props: バージョンプロパティを更新(+1行/-1行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • release/9.0-stagingブランチの依存関係更新です
  • dotnet/icuリポジトリ側のコミット 4cc4a8d6に基づいています

#129232 [wasm] Delete obsolete wasm console templates and related WASI build tests

概要

廃止予定のWebAssembly (WASM) コンソールテンプレート (wasmconsole、wasiconsole) と、これらのテンプレートをテストするための WASI ビルドテストプロジェクト (Wasi.Build.Tests) を削除します。WASM/WASI ビルドインフラストラクチャを簡潔化し、ブラウザテンプレートと手動作成のサンプルに統一します。

変更内容

  • テンプレート削除

    • src/mono/wasm/templates/templates/console/ - wasmconsoleテンプレート全体(プロジェクトファイル、Program.cs、main.mjs、設定ファイルなど)
    • src/mono/wasm/templates/templates/wasi-console/ - wasiconsoleテンプレート全体(プロジェクトファイル、設定ファイルなど)
  • テストプロジェクト削除

    • src/mono/wasi/Wasi.Build.Tests/ - 全テストクラス、設定ファイル、テストデータを削除(BuildPublishTests、WasiTemplateTests、ILStripTests、HttpTests、RuntimeConfigTests、PInvokeTableGeneratorTests、InvariantTests、SdkMissingTests、WasiLibraryModeTests など)
  • ビルド・参照の更新

    • WasmBuild.slnx から Wasi.Build.Tests を削除
    • src/libraries/tests.proj から WASI ビルドテスト参照を削除
    • BuildWasiAppsJobsList.txt をクリア(テンプレート駆動型テストアセンブリが不要になったため)
    • WASI パス評価からテンプレート参照を削除
    • WASI runtimeconfig テンプレートをリネーム(wasi.runtimeconfig.template.json に統一)
    • ドキュメント更新:テンプレート使用ガイダンスを削除し、サンプル/手動作成への移行を指示
  • 関連ファイル更新

    • src/mono/wasm/Wasm.Build.Tests/ - Template enum から Wasi 値を削除、コメント更新
    • src/mono/browser/README.md - wasmbrowser テンプレートのみ残存を記載
    • src/mono/wasi/README.md - ドキュメント更新
    • src/mono/wasi/build/WasiApp.targets - runtimeconfig テンプレート参照をリネーム対応

パフォーマンスへの影響

影響なし

関連Issue

その他

このPRは廃止予定のテンプレートを削除し、WASI 開発は手動プロジェクト作成またはサンプルの参照に移行します。ブラウザ向けWebAssembly テンプレートは wasmbrowser のみ残存し、Wasm.Build.Tests でテストされます。


#129216 Implement computed goto dispatch for the CoreCLR interpreter

概要

CoreCLR インタープリタのオペコード ディスパッチ機構を computed goto を使用した実装に変更し、パフォーマンスを大幅に向上させました。従来のスイッチ文ベースのディスパッチから、コンパイラが静的に生成したジャンプテーブルを使用した直接アドレス分岐に切り替えることで、インタープリタの実行速度を約 25% 向上させます。また、毎オペコード実行時の pFrame->ip 保存を削除し、GC トリガーまたは例外発生の可能性がある場合のみ明示的に保存することで、さらに約 3% の実行速度改善が期待されます。

変更内容

  • src/coreclr/vm/interpexec.cpp:

    • オペコード ディスパッチ ロジックを computed goto パターンに実装変更
    • 毎オペコード実行時の pFrame->ip 保存を削除
    • GC トリガー・例外発生の可能性がある個別のオペコード実装で明示的に pFrame->ip を保存
    • InterpThrow ヘルパー関数を追加し、例外発生時に pFrame->ip が必ず設定されるよう確保
  • src/coreclr/interpreter/inc/intops.def:

    • 新規ラベル定義マクロを追加(21 行追加)
  • src/coreclr/interpreter/compiler.cpp:

    • ディスパッチテーブル初期化に対応するコード追加
  • src/coreclr/debug/ee/interpreterwalker.cpp:

    • マイナー調整

パフォーマンスへの影響

  • インタープリタ実行速度: 約 25% 向上(computed goto ベースのディスパッチ導入による)
  • 追加的な改善: 約 3% の実行速度改善(毎オペコード実行時の pFrame->ip 保存削除による)
  • WebAssembly への影響: WASM は制御フローの制限により無条件分岐が不可能なため、本最適化の効果は限定的と予想

関連Issue

なし

その他

  • 本実装は CoreCLR インタープリタ(デバッグビルドで使用される軽量インタープリタ)のパフォーマンス最適化を目的としています
  • 破壊的変更なし。インタープリタの内部実装変更のため、公開 API への影響はありません

目次