Pull Request on 2026年07月09日

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

注意点

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


目次

  1. #130414 Add Complex<T> generic struct mirroring Complex API surface
  2. #130404 [release/10.0] Fix cgroup v2 memory max extraction
  3. #130392 [release/9.0-staging] Update dependencies from dotnet/icu
  4. #130391 [wasm] Bail R2R for all SIMD parameter sizes, not just SIMD16
  5. #130386 Ensure code is ready for calls from R2R Wasm logic
  6. #130378 Remove some branches in OptimizedInboxTextEncoder.GetIndexOfFirstCharToEncode
  7. #130377 Fix cgroup v2 memory max extraction
  8. #130363 Adjust InterpreterFP handling to represent the logical FP (where funclets share the FP with the establishing method)
  9. #130360 [clr-ios] Disable R2R IL-body stripping for library tests that need IL at run time
  10. #130341 Fix Apple NativeAOT test harness crash from string P/Invoke marshalling
  11. #130325 Deduplicate IObjectNodeWithAlignment into shared Common dependency analysis
  12. #130279 Pin blittable layout classes in NativeAOT marshalling
  13. #130273 [release/10.0] Source code updates from dotnet/dotnet
  14. #130239 Fix NativeAOT reverse delegate stub signature with runtime marshalling disabled
  15. #130195 [release/9.0-staging] Update dependencies from dotnet/cecil
  16. #130170 Optimize await Task.Yield() in runtime async
  17. #130158 [cDAC] Fix #130143 - search correct loader module for generic instantiations
  18. #130151 Optimize MethodDataObject::FillEntryDataForAncestor for MethodImpl hierarchies
  19. #130140 Add ToUpperOrdinal and ToLowerOrdinal casing APIs
  20. #130104 Add special casing for string constructors for WebAssembly
  21. #130093 Handle if_nametoindex failure in EnumerateInterfaceAddresses.
  22. #130026 [clr-interp] Ensure initialization of MethodDesc->m_interpreterCode
  23. #129887 [LoongArch64] Apply fixes for coreclr-interp on linux-loongarch64.
  24. #129491 Remove unreachable NotImplementedException array-with-choice
  25. #129489 Implement support for XmlAttribute in WriteAttribute method
  26. #128950 Arm64: [PAC-RET] NativeAOT changes
  27. #128777 [Android] Add missing JNI exception checks in crypto PAL
  28. #128506 Fix DataContractSerializer nullable struct initialization cache lookup
  29. #122093 Add Zip Archives password support

#130414 Add Complex<T> generic struct mirroring Complex API surface

概要

Complex<T> ジェネリック構造体を新規実装し、既存の非ジェネリック Complex の完全な公開API表面をミラーリングしています。Complex<T> は IFloatingPointIeee754<T> と IMinMaxValue<T> の制約を持ち、float、double、Half、BFloat16、NFloat などの浮動小数点型に対応します。既存の Complex は複数のメソッドを Complex<double> に委譲し、コード重複を排除しています。

Complex<float> z = Complex<float>.FromPolarCoordinates(2.0f, MathF.PI / 4);
float mag = z.GetMagnitude();
Complex<float> w = z * 3.0f + new Complex<float>(1.0f, -1.0f);

// 双方向の相互変換に対応
Complex c = Complex.CreateChecked(new Complex<double>(3, 4));
Complex<float> cf = Complex<float>.CreateChecked(new Complex(3, 4));

変更内容

  • 新規ファイル: Complex.Generic.cs — Complex<T> の完全実装(1696行)

    • 算術演算子:+, -, *, /, 単項演算子、インクリメント/デクリメント
    • 静的プロパティ:Zero, One, ImaginaryOne, NaN, Infinity
    • インスタンスメソッド:GetMagnitude(), GetPhase()
    • 数学関数:Abs, Sqrt, Pow, Exp, Log, 三角関数、双曲線関数、逆三角関数、FromPolarCoordinates
    • ジェネリック数学インターフェース実装:INumberBase<Complex<T>>, ISignedNumber<Complex<T>>, IAdditiveIdentity, IMultiplicativeIdentity
    • パース・フォーマット:IParsable, ISpanParsable, IUtf8SpanParsable, ISpanFormattable, IUtf8SpanFormattable
    • 変換:CreateChecked/CreateSaturating/CreateTruncating で複数の型間変換に対応
  • Complex.cs の更新(-1535行、メソッド委譲により削減)

    • DefaultNumberStyle と InvalidNumberStyles を internal に昇格
    • 4行以上の実装を持つメソッドを Complex<double> に委譲(混合型演算子、三角関数、数学関数、変換ヘルパー)
    • 未使用の private フィールド (s_sqrtRescaleThreshold, s_asinOverflowThreshold, s_log2) と内部ヘルパーを削除
  • ref/System.Runtime.Numerics.cs — 公開APIサーフェスに Complex<T> を追加(+127行)

  • tests/ComplexTests.cs — 37個のテストを含む ComplexTests_Generic スイートを追加(+334行)

    • 基本構築、算術演算、パース、述語、相互変換をカバー
  • プロジェクト設定 — 新規ファイルをビルドに組み込み

パフォーマンスへの影響

既存の Complex は複数メソッドを Complex<double> に委譲するため、若干のインダイレクション増加の可能性があります。ただし、JITコンパイラによ


#130404 [release/10.0] Fix cgroup v2 memory max extraction

概要

cgroup v2を使用するLinux環境で、プロセスがcgroup階層のルートに割り当てられている場合に発生するメモリ最大値抽出のバグを修正します。この問題は.NET 9.0で導入され、Google Colabのようなcgroup v2環境でNativeAOT実行時の起動時クラッシュを引き起こしていました。修正により、cgroup階層スキャンループがマウントルートに到達時に正しく終了し、そのフォルダのmemory.maxファイルを処理するようになります。

変更内容

  • src/coreclr/gc/unix/cgroup.cpp: cgroup v2メモリ最大値抽出処理の修正(+8/-2行)
    • cgroup階層スキャンループがマウントルートで正しく終了するロジックを追加
    • ルートディレクトリのmemory.maxファイル処理を正しく実装

パフォーマンスへの影響

影響なし

関連Issue

#130092(顧客報告) #130377(元のPR) #93611(回帰を引き起こしたPR)

その他

  • リグレッション: .NET 9.0で#93611にて階層的メモリ制限対応時に導入
  • テスト環境: Google Colabの jupyter notebook環境でNativeAOTアプリケーション実行時に検証
  • 修正のリスク: 低い。cgroup情報抽出コードの安全性向上のみ
  • 関連技術: cgroup v2、NativeAOT、Linux GC メモリ管理

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

概要

dotnet/icu リポジトリの依存パッケージを更新します。Microsoft.NETCore.Runtime.ICU.Transport を 9.0.0-rtm.26356.1 から 9.0.0-rtm.26358.1 へアップグレードします。

変更内容

  • eng/Version.Details.xml: 依存パッケージの詳細情報を更新(2行追加、2行削除)
  • eng/Versions.props: バージョン番号を更新(1行追加、1行削除)

パフォーマンスへの影響

提供情報に記載なし

関連Issue

なし

その他

  • Maestro による自動依存更新
  • ビルド日時: 2026年7月8日 15:42:49 UTC
  • dotnet/icu の dotnet/release/9.0 ブランチからの更新

#130391 [wasm] Bail R2R for all SIMD parameter sizes, not just SIMD16

  • 作成者: @lewing
  • 作成日時: 2026年07月09日 01:28:29(UTC)
  • マージ日時: 2026年07月09日 13:05:47(UTC)
  • ラベル: area-CodeGen-coreclr

概要

WebAssembly(WASM)の Ready-to-Run(R2R)コンパイルにおいて、SIMD パラメータの処理に関するバグを修正しました。Vector2(TYP_SIMD8)および Vector3(TYP_SIMD12)パラメータが不正なWASMモジュールを生成していた問題を、すべてのSIMDサイズに対応させることで解決します。

修正前はTYP_SIMD16のみをインタプリタにベイルアウトしていましたが、修正後はvarTypeIsSIMD(...)を使用してすべてのSIMDパラメータ(8/12/16バイト)をインタプリタにベイルアウトします。

// 修正例:System.Numerics.Matrix3x2.CreateRotation(float, Vector2)
// 修正前:不正なf64.storeを生成(i32パラメータを使用)
// 修正後:インタプリタを使用して正常にコンパイル

変更内容

  • src/coreclr/jit/codegenwasm.cpp:genBeginFnProlog内のR2Rベイルアウト処理を更新
    • パラメータ型チェックをTypeGet() == TYP_SIMD16からvarTypeIsSIMD(TypeGet())に拡張
    • コメントおよびNYIメッセージを一般化

パフォーマンスへの影響

影響なし。この修正はコンパイル時の正確性確保に関するもので、実行時パフォーマンスには影響しません。

関連Issue

#130101(SIMD16パラメータベイル追加の元のPR)

その他

  • System.Private.CoreLibがWASM向けの有効なR2Rイメージ(シングルファイル/コンポジット両対応)を生成できるようになります
  • crossgen2での--targetos wasi --targetarch wasm使用時に、wasm-toolsの検証を通過するモジュールが生成されることを確認済み
  • macOS/arm64での動作検証済み

#130386 Ensure code is ready for calls from R2R Wasm logic

  • 作成者: @davidwrighton
  • 作成日時: 2026年07月08日 23:46:19(UTC)
  • マージ日時: 2026年07月09日 16:56:12(UTC)
  • ラベル: area-VM-coreclr

概要

R2R(Ready2Run)Wasm環境でネイティブコードから呼び出されるクラス/デフォルトコンストラクタが、Ryujitが生成したコードからの呼び出しに対応できるよう準備が必要になったため、メソッド準備ロジックを改善する変更です。System.Private.CoreLibが事前にコンパイル(R2R化)されている場合、これらのメソッドが確実にネイティブコードから呼び出せる状態になるようにします。

変更内容

  • src/coreclr/vm/callhelpers.cpp: コンストラクタ呼び出しヘルパーのメソッド準備ロジックを強化(+9行)
  • src/coreclr/vm/methodtable.cpp: メソッドテーブル処理においてメソッド準備関連の処理を追加(+10行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はR2R Wasm環境での動作を対象としています。ランタイム内部実装(CLRランタイムのVM層)の修正で、公開APIの変更ではありません。


#130378 Remove some branches in OptimizedInboxTextEncoder.GetIndexOfFirstCharToEncode

概要

OptimizedInboxTextEncoder.GetIndexOfFirstCharToEncode メソッドの冗長な範囲チェックと中間スパンを削除し、コード生成を最適化するリファクタリング。idx は既に範囲内であることが保証されているため、不要な guard と remaining span を排除し、data をその場でスライスして直接ループ処理を行うようにしました。動作の変更はなく、コード生成サイズが改善されます。

変更内容

  • src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/OptimizedInboxTextEncoder.cs
    • (uint)idx < (uint)data.Length guard 条件の削除
    • 中間的な remaining span の廃止
    • data.Slice(idx) をループ内で直接実行し、スライスされたスパンに対して8倍アンロール走査とフォールバック foreach ループを適用
    • 戻り値フロー調整(全消費時に -1 返却、禁止文字発見時に idx 返却)

パフォーマンスへの影響

コード生成が改善:

  • コードサイズ: 516 bytes → 485 bytes(31 bytes 削減)
  • 命令数: 156 → 146(10 命令削減)
  • 呼び出し元保存レジスタ: r14 のスピル削除

冗長な範囲チェックが除去され、追加の長さレジスタが不要になります。ホットループの境界チェック消去は維持され、data.Slice(idx) は ThrowArgumentOutOfRange なしの純粋なポインタ演算としてコンパイルされます。

関連Issue

#129625 のレビューフィードバックに基づく後続対応

その他

  • System.Text.Encodings.Web.Tests(610 テスト)により検証済み
  • GitHub Copilot の支援を受けて実装

#130377 Fix cgroup v2 memory max extraction

  • 作成者: @janvorli
  • 作成日時: 2026年07月08日 21:24:42(UTC)
  • マージ日時: 2026年07月09日 11:51:34(UTC)
  • ラベル: area-GC-coreclr

概要

cgroup v2環境において、プロセスがルートcgroupに割り当てられている場合、メモリ上限の抽出処理がcgroup階層マウントパスを超えて走査し、プロセスがクラッシュする問題を修正しました。Google Colabの環境でJupyterノートブック内のNativeAOTアプリケーション実行時に発見されました。

変更内容

  • src/coreclr/gc/unix/cgroup.cpp: 親cgroup走査時にcgroupPathLengthがメモリcgroup階層マウントの長さに達した時点で明示的にループを終了する条件を追加しました。これにより、マウントパス以上の階層を走査する際のパス解決エラーを防止します。

パフォーマンスへの影響

影響なし

関連Issue

#130092

その他

この修正は、ルートcgroup内でのメモリ制限発見時の境界条件バグ(エッジケース)の対応です。変更は内部実装(ガベージコレクタのcgroup処理)に限定され、公開APIへの影響はありません。


#130363 Adjust InterpreterFP handling to represent the logical FP (where funclets share the FP with the establishing method)

  • 作成者: @davidwrighton
  • 作成日時: 2026年07月08日 16:34:12(UTC)
  • マージ日時: 2026年07月09日 16:49:18(UTC)
  • ラベル: area-VM-coreclr

概要

WASM インタプリタにおけるInterpreterFP(フレームポインタ)の処理を調整し、funclet(例外処理コード)がこれを確立メソッドのFPとして共有する論理的なFPとして扱うようにしました。これにより、FPをSPから再構築するのではなく、コンテキスト構築時に設定してフロー経由で利用することで、funclet内でのGC報告を正確に行えます。この変更はRyuJit生成コードに限定されます。

変更内容

  • wasm/helpers.cpp: funcletに対応した論理FP回復処理を追加し、controlPCベースのアンワインドロジックを実装
  • wasm/cgencpu.h: InterpreterFPをWASMの callee-saved "レジスタ" 列挙に追加
  • stackwalk.cpp: SkipToメソッドのレジスタコピーパスを調整
  • gcinfodecoder.cpp: WASMフレーム相対のGCスロット計算でInterpreterFPを直接使用
  • excep.cpp: WASM SoftwareExceptionFrameを更新し、controlPCベースのヘルパーでInterpreterFPを設定
  • eetwain.cpp: WASMのfunclet呼び出しで現在のコンテキストFPを使用(カスタムアンワインドループを削除)
  • codeman.h/cpp: ExecutionManager::IsFuncletFuntionIndexメソッドを追加

パフォーマンスへの影響

funclet内でのGC報告が正確になることにより、GC追跡の精度向上が期待されます。FP再構築処理の削減により若干の性能改善が見込まれます。

関連Issue

なし

その他

  • 内部実装の変更であり、公開APIへの影響なし
  • codeman.hのメソッド名に「Funttion」というタイプ誤字が存在します

#130360 [clr-ios] Disable R2R IL-body stripping for library tests that need IL at run time

概要

Apple mobile CoreCLR向けのReadyToRun(R2R)ビルドでILボディが削除されることにより、実行時にILが必要な4つのライブラリテストが失敗する問題を修正します。System.Runtime.Loader.Tests、System.Reflection.DispatchProxy.Tests、System.Xml.XmlSerializer.ReflectionOnly.Tests、System.Reflection.Metadata.Testsに対してPublishReadyToRunStripILBodies=falseを設定し、Helix AOTビルドがこの設定を認識するようtests.ioslike.targetsのプロパティ許可リストに追加しました。

変更内容

  • eng/testing/tests.ioslike.targets: PublishReadyToRunStripILBodiesプロパティを_ApplePropertyNames許可リストに追加し、Helix proxy projectが設定を引き継ぐようにしました。
  • System.Runtime.Loader.Tests.csproj: collectible AssemblyLoadContextにロードされるため、R2Rネイティブコードを使用できず、IL再コンパイルが必要なため、IL削除を無効化。
  • System.Reflection.DispatchProxy.Tests.csproj: collectible AssemblyLoadContextへの対応で同様にIL削除を無効化。
  • System.Xml.XmlSerializer.ReflectionOnly.Tests.csproj: collectible AssemblyLoadContextへの対応で同様にIL削除を無効化。
  • System.Reflection.Metadata.Tests.csproj: 削除されたメソッドボディを直接読み取るため、IL削除を無効化。

パフォーマンスへの影響

影響なし。テスト特定の例外(InvalidProgramException、BadImageFormatException)を回避するための修正であり、パフォーマンスに関する変更ではありません。

関連Issue

なし

その他

この変更はApple mobile(ioslike)向けのテストビルドのみに影響し、他のプラットフォームやプロダクション用のビルドには影響しません。collectible AssemblyLoadContextにロードされるアセンブリはR2Rネイティブコードを活用できない制限により、実行時にILボディが必須です。


#130341 Fix Apple NativeAOT test harness crash from string P/Invoke marshalling

概要

Apple NativeAOT環境でテストハーネス起動時にクラッシュしていた問題を修正します。mono_ios_set_summaryとmono_ios_append_outputのP/Invokeがstring型を使用していたため、[DisableRuntimeMarshalling]属性下でのマーシャリングが禁止され、MarshalDirectiveExceptionが発生していました。これらをIntPtrに変更し、マネージドコード側でMarshal.StringToCoTaskMemUTF8を用いて明示的にUTF-8バッファに変換することで、ブリット可能なP/Invokeに統一し、Mono/NativeAOT両方で正しく動作するようにしました。

変更内容

  • AppleTestRunner.cs: mono_ios_set_summaryとmono_ios_append_outputのP/Invoke署名をIntPtr型に変更。文字列引数を受け取るマネージドラッパーメソッドを追加し、内部でMarshal.StringToCoTaskMemUTF8でUTF-8バッファに変換、呼び出し後にMarshal.FreeCoTaskMemで解放する実装に変更。
  • AppleTestRunner.csproj: ビルド設定を調整。
  • tests.ioslike.targets: テスト実行構成を更新。

パフォーマンスへの影響

影響なし

関連Issue

#130219

その他

この修正はNativeAOT環境下での[DisableRuntimeMarshalling]属性との互換性を確保するもので、ネイティブ側のconst char*シグネチャとマネージド側のP/Invoke定義の齟齬を解消します。ブリット可能なP/Invokeは実行時マーシャリングを必要としないため、NativeAOTコンパイル時の検証エラーを回避できます。


#130325 Deduplicate IObjectNodeWithAlignment into shared Common dependency analysis

  • 作成者: @Copilot
  • 作成日時: 2026年07月08日 00:31:46(UTC)
  • マージ日時: 2026年07月09日 07:12:47(UTC)
  • ラベル: area-Infrastructure

概要

PR #129966で導入された重複するIObjectNodeWithAlignmentインターフェース定義を削除し、AOTコンパイラプロジェクト間で単一の共有契約を復元します。共有のCommon依存性分析層に移動し、両方のプロジェクト(ILCompiler.CompilerとILCompiler.ReadyToRun)で参照するようにしました。

namespace ILCompiler.DependencyAnalysis
{
    public interface IObjectNodeWithAlignment
    {
        int GetAlignment(NodeFactory factory);
    }
}

変更内容

  • 共有インターフェース移動: IObjectNodeWithAlignmentをsrc/coreclr/tools/Common/Compiler/DependencyAnalysis/IObjectNodeWithAlignment.csに配置し、ILCompiler.DependencyAnalysis名前空間を使用
  • プロジェクトファイル更新: ILCompiler.Compiler.csprojおよびILCompiler.ReadyToRun.csprojを修正して共有ファイルをコンパイル対象に追加
  • 重複定義削除: ReadyToRunのプロジェクトローカルなインターフェース定義(17行)を削除
  • XML doc保持: GetAlignmentがGetData/GetDehydratableDataと一貫性を保つ必要があるという契約をドキュメント化

パフォーマンスへの影響

影響なし

関連Issue

#129966

その他

  • 公開APIの変更はなし(内部インターフェースの整理)
  • 既存実装は動作変更なく単一定義に対してコンパイルされます
  • 共有依存性分析層への統合で、コード重複排除と保守性向上を実現

#130279 Pin blittable layout classes in NativeAOT marshalling

概要

NativeAOTのマーシャリングにおいて、値で渡されるblittable layout クラスのピニング機能を実装しました。これまでは常に一時的なネイティブ構体にコピーされていましたが、今回の変更によりマネージドオブジェクトをピニングしてインテリア ポインタを直接ネイティブコードに渡すようになります。これにより、ポインタの同一性、暗黙的な[In,Out]ライトバック、および[Out]セマンティクスが正しく機能するようになります。

変更内容

  • src/coreclr/tools/Common/TypeSystem/Interop/IL/Marshaller.Aot.cs: LayoutClassPtrMarshallerにピニングベースのCLR→ネイティブマーシャリングパスを追加。非byref、非return、blittableなレイアウトクラス引数に対して、マネージドオブジェクトをピニングしてインテリアポインタを直接ネイティブに渡すようにしました。byref、フィールド、リバース、return、非blittableシナリオは引き続き構体マーシャリング経由でコピーします。
  • src/tests/Interop/LayoutClass/LayoutClassTest.cs: NativeAOT固有のActiveIssue(#81673)スキップを削除し、LayoutClassインタオペラビリティテストを再度有効化しました。

パフォーマンスへの影響

ピニングによるポインタ直接参照のため、不要なメモリコピーが削減されます。特にblittableなレイアウトクラスを値で渡す場合、CoreCLRのILBlittablePtrMarshallerと同等の効率化が期待できます。

関連Issue

#81673

その他

この変更はNativeAOT特有の制限を解決し、CoreCLRの既存動作に合わせることで、プラットフォーム間でのマーシャリングセマンティクスの一貫性を向上させます。


#130273 [release/10.0] Source code updates from dotnet/dotnet

概要

dotnet/dotnetリポジトリからのコードフロー更新PR。release/10.0.1xxブランチからの依存関係更新が含まれています。Microsoft.CodeAnalysisやビルドツール、NuGetツール、WebAssembly関連パッケージなど複数の主要な依存関係がアップデートされます。

変更内容

  • NuGet.config: NuGetソース設定の更新(+1/-1行)
  • eng/Version.Details.props: 詳細バージョン情報の更新(+37/-37行)
  • eng/Version.Details.xml: XMLバージョン定義の更新(+85/-85行)
  • eng/Versions.props: バージョン定義の更新(+6/-6行)
  • global.json: グローバル設定の更新(+3/-3行)

主要な依存関係更新:

  • Microsoft.CodeAnalysis系(5.0.0-2.26329.112 → 5.0.0-2.26358.108)
  • Microsoft.DotNet.Arcade.Sdk含むビルドタスク群(10.0.0-beta.26329.112 → 10.0.0-beta.26358.108)
  • NuGet.Frameworks/Packaging/ProjectModel/Versioning(7.0.3-rc.33012 → 7.0.3-rc.35908)
  • WebAssembly Node Transport関連パッケージ(10.0.0-alpha.1.26310.1 → 10.0.0-alpha.1.26353.2)
  • System.Text.Json、System.Reflection.Metadata等(10.0.10維持)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本PRはVMR(Virtual Monolithic Repository)からのコードフロー更新です。以下のリポジトリに関連する変更が含まれています:

  • dotnet/aspnetcore
  • dotnet/runtime
  • dotnet/scenario-tests
  • dotnet/sdk
  • dotnet/source-build-assets
  • dotnet/templating
  • dotnet/windowsdesktop
  • dotnet/wpf

#130239 Fix NativeAOT reverse delegate stub signature with runtime marshalling disabled

概要

NativeAOT のリバースデリゲートスタブにおいて、ランタイムマーシャリングが無効な場合に、ネイティブシグネチャの計算がマネージドシグネチャと一致していなかった問題を修正します。GetNativeMethodParameterType で合成された __NativeType__ 構造体を使用していましたが、ランタイムマーシャリングの無効化チェックを追加し、無効な場合はマネージドシグネチャをそのまま使用するようにしました。また、varargs 関連の例外型を BadImageFormatException から InvalidProgramException に修正し、DisabledRuntimeMarshalling テストの NativeAOT 対応を再度有効化します。

変更内容

  • DelegateMarshallingMethodThunk.cs: ランタイムマーシャリング有効性を確認してネイティブシグネチャ計算をゲート化。無効な場合はマネージドシグネチャを使用
  • EcmaSignatureParser.cs: varargs の SignatureTypeCode.Sentinel を BadImageFormatException ではなく InvalidProgramException として処理
  • CorInfoImpl.cs: サポートされない varargs シグネチャの例外型を修正
  • ILImporter.Scanner.cs: varargs コール import 拒否時の例外型を修正
  • LibraryRootProvider.cs: varargs メソッド拒否時の例外型を修正
  • DisabledRuntimeMarshalling テスト csproj: 4 つのテストプロジェクトから NativeAotIncompatible を削除し、NativeAOT テストを再度有効化

パフォーマンスへの影響

影響なし

関連Issue

#84402

その他

なし


#130195 [release/9.0-staging] Update dependencies from dotnet/cecil

概要

dotnet/cecilの依存関係を更新するPull Requestです。Cecil 0.11.5-alpha.26314.1 から 0.11.5-alpha.26353.2 へのバージョンアップに伴い、Microsoft.SourceBuild.Intermediate.cecilとMicrosoft.DotNet.Cecilが更新されます。

変更内容

  • eng/Version.Details.xml: Cecil依存関係のバージョン記述を更新(+4/-4行)
  • eng/Versions.props: Cecilのバージョン番号を更新(+1/-1行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 自動依存関係更新PR(dotnet-maestroによる)
  • release/9.0-stagingブランチへのマージ
  • dotnet/cecilのrelease/9.0ブランチからの更新(2026年7月3日ビルド)

#130170 Optimize await Task.Yield() in runtime async

概要

await Task.Yield()のランタイムasync実装を最適化し、async1と同等のパフォーマンスを実現します。YieldAwaiterに対してIStateMachineBoxAwareAwaiterインターフェースの最適化を適用し、await毎のスレッドプール内部オブジェクト割り当てを回避します。また、未使用のAsyncHelpers.TaskContinuation.csを削除します。

変更内容

  • AsyncHelpers.cs: UnsafeAwaitAwaiter<TAwaiter>でYieldAwaiterを特殊ケース処理し、シングルトン実装のRuntimeAsyncYielder.Instanceを使用
  • AsyncHelpers.RuntimeAsyncYielder.cs(新規): ランタイムasync用の単一インスタンスICriticalNotifyCompletion実装。SynchronizationContext/TaskScheduler/スレッドプール経由でcontinuationをスケジュール
  • AsyncHelpers.TaskContinuation.cs(削除): 未使用のレガシー実装を削除
  • Delegate.cs: 新しいyielder実装用に内部ヘルパーメソッド追加(CoreCLR/NativeAOT両対応)
  • プロジェクトファイル: CoreCLR/NativeAOT CoreLibビルドにAsyncHelpers.RuntimeAsyncYielder.csを追加

パフォーマンスへの影響

大幅な改善:

  • 変更前:726.1 ms平均
  • 変更後:533.5 ms平均
  • 改善率:約26%削減(実測値では720ms → 535ms程度)
  • async1と同等のパフォーマンスを実現
  • Task.Yield()の大量使用時に割り当て削減によるGC圧力軽減

ベンチマーク結果から、async1(約535ms)との性能差を解消

関連Issue

#130170

その他

  • この最適化は主にマイクロベンチマークの公平性向上に寄与。実装はIStateMachineBoxAwareAwaiterシングルトンパターンを活用し、async1との一貫性を確保
  • NativeAOT環境にも対応するため、複数のプロジェクト/ソースファイルを統一的に変更
  • 破壊的変更なし、公開APIへの影響なし

#130158 [cDAC] Fix #130143 - search correct loader module for generic instantiations

  • 作成者: @rcj1
  • 作成日時: 2026年07月03日 04:47:04(UTC)
  • マージ日時: 2026年07月09日 02:10:06(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(CoreCLR Diagnostic Access Component)の GetConstructedType メソッドにおいて、ジェネリック型インスタンスのローダーモジュール検索アルゴリズムを修正しました。collectible AssemblyLoadContext からの型引数を含むジェネリック型の解決に失敗していた問題(#130143)に対応しています。CoreCLR の ClassLoader::ComputeLoaderModuleWorker を鏡像するアルゴリズムを実装することで、型引数駆動型のローダーモジュール選択を実現しました。

変更内容

  • RuntimeTypeSystem_1.cs: ELEMENT_TYPE_GENERICINST に対して、定義モジュール + 型引数に基づくローダーモジュール計算を実装。collectible 対応の TryGetCollectibleLoaderAllocator ヘルパーメソッドを追加し、ローダーモジュール計算ロジックを統合。
  • RuntimeTypeSystem.md: 設計ドキュメントを更新し、FnPtr固有のヘルパーを削除して新しいアルゴリズムを参照(レビューコメントにて構文修正が必要な指摘あり)。
  • テスト追加: collectible アセンブリ内のジェネリック型インスタンスに対するダンプテスト (CollectibleGenericInstDumpTests.cs) と対応するデバッグシンボル、テストプログラムを追加。

パフォーマンスへの影響

影響なし

関連Issue

#130143

その他

この変更は内部診断インフラ(cDAC)に限定されるもので、公開APIへの影響はありません。レビュアーのコメントにて設計ドキュメントの構文修正が言及されており、マージ前に対応が必要と考えられます。


#130151 Optimize MethodDataObject::FillEntryDataForAncestor for MethodImpl hierarchies

  • 作成者: @davidwrighton
  • 作成日時: 2026年07月02日 23:51:49(UTC)
  • マージ日時: 2026年07月09日 17:44:47(UTC)
  • ラベル: area-VM-coreclr

概要

MethodTable::MethodDataObject::FillEntryDataForAncestor をMethodImpl階層向けに最適化します。

従来はMethodImplが存在する場合に全ての仮想スロットの埋め込みをスキップしていたため、O(V*N)の二次計算量が発生していました(V:仮想スロット数、N:型階層内のメソッド数)。

本変更では、正規MethodTableのvtableでNULLエントリのスロットを検出し、これらのスロットについては親チェーンをたどって直接埋め込むことで、WPF等の深い階層を持つ型の起動時パフォーマンスを改善します。

変更内容

  • src/coreclr/vm/methodtable.h: GetSlotForVirtualVolatileLoadWithoutBarrier ヘルパー追加(正規vtableスロットをメモリバリアなしで読み取り)
  • src/coreclr/vm/methodtable.cpp: FillEntryDataForAncestor 実装を変更
    • MethodImpl存在時に正規vtable内のNULLスロットを検出
    • NULLスロット(上書きされていない仮想メソッド)の場合、親チェーンをたどって導入型までDecl/Impl MethodDescを埋め込み
    • 一般的なMethodImplケースの保守的な早期リターンは維持

パフォーマンスへの影響

改善あり(WPF起動時性能):

  • App1(空ウィンドウ): 919.6 ms → 858.1 ms(−6.7%、−61.5 ms)
  • App2(メニュー+ツールバー+50行DataGrid): 1455.9 ms → 1377.9 ms(−5.4%、−78.0 ms)

測定は正規MethodTable読み込み処理の型ロード時間削減に特化しており、MethodImplが実際に存在する階層でのみ追加処理が実行されるため、一般的なケースへの影響はありません。

関連Issue

dotnet/wpf#11740

その他

  • 正確性検証は既存の型ロードテストスイートでカバー(誤った解決は広く表面化)
  • 本変更はFramework-dependent app上でJIT処理が含まれる開発ランタイムでの測定であり、実際の運用環境ではReadyToRun化により絶対値は改善しますが、削減幅は同等です
  • GitHub Copilotの支援下で実装されました

#130140 Add ToUpperOrdinal and ToLowerOrdinal casing APIs

概要

StringComparison.OrdinalIgnoreCase と同じ one-to-one マッピング方式を使用した序数(ordinal)ベースの大文字小文字変換API を実装します。char、Rune、string、および MemoryExtensions に ToUpperOrdinal() / ToLowerOrdinal() メソッドを追加し、ICU ベースの序数小文字変換テーブルを新たに実装します。ASCII文字列がすでに要求されたケースにある場合、同じインスタンスを返すことでアロケーションを回避します。

変更内容

  • 公開API追加 (System.Runtime、System.Memory ref):

    • char.ToUpperOrdinal(char) / char.ToLowerOrdinal(char)
    • Rune.ToUpperOrdinal(Rune) / Rune.ToLowerOrdinal(Rune)
    • string.ToUpperOrdinal() / string.ToLowerOrdinal()
    • MemoryExtensions.ToUpperOrdinal(ReadOnlySpan<char>, Span<char>) / ToLowerOrdinal(ReadOnlySpan<char>, Span<char>)
  • ランタイム/ライブラリ実装:

    • OrdinalCasing.Icu.cs: ICU ベースの序数小文字変換テーブル初期化(ページ単位遅延初期化)を追加
    • String.Manipulation.cs、TextInfo.cs、Ordinal.cs:各型での実装ルーティング
    • ネイティブレイヤー(pal_common.c):GlobalizationNative_InitOrdinalLowerCasingPage による ICU 小文字変換 + 特殊ケース処理(U+0130、U+03F4、U+1E9E、U+2126、U+212A、U+212B は変更なし)
  • テスト: BMP 全体の逆順マッピング検証と OrdinalIgnoreCase 比較との整合性確認を含む OrdinalCasingTests.cs を追加

パフォーマンスへの影響

メモリ効率改善:ASCII 文字列が既に要求されたケースにある場合、string.ToUpperOrdinal() / string.ToLowerOrdinal() は同じインスタンスを返却するため、不要なアロケーションが回避されます。

関連Issue

#90999

その他

  • 序数小文字変換は OrdinalIgnoreCase 比較と整合性を保ちます。二つの文字列が OrdinalIgnoreCase で等しい ⟺ その ToUpperOrdinal() 結果が序数比較で等しい
  • グローバリゼーション モード(Invariant/NLS/ICU)に基づいて実装をルーティング
  • WASM(browser/WASI)対応として callhelpers-pinvoke に新しいネイティブ エクスポート を登録

#130104 Add special casing for string constructors for WebAssembly

概要

WebAssembly向けに、文字列コンストラクタの特殊な呼び出し規約に対応するためのJIT/EEおよびcrossgen2の処理を追加します。文字列コンストラクタは静的ヘルパー関数として実装されており、通常のコンストラクタとは異なる呼び出し規約を持つため、シグネチャの再解釈とサンク生成ロジックの調整が必要です。

変更内容

  • WasmLowering.cs: 文字列コンストラクタのシグネチャを静的メソッド(文字列戻り値)として再解釈するヘルパー GetStringCtorActualSignature を追加
  • codegenwasm.cpp: crossgen2に対して文字列コンストラクタ呼び出し用の調整されたシグネチャを報告するロジックを追加
  • CorInfoImpl.ReadyToRun.cs: マネージドコール署名を記録する際に文字列コンストラクタの特殊ケース検出・書き換えを追加
  • WasmImportThunkPortableEntrypoint.cs: 文字列コンストラクタの内部呼び出しに対してサンクシグネチャ計算に書き換えられたシグネチャを使用
  • vm/wasm/helpers.cpp: 文字列コンストラクタに対して専用のポータブルエントリポイントサンクキー選択ロジックを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はWebAssembly(Wasm)ランタイムのコンパイラ側の内部実装に限定される変更であり、公開APIへの影響はありません。文字列コンストラクタの呼び出し規約処理がJIT・AOT・インタプリタ間で正しく一致するようにするための調整です。


#130093 Handle if_nametoindex failure in EnumerateInterfaceAddresses.

概要

EnumerateInterfaceAddresses関数におけるif_nametoindexの失敗ケースを適切に処理するよう改善しました。ネットワークインターフェース列挙時のエラーハンドリングを強化し、予期しない失敗に対する堅牢性を向上させます。

変更内容

  • pal_interfaceaddresses.c: if_nametoindexの失敗ハンドリングロジックを追加(35行追加)
    • インターフェース名からインデックスへの変換失敗時に適切なエラー処理を実装

パフォーマンスへの影響

影響なし

関連Issue

#49515

その他

  • ネイティブコード(C言語)レベルでのネットワークインターフェース列挙の信頼性向上
  • System.Netのネットワーク関連API(System.Net.NetworkInformationなど)の安定性改善に関連

#130026 [clr-interp] Ensure initialization of MethodDesc->m_interpreterCode

概要

CLR インタプリタにおいて、複数スレッドがメソッド compilation で競合する際の MethodDesc->m_interpreterCode の初期化問題を修正します。競合に負けたスレッドが early return する前に必ずインタプリタコードを publish するよう、コード公開フローを再構成しました。これにより、sporadic assertionsの発生を防止します。

変更内容

  • src/coreclr/vm/prestub.cpp: JitCompileCodeLocked における native code と interpreter code の publish 順序を変更。従来は SetNativeCode で CAS に勝ったスレッドのみが interpreter code を publish していましたが、修正後は全スレッドが SetInterpreterCode を実行してから SetNativeCode の early return 処理に入るよう変更しました(+12/-12)。

パフォーマンスへの影響

影響なし。変更は初期化順序のみで、compilation ロジックや実行パスには影響しません。

関連Issue

#129465

その他

この修正は CLR インタプリタ(clr-interp)における内部実装の変更で、公開 API への影響はありません。マルチスレッド環境での競合状態を解決し、interpreter bytecode の初期化が確実に行われるようにしたものです。


#129887 [LoongArch64] Apply fixes for coreclr-interp on linux-loongarch64.

概要

LoongArch64プラットフォームのcoreclr-interpに対するバグ修正をPR#127919に合わせて適用します。InterpreterTester.shの失敗問題(Issue #127860)をLA64で修正することが目的です。

変更内容

  • src/coreclr/gcinfo/gcinfoencoder.cpp: 20行の削除(不要なコード除去)
  • src/coreclr/vm/exceptionhandling.cpp: 1行の変更(例外処理ロジック調整)
  • src/coreclr/vm/loongarch64/asmhelpers.S: 40行追加、42行削除(LoongArch64アセンブリ実装の修正・調整)

パフォーマンスへの影響

影響なし

関連Issue

#127860

その他

本変更はPR#127919の修正内容をLoongArch64プラットフォームに適用するもので、プラットフォーム固有の対応です。


#129491 Remove unreachable NotImplementedException array-with-choice

概要

XmlSerializer の WriteArray メソッドにおいて、到達不可能な NotImplementedException を削除しました。ローカルで新規構築された memberMapping の ChoiceIdentifier は常に null であるため、この例外スローは実行されないデッドコードでした。配列型の choice 要素の値は、WriteArray 戻り時に呼び出し元の WriteElement で親メンバーに対して記録されるため、リフレクションベースのシリアライザーは既にこれらの型を正しくラウンドトリップしています。

変更内容

  • ReflectionXmlSerializationReader.cs: WriteArray メソッドから到達不可能な NotImplementedException の throw 文を削除(-7行)
  • XmlSerializerTests.RuntimeOnly.cs: [XmlChoiceIdentifier] メンバーを含むリグレッションテストを追加。選択肢の要素型の一つが配列型(その要素マッピングが ArrayMapping)である場合をカバー(+53行)。テストは codegen および ReflectionOnly XmlSerializer テストプロジェクト両方で実行

パフォーマンスへの影響

影響なし

関連Issue

#1400

その他

本 PR は例外が実際には発生不可能であることを確認した上で、回帰テストを追加することで今後の保証を強化する内容です。リフレクションベースのシリアライザーの動作に変化はありません。


#129489 Implement support for XmlAttribute in WriteAttribute method

概要

XML属性のシリアライゼーション処理を改善するPRです。WriteAttributeメソッドでTypeDesc.CanBeAttributeValueが真の場合にXmlAttributeノードの処理に対応しました。これまでNotImplementedExceptionがスローされていた未実装シナリオを解決し、テストを内部テストスイートからメインテストスイートに昇格させました。

変更内容

  • ReflectionXmlSerializationReader.cs: WriteAttributeメソッドを更新。CanBeAttributeValueが真のSpecialMapping型に対して、XmlAttributeインスタンスを受け入れるように実装。NotImplementedExceptionのスローから、属性でない場合の早期リターンに変更。
  • XmlSerializerTests.Internal.cs: Xml_CustomDocumentWithXmlAttributesAsNodesテストを削除(メインテストスイートへ移行)。
  • XmlSerializerTests.cs: 上記テストを追加し、メインテストスイートに昇格。

パフォーマンスへの影響

影響なし

関連Issue

#1398

その他

この変更はリフレクションベースのXmlSerializerリーダーの公開APIとは直接関係なく、内部実装の拡張です。


#128950 Arm64: [PAC-RET] NativeAOT changes

概要

ARM64アーキテクチャにおけるPointer Authentication Code (PAC-RET)機能をNativeAOTに組み込む変更です。これにより、NativeAOTコンパイルされたアプリケーションでも戻りアドレスの認証を通じたセキュリティ強化が可能になります。この変更は#125436、#127949、#127838、#128147に続く一連の作業の最終段階です。

変更内容

  • NativeAOT Runtime: StackFrameIterator、thread管理、ExceptionHandlingで戻りアドレス認証に対応
  • ARM64アセンブリ: GcProbe、MiscStubsなどで認証命令対応コードを追加
  • ネイティブコード管理: UnixNativeCodeManager、CoffNativeCodeManagerで認証関連情報の解析処理を実装
  • DWARF・EABI・Mach-O: オブジェクトライターで認証情報(CFI)を生成・出力
  • JIT・Unwinder: 認証スタック情報の処理をコンパイル時・実行時に対応

パフォーマンスへの影響

影響なし(セキュリティ機能の導入による実行時オーバーヘッドについては提供情報に記載なし)

関連Issue

#125436、#127949、#127838、#128147

その他

PAC(Pointer Authentication Code)はARM64プロセッサのセキュリティ機能で、戻りアドレスを暗号的に認証することでReturn-Oriented Programming (ROP)攻撃を防止します。詳細はllsoftsec.github.ioを参照してください。


#128777 [Android] Add missing JNI exception checks in crypto PAL

概要

Android暗号化PAL(Platform Abstraction Layer)における包括的なJNI例外チェック追加を実施。JNI呼び出し後の潜在的な例外をキャッチし、管理コードへの無言の例外漏洩を防止します。ON_EXCEPTION_PRINT_AND_GOTOマクロによる統一的な例外処理、INIT_LOCALS/RELEASE_LOCALSパターンによるローカル参照の厳密な管理、および成功パスでのみ呼び出し側が見える状態を書き込むパターンを導入。

変更内容

11ファイルに対する共通パターン導入:

  • pal_cipher.c、pal_dsa.c、pal_ecc_import_export.c、pal_ecdh.c、pal_eckey.c、pal_hmac.c、pal_ssl.c、pal_sslstream.c、pal_x509.c、pal_x509store.cにON_EXCEPTION_PRINT_AND_GOTOマクロを追加
  • INIT_LOCALS/RELEASE_LOCALSによる統一的なクリーンアップパターンを導入し、アドホックな参照削除を廃止

主要な仕様変更:

  • GetEnumAsInt(pal_jni.c):呼び出し側が参照を所有・解放する責任に変更。5つの呼び出し元で重複削除のリスクを排除
  • AndroidCryptoNative_GetDsaParameters/AndroidCryptoNative_GetECKeyParameters:出力長パラメータを関数開始時にゼロクリア(成功時のみ設定)
  • ContainsEntryForAlias/ContainsMatchingCertificateForAlias:戻り値をboolからint32_t(SUCCESS/FAIL)に変更、別の出力パラメータで結果を返却。JNI例外と「検出されない」を区別可能に
  • SSLStreamInitialize:マネージドコンテキストハンドル/コールバックを成功パスでのみ割り当て
  • FreeSSLStream:managedContextCleanupのNULLチェック追加。初期化されない状態に対応
  • SSLStreamWrite:EnsureRemainingの戻りバッファをローカルに保存し、NULL時に失敗(SSLStreamStatus_Errorを返す)。グローバル参照漏洩とNULLオブジェクトJNI呼び出しを防止

パフォーマンスへの影響

影響なし。本変更は例外安全性とリソースリーク防止に重点。テスト実績:System.Security.Cryptography.Tests 11,715回実行(10,738合格、0失敗)、System.Net.Security.Tests 4,890回実行(4,854合格、4失敗は既知の非関連テスト)。

関連Issue

#128747(同一テーマのpal_rsa.c向けJNI例外処理) #128651(pal_x509chain.cのX509ChainContext作成失敗対応) #124173(pal_sslstream.cのプラットフォーム信頼


#128506 Fix DataContractSerializer nullable struct initialization cache lookup

  • 作成者: @Copilot
  • 作成日時: 2026年05月22日 22:40:52(UTC)
  • マージ日時: 2026年07月09日 01:34:53(UTC)
  • ラベル: area-Serialization

概要

.NET 8+ で DataContractSerializer が Nullable<T> の [DataContract] 構造体を逆シリアル化する際にキャッシュルックアップループのバグにより SerializationException(DataContract cache overflow)が発生する回帰を修正しました。キャッシュスキャンループが元の計算済みIDと比較していたため、有効なコントラクトが見つからずエラーが発生していました。

修正内容:

// 修正前:同じidと繰り返し比較
for (int i = 0; i < currentDataContractId; i++)
{
    if (ContractMatches(classContract, s_dataContractCache.GetItem(id)))  // idを繰り返し使用
    {
        return i;
    }
}

// 修正後:ループインデックスiで正しくスキャン
for (int i = 0; i < currentDataContractId; i++)
{
    if (ContractMatches(classContract, s_dataContractCache.GetItem(i)))  // iを使用
    {
        return i;
    }
}

変更内容

  • System.Private.DataContractSerialization: DataContract.GetIdForInitialization(ClassDataContract) でキャッシュスキャンループをループ変数 i でインデックスするよう修正
  • System.Runtime.Serialization.Xml テスト: DCS_NullableDataContractStructAsRoot_DeserializesWithoutPriorInitialization という回帰テストを追加。事前のキャッシュ初期化がない状態で nullable root [DataContract] 構造体を ReadObject で逆シリアル化するテスト

パフォーマンスへの影響

影響なし。バグ修正であり、パフォーマンスに関連する変更ではありません。

関連Issue

#126873

その他

なし


#122093 Add Zip Archives password support

概要

ZipArchive APIにパスワード保護されたZipファイルの読み書き機能を追加します。ZipCryptoとWinZip AES暗号化方式の両方に対応し、既存のエントリの読み取り、新規エントリの作成、更新モードでの操作をサポートします。

変更内容

  • ZipArchive/ZipArchiveEntry クラス: パスワードパラメータを受け取るメソッドを追加(Open(string, Encoding password)など)
  • 新規暗号化クラス: WinZipAesStream.cs(674行)、WinZipAesKeyMaterial.cs(99行)を追加し、AES暗号化の実装を提供
  • ZipFile/ZipFileExtensions API: ZipFileCreationOptions、ZipExtractionOptionsを新規追加し、暗号化オプションをサポート
  • 非同期サポート: Create.Async.cs、Extract.Async.cs、ZipArchiveEntry.Async.csを拡張してパスワード対応の非同期メソッドを追加
  • テスト: ZipFile.Encryption.cs(1607行)に包括的な暗号化テストを追加
  • ファジング: WinZip AES、ZipCrypto対応のファジングテスト用クラスを追加

パフォーマンスへの影響

影響なし(提供情報に具体的なベンチマーク結果なし)

関連Issue

#1545

その他

  • 互換性: 新規オーバーロードの追加のため、既存のAPIに破壊的変更はなし
  • セキュリティ: 暗号化キー導出とストリーム処理に関して複数のセキュリティレビューを経ている
  • 留意点: Copilotのレビュー指摘により、更新モード(loadExistingContent: false)で暗号化されたエントリを開く際に、キーマテリアルの派生と検証が必要な箇所が指摘されている。パスワード要件の厳密な検証が推奨されます。

目次