Pull Request on 2026年06月24日

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

注意点

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


目次

  1. #129826 [cDAC] Register a ManagedTypeSource contract for NativeAOT
  2. #129804 [release/10.0] Narrow Mono AOT typeload error cleanup
  3. #129803 Avoid bounds checks in JsonWriterHelper.EscapeNextBytes/Chars
  4. #129788 Fix IsKnownNonNull assert for SIMD base addresses
  5. #129783 Ship stripped cdac AOT binary and its symbols in the transport package
  6. #129777 Remove dead fIs80Plus parameter from IMDInternalImport::GetUserString
  7. #129770 Implement KeySizeInBytes on AesGcm and AesCcm.
  8. #129765 Obsolete AsnEncodedData.RawData.set
  9. #129763 Use volatile access for CoreCLR dictionary layout publication
  10. #129755 Consolidate STJ polymorphism tests into a shared abstract suite
  11. #129749 Fix alignment of 8-byte thread statics on direct TLS path
  12. #129748 Narrow Mono AOT typeload error cleanup
  13. #129742 Fix comparison-with-wider-type CodeQL issue
  14. #129729 Fix building unboxing and real generic method targets at the same time
  15. #129726 [main] Source code updates from dotnet/dotnet
  16. #129716 JIT/wasm: more EH related fixes
  17. #129715 [mono] Defer NEWOBJ type-load failures to runtime in AOT mode
  18. #129713 [mono] Keep in-flight exception alive across LLVM resume unwind
  19. #129710 [mono] AOT-compile marshalling wrappers for layout classes with class-typed fields
  20. #129708 [mono] AOT-compile methods that use the IL jmp opcode
  21. #129701 Use SearchValues in Utf8JsonReader.SkipWhiteSpace
  22. #129661 Fix RemoveImpl nullability
  23. #129621 Enable runtime tests on OpenBSD
  24. #129620 [release/9.0-staging] Update dependencies from dotnet/source-build-assets
  25. #129517 arm64: Add float/double cast optimisation tests
  26. #129498 Fix browser wasm merged test reference discovery
  27. #129484 [cDAC] Implement DacDbi API GetMetaDataFileInfoFromPEFile
  28. #129483 [release/10.0] Source code updates from dotnet/dotnet
  29. #129470 Port System.Diagnostics.Process to OpenBSD
  30. #129453 [release/9.0-staging] Update dependencies from dotnet/cecil
  31. #129408 [release/10.0] Update dependencies from dotnet/xharness
  32. #129334 [wasm][coreclr] Re-enable System.Formats.Nrbf tests
  33. #129279 Add OpenBSD support in System.Net.NetworkInformation
  34. #129043 Async profiler: V1 (TaskAsync) instrumentation + tests.
  35. #129035 [release/10.0] Reduce contention in UnwindInfoTable seen during high volume LCG method creation
  36. #128984 [release/10.0] [Android] Handle X509ChainContext creation failures
  37. #128921 [cDAC] Add GetApproxTypeHandle DacDbi API
  38. #128768 DI: avoid duplicate disposal for shared singleton instances
  39. #128306 Add MemoryExtensions.Min/Max
  40. #128252 Re-enable Microsoft.Extensions.Hosting shutdown functional coverage in CI and harden shutdown startup/Helix/NET481 compatibility
  41. #126669 Add Stream wrappers for memory and text-based types
  42. #110721 Expression.Compile: empty the evaluation stack before evaluating second expression in OrElse and AndAlso

#129826 [cDAC] Register a ManagedTypeSource contract for NativeAOT

概要

NativeAOT ランタイムの cDAC (Compact Diagnostics and Analysis Contract) データディスクリプタに ManagedTypeSource コントラクトを登録します。これにより、診断ツールが NativeAOT 実行時にこのコントラクトをディスカバリーできるようになります。

変更内容

  • src/coreclr/nativeaot/Runtime/datadescriptor/datadescriptor.inc: ManagedTypeSource コントラクトを NativeAOT コントラクト一覧に追加(内部実装の変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • この変更は NativeAOT ランタイムの診断機能を拡張するもので、公開 API には影響しません
  • cDAC コントラクトの登録は、外部の診断ツールが NativeAOT 実行時の型情報にアクセスする際に必要な契約仕様です

#129804 [release/10.0] Narrow Mono AOT typeload error cleanup

概要

Mono AOT コンパイラにおけるタイプロード エラー ハンドリングの修正です。.NET 9 で導入された回帰により、特定の条件下で inline_method() でアサーション エラーが発生し、AOT コンパイルが失敗していた問題を修正しています。修正により、欠落したフィールド参照のエラーが正しく処理され、アプリケーションがコンパイル可能になります(エラーは実行時に報告されます)。

変更内容

  • src/mono/mono/mini/method-to-ir.c: タイプロード失敗時のエラー ハンドリング ロジックを改善。欠落したフィールド参照に対する処理が追加され、不正なアサーション エラーを防止
  • src/mono/mono/mini/iltests.il: missing_field_then_inline という回帰テストを追加。欠落したフィールド参照とインライン化の組み合わせをテストするケース

パフォーマンスへの影響

影響なし

関連Issue

#129613(この修正で解決) #91261(回帰を導入したPR)

その他

  • これは .NET 8 から .NET 9 への回帰修正です
  • リスク レベル:低
  • iOS シミュレータでの AOT コンパイル検証済み
  • 顧客報告問題であり、iOS アプリの発行をブロックしていました

#129803 Avoid bounds checks in JsonWriterHelper.EscapeNextBytes/Chars

概要

System.Text.JsonのUTF-8文字列エスケープパスの最適化。JsonWriterHelper.EscapeNextBytesメソッドをリファクタリングして、JITコンパイラが境界チェック(bounds check)を排除できるように構造を改善し、生成コードのサイズ削減とパフォーマンス向上を実現します。

変更内容

  • src/libraries/System.Text.Json/src/System/Text/Json/Writer/JsonWriterHelper.Escaping.cs
    • EscapeNextBytesメソッドをリファクタリング
    • ローカル変数writtenカウンターを導入し、メソッド終了時に呼び出し元のtotalWrittenを更新
    • Spanのスライシングステップを追加して、後続のインデックスアクセスが範囲内であることをJITに証明できるように最適化

パフォーマンスへの影響

JITが不要な境界チェックを排除することで、以下が期待されます:

  • 生成コードサイズの削減
  • UTF-8エスケープパスの実行速度向上

詳細なコード生成の差分は関連Issue内のコメントで確認可能です。

関連Issue

#129803

その他

  • 変更はSystem.Text.Jsonライブラリの内部実装(エスケープ処理)に限定
  • 公開APIへの影響なし
  • コード生成差分の詳細:https://github.com/MihuBot/runtime-utils/issues/2044#issuecomment-4790755785

#129788 Fix IsKnownNonNull assert for SIMD base addresses

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

概要

JITのバリューナンバリングにおいて、ValueNumStore::IsKnownNonNullがSIMD基底アドレス(SVE gather/scatterなどの暗黙的な間接参照で生成される)を処理する際のアサーション失敗を修正します。ポインタ型以外のバリューナンバー(VN)に対してはアサーションの代わりに保守的にfalseを返すように変更し、チェックビルドでのアサーション例外を回避しながら既存の動作を保持します。

変更内容

  • src/coreclr/jit/valuenum.cpp: IsKnownNonNullメソッドのポインタ型チェックアサーションを、非ポインタ型VNに対する早期リターンガード(保守的にfalseを返す)に置き換え。SIMD基底アドレスVNが保守的に処理される理由を説明するコメントを追加。

パフォーマンスへの影響

影響なし

関連Issue

#129738

その他

本修正は#129447で追加されたアサーションを調整するもので、fgValueNumberIndirNullCheckExceptionsなどの関数がSIMD基底アドレスを引数として呼び出される場合に発生していたアサーション失敗を解決します。


#129783 Ship stripped cdac AOT binary and its symbols in the transport package

概要

Microsoft.DotNet.Cdac.Transport パッケージに含まれる mscordaccore_universal(cdac AOT)バイナリについて、Linux/macOS で未ストリップ状態で配布され、デバッグシンボルがシンボルパッケージに含まれていなかった問題を修正します。NativeAOT publish ディレクトリではなく CoreCLR artifacts ディレクトリ(ストリップ済みバイナリとシンボルファイルが配置されている)を参照し、既存のパッケージングインフラストラクチャによるシンボルファイルの自動検出と配布を可能にします。

変更内容

  • Microsoft.DotNet.Cdac.Transport.pkgproj: パッケージ入力ソースを $(DotNetCdacBinDir)(NativeAOT publish ディレクトリ)から $(CoreCLRArtifactsPath)(CoreCLR artifacts ディレクトリ)に変更
  • <File> エントリを <NativeBinary> item に切り替えることで、既存の GetSymbolPackageFiles ターゲットが隣接する .so.dbg/.dylib.dwarf/.pdb シンボルファイルを自動検出し、シンボルパッケージに含めるようにしました
  • strip ロジック自体は runtime-component build で既に実装されているため、そちらの出力を消費する方式に変更

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • この PR は GitHub Copilot のアシスタンスを受けて作成されました
  • 変更は意図的に最小限(surgical)に設計されており、macOS の codesign ステップを含むカスタム cmake マッチングの strip ロジックはそのまま保持されます
  • 低信度のコメントとして、<File> item グループを $(PackageTargetRuntime) 設定時のみに条件付けすべき可能性が指摘されていますが、この PR には含まれていません

#129777 Remove dead fIs80Plus parameter from IMDInternalImport::GetUserString

  • 作成者: @Copilot
  • 作成日時: 2026年06月23日 22:42:54(UTC)
  • マージ日時: 2026年06月24日 17:02:32(UTC)
  • ラベル: area-VM-coreclr

概要

IMDInternalImport::GetUserString インターフェースから未使用の出力パラメータ fIs80Plus/pbIs80Plus を削除するクリーンアップです。すべてのコールサイトが NULL を渡すか値を無視していたため、インターフェース定義と実装(MDInternalRO、MDInternalRW)、および全コールサイトから削除しました。

変更内容

  • src/coreclr/inc/metadata.h — IMDInternalImport::GetUserString 純粋仮想メソッドから BOOL *pbIs80Plus パラメータを削除
  • src/coreclr/md/runtime/mdinternalro.h / mdinternalro.cpp — パラメータと関連するnullチェック/代入ロジックを削除
  • src/coreclr/md/inc/mdinternalrw.h / enc/mdinternalrw.cpp — 同様にパラメータと関連ロジックを削除
  • src/coreclr/vm/ceeload.cpp — BOOL fIs80Plus ローカル変数を削除、コール元から引数を削除
  • src/coreclr/vm/managedmdimport.cpp — BOOL bHasExtendedChars ローカル変数を削除、コール元から引数を削除
  • src/coreclr/vm/jitinterface.cpp、ildasm/dis.cpp、vm/readytorunstandalonemethodmetadata.cpp — コール時の NULL 引数を削除

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

これは内部メタデータインターフェースの改善で、公開APIには影響しません。デッドコード削除による保守性の向上が目的です。


#129770 Implement KeySizeInBytes on AesGcm and AesCcm.

  • 作成者: @Copilot
  • 作成日時: 2026年06月23日 21:21:45(UTC)
  • マージ日時: 2026年06月24日 03:17:12(UTC)
  • ラベル: area-System.Security

概要

AesGcmとAesCcmクラスに新しい公開プロパティKeySizeInBytesを追加し、インスタンス構築時に使用されたキーの長さをクエリできるようにします。このプロパティは128/192/256ビットのキーをサポートします。

変更内容

  • AesGcm.cs: KeySizeInBytesプロパティを追加し、非推奨コンストラクタを含むすべてのコンストラクタで初期化
  • AesCcm.cs: KeySizeInBytesプロパティを追加し、両方のコンストラクタで初期化
  • ref/System.Security.Cryptography.cs: AesGcmとAesCcmの公開APIコントラクトにKeySizeInBytesを追加
  • テスト(AesGcmTests.cs, AesCcmTests.cs): KeySizeInBytesが提供されたキー長と一致することを検証するカバレッジを追加

パフォーマンスへの影響

影響なし

関連Issue

#72191

その他

なし


#129765 Obsolete AsnEncodedData.RawData.set

概要

AsnEncodedData.RawDataプロパティのセッターを非推奨化(SYSLIB0065)し、暗号化APIにおけるデータ変更の不安全な方法を廃止します。リポジトリ内の呼び出し箇所を安全な構築方法(CopyFromなど)に更新しています。

変更内容

  • AsnEncodedData.cs: RawData.setに[Obsolete(..., DiagnosticId="SYSLIB0065")]を追加。内部的には直接_rawDataをアサインして廃止予定のセッターを回避
  • Pkcs9LocalKeyId.cs: コンストラクタをリファクタリング。RawDataセッターではなく基底クラスのコンストラクタ経由でエンコードデータを初期化
  • PkcsHelpers.cs: RawDataセッター使用をCopyFromベースの構築方法に置き換え
  • HostnameMatchTests.Unix.cs: RawDataセッター経由での拡張変更を廃止。修正されたバイト列で新しいX509Extensionを再構築
  • ref/System.Security.Cryptography.cs: 公開契約を更新し、RawData.setをSYSLIB0065としてマーク
  • Obsoletions.cs: SYSLIB0065の診断ID定数とメッセージを追加
  • list-of-diagnostics.md: 非推奨API警告テーブルにSYSLIB0065を記載

パフォーマンスへの影響

影響なし

関連Issue

#129544

その他

この変更は破壊的変更です。AsnEncodedData.RawDataセッターの使用は将来のバージョンで削除される予定です。.NET開発者は現在のコード内でRawDataセッターの使用を避け、代わりにCopyFromメソッドまたは新しいインスタンスの構築を使用する必要があります。


#129763 Use volatile access for CoreCLR dictionary layout publication

  • 作成者: @Copilot
  • 作成日時: 2026年06月23日 18:36:58(UTC)
  • マージ日時: 2026年06月24日 14:33:03(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLRのジェネリック辞書/メソッド解決における稀なクラッシュを修正するため、辞書レイアウトポインタの公開と読み取りに対してVolatile意味論を適用しました。競合する複数スレッドによるレイアウトポインタのアクセスレースを排除し、Release/Acquire セマンティクスで一貫性を確保します。

// 公開時:VolatileStore を使用
VolatileStore(&pIMD->m_pDictLayout, pNewLayout);

// 読み取り時:VolatileLoad を使用
return HasOptionalFields() ? VolatileLoad(&GetOptionalFields()->m_pDictLayout) : NULL;

変更内容

  • src/coreclr/vm/class.h: EEClass::SetDictionaryLayout と EEClass::GetDictionaryLayout を VolatileStore/VolatileLoad に変更(計4行修正)
  • src/coreclr/vm/method.hpp: InstantiatedMethodDesc::IMD_SetDictionaryLayout、InstantiatedMethodDesc::IMD_GetDictionaryLayout、InstantiatedMethodDesc::GetDictLayoutRaw を VolatileStore/VolatileLoad に変更(計10行修正)
  • 変更範囲は辞書レイアウトポインタのアクセッサのみで、他の動作に影響なし

パフォーマンスへの影響

Volatile アクセスはメモリバリア命令を伴うため、わずかなオーバーヘッドが発生する可能性があります。ただし、このパスは辞書レイアウト確立時の限定的なシナリオであり、ホットパスではないため実質的なパフォーマンス低下は最小限と考えられます。

関連Issue

#129763

その他

  • 変更は内部実装(CoreCLRランタイム)の範囲で、公開APIへの影響なし
  • マルチスレッド安全性向上による安定性改善が主目的
  • 修正はランタイムのジェネリック型/メソッドインスタンス化のメカニズムに関わる重要な部分

#129755 Consolidate STJ polymorphism tests into a shared abstract suite

概要

System.Text.Json のポリモーフィズムテストをテスト共有スイートに統合するテストのみのリファクタリングです。反射ベース(11ラッパー)とソースジェネレーション(4ラッパー)の両方で同じテストシナリオを実行できるよう、テストを tests/Common/ に移動し、SerializerWrapper パターン経由で実行されます。

変更内容

  • 共有テストスイート化: PolymorphicTests.CustomTypeHierarchies.cs と PolymorphicTests.TypeClassifier.cs を tests/Common/ に移動し、両方のテストプロジェクトで実行可能に
  • 反射テスト: System.Text.Json.Tests/Serialization/PolymorphicTests.cs を共有スイートを実行するラッパー派生クラスのみに削減
  • ソースジェネレーションテスト: 重複する PolymorphismTests.cs を削除し、新規 Serialization/PolymorphicTests.cs でソースジェン固有のコンテキストをワイヤリング
  • プロジェクトファイル: .csproj と .targets ファイルを更新して共有テストファイルをリンク
  • モデルアクセシビリティ: tests/Common/SerializerTests.cs の GenericPoco<T> を internal に変更して再利用性向上
  • ソースジェン対応: 反射専用シナリオにはガード条件を追加

パフォーマンスへの影響

影響なし

関連Issue

#129041

その他

レビュー指摘: Copilot により、SerializerTests.cs の JsonNode ブランチにおいて例外検証前に GetTypeInfo() や JsonValue.Create() が実行される潜在的な問題が指摘されています。期待される例外発生時にこれらの構築がテストヘルパー内で予期しない例外をスローする可能性があり、例外検証が機能しない懸念があります。


#129749 Fix alignment of 8-byte thread statics on direct TLS path

  • 作成者: @EgorBo
  • 作成日時: 2026年06月23日 13:44:05(UTC)
  • マージ日時: 2026年06月24日 01:27:58(UTC)
  • ラベル: area-System.Threading

概要

CoreCLRのスレッドスタティクス TLSインデックス割り当てロジックにおける、8バイトのスレッドスタティク(long/double)がミスアライン(4バイト境界に配置)され、arm64プラットフォームでInterlocked.Increment実行時にSystem.DataMisalignedExceptionをスローする不具合を修正します。

根本原因はGetTLSIndexForThreadStatic内のアライメント選択ロジックで、bytesNeeded >= 8の判定後にelseキーワードが欠けており、その直後のbytesNeeded >= 4判定により8バイトアライメントが4バイトに上書きされていました。

変更内容

  • src/coreclr/vm/threadstatics.cpp: アライメント選択ロジックにelseキーワードを追加し、8バイトフィールドのアライメントが8バイトで保持されるようにしました(else ifチェーンの確立)

パフォーマンスへの影響

影響なし。この修正は正確性の問題であり、パフォーマンス改善・劣化の対象外です。

関連Issue

#129733

その他

  • プラットフォーム特異性: x64ではミスアライン操作を容認するため症状が出ませんが、arm64のldaxr/stlxr命令はミスアライン時にフォルトします
  • 再現条件: レイアウト依存で、既に割り当てられたスレッドスタティクスの量によって intermittent になります。実際のアプリケーション(ASP.NET/Kestrel等)では他のスレッドスタティクスが先に登録されるため発現しやすくなります
  • テスト: 作成者は開発環境が linux-x64 のため直接テストできませんでしたが、修正は1行の論理的な変更であり、ソースコード検査で検証済みです

#129748 Narrow Mono AOT typeload error cleanup

概要

Mono AOT コンパイラにおいて、フィールド解決失敗時に発生する型ロードエラーを適切に処理するよう修正しました。メタデータエラー(MissingField/BadImage)を正しく消費し、ランタイム例外スロー IR へ適切に変換することで、インライン展開処理での予期しないアサーション失敗を防ぎます。

変更内容

  • src/mono/mono/mini/method-to-ir.c: フィールド解決失敗後のメタデータエラーハンドリングを改善(8行追加、3行削除)
  • src/mono/mono/mini/iltests.il: ジェネリック型でのフィールド欠落後に続くインライン展開が同じメソッド内で行われるケースを検証する回帰テストを追加(50行追加)

パフォーマンスへの影響

影響なし

関連Issue

#129613

その他

本修正は Mono AOT コンパイラ内部の実装変更です。手動検証では、サンプルコード・縮小再現例に対して AOT コンパイラが inline_method() でのアサーション失敗を回避できることを確認済みです。回帰テストは CI インフラの複雑さのため、ローカルでの手動検証を通じて検証されています。


#129742 Fix comparison-with-wider-type CodeQL issue

  • 作成者: @janvorli
  • 作成日時: 2026年06月23日 12:45:25(UTC)
  • マージ日時: 2026年06月24日 11:48:32(UTC)
  • ラベル: area-GC-coreclr

概要

CodeQLが指摘した異なる幅の型同士の比較に関する警告を修正するため、GCのheap_select::initメソッドのヒープ列挙ループを更新しました。heap_numループ変数の型をuint16_tからintに変更し、GCToOSInterface::GetProcessorForHeap(...)呼び出し時に明示的なキャストを追加することで、混合幅の比較を回避します。

変更内容

  • src/coreclr/gc/gcinternal.h
    • heap_select::initメソッドのヒープ列挙ループで、heap_numループ変数の型をuint16_tからintに変更
    • GCToOSInterface::GetProcessorForHeap(...)へのheap_num引数渡時に、uint16_tへの明示的なキャストを追加

パフォーマンスへの影響

影響なし

関連Issue

#129742

その他

CodeQL静的解析ツールによる警告対応です。既存のヒープからプロセッサ/NUMA割り当て動作は変わりません。


#129729 Fix building unboxing and real generic method targets at the same time

概要

NativeAOT実行時型ローダーにおいて、単一の型ロード時にunboxingとnon-unboxingのエントリポイントが同時に必要とされる場合に、同じジェネリック辞書が二重に構築されて登録に失敗する問題を修正します。修正では、型ローダーが作業を二重に実行することを許可しつつ、辞書割り当てのポイントで停止することで、重複登録を回避します。

変更内容

  • src/coreclr/nativeaot/System.Private.TypeLoader/src/Internal/Runtime/TypeLoader/TypeBuilder.cs
    • unboxingおよびnon-unboxingバリアントが同じランタイムメソッド辞書を共有する場合、動的ジェネリックメソッド登録時にフィルタリングを追加
    • 辞書割り当て順序を変更:non-unboxingメソッド辞書を先に割り当て、その後unboxingメソッドを既存辞書に関連付けるか必要な場合のみ新規割り当て
    • 既に割り当てられたnon-unboxing辞書に関連付けられたunboxingメソッドの辞書完成をスキップ

パフォーマンスへの影響

影響なし

関連Issue

#129696

その他

  • NativeAOT型ローダーがunboxing MethodDescsを保有することは本来設計ミスであり、この修正は根本的な再設計ではなく外科的な修正として位置づけられています
  • 既存の辞書検索はすべてunboxingビットを無視しているため、両エントリポイントが同時に不要な場合は問題が発生しません
  • リグレッションテストは#128702に含まれるため、このPRには追加されていません

#129726 [main] Source code updates from dotnet/dotnet

概要

dotnet/dotnetリポジトリからの定期的なコードフロー更新です。主にビルド日時2026年6月23日の依存関係更新を含みます。直接的なランタイム実装変更は含まれていません。

変更内容

  • eng/Version.Details.props (+39/-39): バージョン詳細の更新
  • eng/Version.Details.xml (+79/-79): XML形式のバージョン詳細の更新
  • global.json (+4/-4): グローバルビルド設定の更新

更新された依存関係:

  • Microsoft.CodeAnalysis関連 (5.9.0-1.26319.105 → 5.9.0-1.26322.110)
  • Microsoft.DotNet.Arcade.Sdk、Build.Tasks、GenAPI等の.NETツール類 (11.0.0-beta.26319.105 → 11.0.0-beta.26322.110)
  • System.Reflection.Metadata、System.Text.Json等のランタイムライブラリ (11.0.0-preview.6.26319.105 → 11.0.0-preview.6.26322.110)
  • NuGet.Frameworks、NuGet.Packaging等 (7.9.0-rc.32005 → 7.9.0-rc.32310)
  • System.CommandLine (3.0.0-preview.6.26319.105 → 3.0.0-preview.6.26322.110)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本PR は Maestro による自動コードフロー更新です。dotnet/dotnet、dotnet/roslyn、dotnet/diagnostics、dotnet/msbuild、NuGet、dotnet/fsharp を含む複数のソースリポジトリからの変更を統合しています。


#129716 JIT/wasm: more EH related fixes

概要

WebAssembly JITコンパイラの例外処理(EH)関連の検証エラーを修正します。主な変更は、try ブロック内の到達不可能なブロックが DFS ブロックレイアウト処理で発見されるようにし、EH の連続性を保つことです。

変更内容

  • fgwasm.cpp/fgwasm.h: FgWasm::VisitWasmSuccs を拡張し、try 入口の後継者として try 内の到達不可能なブロックを列挙。例外ヘルパーと異なる EH 領域のブロックをフィルタリング
  • codegenwasm.cpp: 戻り値を持つメソッドが返らないケースで unreachable を適切に出力。落下がなく型ミスマッチの可能性がある他の場所でも unreachable を生成。exnref ラッパーブロックの深さを動的に計算。try から callfinally への遷移時に VIP(Volatile-Instruction Placeholder)を生成
  • codegenlinear.cpp: ブロックレイアウト調整に関連する変更(+28/-9)
  • compiler.h/codegen.h: EH 処理の補助関数・フラグを追加

パフォーマンスへの影響

影響なし

関連Issue

#129743

その他

WebAssembly ターゲット向けの JIT コンパイラ内部機構の修正です。これは Pri1 検証エラーの修正を目的としており、ユーザー向けの API や言語機能の変更ではありません。


#129715 [mono] Defer NEWOBJ type-load failures to runtime in AOT mode

概要

Mono AOTコンパイラでnewobj命令の型ロード失敗時の動作を改善しました。従来は型ロード例外が発生するコンストラクタを呼び出すメソッドをコンパイル対象から除外していましたが、フルAOT環境ではExecutionEngineExceptionが発生していました。本修正により、JITと同様に実行時にTypeLoadExceptionをスロー する動作に統一しました。

変更内容

  • src/mono/mono/mini/method-to-ir.c

    • MONO_CEE_NEWOBJ処理で、AOTモード時のコンストラクタ解決失敗時に、既存のldfld/ldsfldパスと同様にmethod_make_alwaysthrow_typeloadfailureを使用してメソッドを常にTypeLoadExceptionをスロー する動作に変更(内部実装の変更)
    • メソッドのコンパイル除外ではなく、実行時に型ロード例外をスロー するため、メソッドはAOTイメージに含まれるようになります
  • src/tests/Loader/classloader/MethodImpl/CovariantReturns/UnitTest/UnitTest_GVM_TypeLoadException.il

    • Mono固有のActiveIssueアノテーションを削除し、MonoでもテストをAOT環境で実行するように変更

パフォーマンスへの影響

影響なし。本変更は型ロード失敗パスのみに限定される特殊ケースであり、正常なnewobjコンパイルパスは変更されていません。

関連Issue

その他

  • フルAOT(aot-onlyモード)でのみ影響する変更です。JITモードおよびJITフォールバック時の動作は変更されていません
  • 検証済み:x64 Mono LLVM フルAOT ビルドで、無効な型の4つのテストメソッドが正しくTypeLoadExceptionをスロー し、テストが合格(終了コード100)することを確認
  • GitHub Copilotの支援を受けて実装されました

#129713 [mono] Keep in-flight exception alive across LLVM resume unwind

概要

Mono LLVM full-AOT環境で、例外がLLVM生成のfinally/faultハンドラを通じてアンワインドされる際、メモリ移動を伴うGC実行によって例外オブジェクトがダングリングポインタになる問題を修正します。例外を生ポインタではなくピン留めGCハンドル経由で保持することで、GCが発生しても例外オブジェクトへの参照が有効に保たれます。

修正前はMonitor.Exitなど管理コード内のGCセーフポイントで例外オブジェクトがリロケートされ、アンワインド再開時に無効なポインタをデリファレンスしてSIGSEGVが発生。修正後は0/300テスト実行で再現なし(修正前は17%の確率で発生)。

変更内容

  • src/mono/mono/mini/mini-runtime.h: ResumeStateから生ポインタex_objフィールドを削除、GCハンドルベースの保持に統一
  • src/mono/mono/mini/mini-exceptions.c: mono_handle_exception_internalでLLVM例外アンワインド時にGCハンドルを確保・解放、mono_resume_unwindでハンドルから例外を復元してアンワインド継続
  • src/tests/JIT/Regression/CLR-x86-JIT/V1.1-M1-Beta1/b143840/b143840.il: 修正完了によりMono上でのテストスキップアノテーション削除
  • 複数のoffsetファイル: Monoランタイムの構造体オフセット更新(ResumeState変更に伴う再計算)
  • eng/pipelines/runtime-llvm.yml: CI設定追加

パフォーマンスへの影響

影響なし。GCハンドル管理は既存のllvmonlyキャッチパスで同じ手法を採用済みのため、新規オーバーヘッドなし。むしろGC互換性強化による安定性向上。

関連Issue

#129508、#129396

その他

  • この修正は Emscripten 5.0.6 / LLVM 23のバンプと同時に検証
  • 問題は LLVM full-AOT環境に限定(JIT・llvmonlyキャッチパスは影響なし)
  • マルチスレッド負荷下の例外スロー/キャッチとメモリ割り当てで間欠的に再現

#129710 [mono] AOT-compile marshalling wrappers for layout classes with class-typed fields

概要

Mono AOTコンパイラが、クラス型フィールドを持つレイアウト付きクラスのマーシャリングラッパー(StructureToPtr/PtrToStructure)をAOTイメージに含めるよう修正しました。これまでは、ネストされたレイアウト付きクラスを含むクラスがJIT時のみ動作し、全AOTモード実行時にはExecutionEngineExceptionで失敗していました。

[StructLayout(LayoutKind.Sequential)]
class POINT { public int x, y; }

[StructLayout(LayoutKind.Sequential)]
class MINMAXINFO { public POINT ptMinTrackSize, ptMaxTrackSize; }
// 全AOTモード下では修正前はランタイムエラー、修正後は正常動作

変更内容

  • src/mono/mono/mini/aot-compiler.c: can_marshal_struct()ヘルパー関数にMONO_TYPE_CLASSケースを追加。MONO_TYPE_VALUETYPEと同様に、クラス型フィールドに対して再帰的にcan_marshal_struct()を呼び出し、ネストされたレイアウト付きクラスがマーシャル可能かを判定できるようにしました。mono_class_is_auto_layout()チェックにより非レイアウトクラス(objectなど)は引き続き非マーシャル可能として処理されます。
  • src/tests/JIT/Regression/JitBlue/WPF_3226/CSharpRepro/WPF_3226.cs: Mono固有の[ActiveIssue]アノテーションを削除し、回帰テストWPF_3226を再有効化しました。

パフォーマンスへの影響

影響なし

関連Issue

#129508、#129396

その他

LLVM 23への対応に関連する修正です。修正後、MINMAXINFO/POINTのマーシャリングラッパーがAOTイメージに含まれるようになり、全AOTモード下での実行が成功するようになりました。


#129708 [mono] AOT-compile methods that use the IL jmp opcode

概要

Monoの IL CEE_JMP オペコード処理を改善し、AOT コンパイル時に jmp を使用するメソッドが AOT イメージから除外されないようにしました。full-AOT 実行時に jmp メソッドが欠落してクラッシュする問題を解決します。

修正前は CEE_JMP が DISABLE_AOT() を呼び出して実メソッドを AOT イメージから除外していたため、実行時に ExecutionEngineException が発生していました。修正後は jmp を「call + return」として扱い、AOT コンパイル可能な形に変換します。

変更内容

  • method-to-ir.c: CEE_JMP ハンドラを修正。cfg->compile_aot フラグがある場合、既存の cfg->llvm_only パスと同様に jmp を通常の call 命令 + return として処理(実メモリスタック再利用のない tail call ではなく)
  • iltests.il, call05_large.il, call05_small.il: full-AOT 動作確認用テストコードから不要な記述を削除

パフォーマンスへの影響

修正後の AOT コンパイルパスでは jmp が実 tail call ではなく通常の call + return に変換されるため、スタックフレームの再利用がなくなります。ただしこれは機能的には等価(ターゲットメソッドへの制御移行と戻り値の返却)であり、JIT モードでは従来通り実 tail call が使用されます。パフォーマンス低下は full-AOT シナリオでの jmp 使用時のみで、一般的には軽微と考えられます。

関連Issue

#129508、#129396

その他

  • Emscripten 5.0.6 / LLVM 23 との統合テストで検証済み
  • GitHub Copilot の支援を受けて作成
  • MonoAOT LLVM 23 full-AOT リグレッション対応の一部

#129701 Use SearchValues in Utf8JsonReader.SkipWhiteSpace

概要

Utf8JsonReader.SkipWhiteSpaceをSearchValuesを用いたベクトル化処理で最適化し、長いホワイトスペース実行時のスキャン性能を向上させます。simdjsonの「次の興味深いバイトまでのベクトル化スキャン」という概念を、ストリーミング・単一パス・ゼロアロケーションという既存の制約を保ったまま適用します。すべての変更は内部実装(#if NETでゲート)であり、破壊的変更なし。

変更内容

  • Utf8JsonReader.cs: .NET固有の条件付き長さしきい値とベクトル化スキャンロジックを追加。行番号とバイト位置のブックキーピングは既存のJsonReaderHelper.CountNewLinesで保持。
  • JsonReaderHelper.net8.cs: SearchValues<byte>ベースのIndexOfFirstNonWhiteSpaceヘルパーを追加し、ベクトル化スキャンを実装。
  • JsonConstants.cs: スカラー→ベクトル切り替えしきい値を制御するMaxScalarWhiteSpaceScanLength定数を追加。
  • Utf8JsonReaderTests.cs: 長いホワイトスペース実行と改行(\r\n)の処理、タブ先頭、全ホワイトスペーステール、および無効トークン後の例外位置報告をカバーするテストを追加。

パフォーマンスへの影響

ホワイトスペース密度とインデント深度に応じた改善:

  • ミニファイJSON: 45.4 µs → 45.5 µs(1.00×、中立的)
  • きれいフォーマット浅い構造: 1,137 µs → 1,037 µs(0.91×、約10%高速化)
  • きれいフォーマット中程度: 849 µs → 574 µs(0.68×、約1.5倍高速化)
  • 深いネスト構造: 1,248 µs → 519 µs(0.42×、約2.4倍高速化)

最小値スカラープリフィックス(16バイト)の初期案は、per-byteカウンター オーバーヘッドにより浅い/中程度ケースで逆行したため削除。勝利はホワイトスペース密度が高い・深いインデント文書に集中するため、マージ前のハードウェア検証推奨。

関連Issue

なし

その他

  • 全テストスイート合格: net11.0で52,633件、net481で52,395件(0失敗)。
  • ドキュメント全体のチェックサム(_consumed + _lineNumber + _bytePositionInLine)がスカラー基準と完全一致。
  • netstandard向けは純スカラーループを保持、ソース/バイナリ互換性を維持。マルチセグメント読み取りも自動的に恩恵を受ける(SkipWhiteSpaceMultiSegmentがSkipWhiteSpaceに委譲)。

#129661 Fix RemoveImpl nullability

概要

RemoveImplメソッドのnullability属性を修正し、CombineImplと同様にnull値を受け入れるようにします。このPRでは、nullを許容するパラメータに対する属性アノテーションを統一し、APIの一貫性を向上させています。

変更内容

  • CoreCLR実装: System/MulticastDelegate.CoreCLR.csでRemoveImplのnullability属性を修正(+6/-6)
  • NativeAOT実装: System/Delegate.csでnullability属性を修正(+3/-3)
  • Mono実装: System/MulticastDelegate.Mono.csでnullability属性を修正(+3/-3)
  • ライブラリ実装: System/Delegate.csでnullability属性を修正(+3/-3)
  • 公開API署名: System.Runtime.csの参照アセンブリでnullability情報を更新(+3/-6)
  • リソース: Strings.resxから不要な文字列エントリを削除(-3)
  • APIcompat: 複数のターゲットフレームワーク向けにAPI互換性ベースラインを更新

パフォーマンスへの影響

影響なし

関連Issue

#129661

その他

  • 内部実装の変更で、パブリックAPIのnullability契約を明確化
  • 複数ランタイム実装(CoreCLR、NativeAOT、Mono)での一貫性が確保される
  • API互換性ベースラインの更新により、ビルドシステムへの影響が最小限に抑えられている

#129621 Enable runtime tests on OpenBSD

概要

OpenBSD プラットフォーム上でのランタイムテスト実行を可能にするための変更。テストビルドインフラストラクチャ、テストプラットフォーム定義、およびテスト実行スクリプトを更新し、OpenBSD をサポート対象プラットフォームとして追加します。

変更内容

  • ビルドインフラ: build-rootfs.sh、toolchain.cmake を更新し、OpenBSD のクロスビルド環境をサポート
  • テストプラットフォーム定義: TestPlatforms.cs に OpenBSD プラットフォーム定義を追加、ITestInfo.cs にプラットフォーム関連の定義を拡張
  • テスト実行スクリプト: run.py、bringup_runtest.sh、run-gc-reliability-framework.sh などテスト実行関連スクリプトを更新
  • テスト実行ラッパー: XUnitWrapperGenerator.cs でOpenBSD向けのテスト生成に対応
  • テストプロジェクト: StructABI.csproj、build.sh などを更新し OpenBSD でのテストビルドを可能化
  • プロファイラーテスト: プロファイラー関連テスト (ProfilerTestRunner.cs、reverse_startup.cs、releaseondetach.cs) の platform 判定ロジックを更新

パフォーマンスへの影響

影響なし

関連Issue

#124911

その他

なし


#129620 [release/9.0-staging] Update dependencies from dotnet/source-build-assets

概要

dotnet/source-build-assetsリポジトリから自動的に依存関係を更新するPull Requestです。 Microsoft.SourceBuild.Intermediate.source-build-assetsが9.0.0-alpha.1.26208.6から9.0.0-alpha.1.26309.1にアップデートされています。

変更内容

  • eng/Version.Details.xml: Microsoft.SourceBuild.Intermediate.source-build-assetsのバージョン情報を更新(2行追加、2行削除)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 自動生成されたPull Request(dotnet-maestro[bot]による)
  • Maestroの依存関係自動更新フロー(subscription: 3b2e34b4-9c9e-4da6-a358-02c0b764a22e)
  • release/9.0-stagingブランチのビルドアセット更新(Build: 20260609.1)

#129517 arm64: Add float/double cast optimisation tests

概要

ARM64 SVE(Scalable Vector Extension)における浮動小数点キャスト最適化に関連するディスアセンブリテストを追加します。不要な述語→ベクトル→述語変換が出力されていないことを検証するテストケースが含まれています。

変更内容

  • src/tests/JIT/opt/SVE/PredicateInstructions.cs: ARM64 SVE浮動小数点述語コード生成シナリオのターゲット化されたディスアセンブリテストを新規追加(+182行)

パフォーマンスへの影響

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

関連Issue

#124081で実施された浮動小数点述語コード生成最適化に対応するテスト

その他

  • このPRは #124081 の最適化作業をカバーするテストスイートの充実が目的です
  • ARM64 SVE環境でのコンパイラ最適化の正確性を検証するためのディスアセンブリテストです

#129498 Fix browser wasm merged test reference discovery

概要

Browser WASM統合テストランナーの参照解決を修正しました。マージされたランナープロジェクトの参照をビルド時に正規化し、異なるベースディレクトリからスキャンが実行される場合でも正しく参照を解決できるようにします。これにより、src\tests\build.cmd browserコマンドが正常に動作するようになります。

変更内容

  • src/tests/Directory.Build.targets: @(ProjectReference)エントリをGetRequiresProcessIsolation呼び出し前に%(FullPath)に正規化。プロセス分離が必要なプロジェクトをOriginalItemSpecベースのマッチングからFullPathベースのマッチングに変更し、OutOfProcessTestsとして再度タグ付け。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

Browser WASM テストビルド時の参照解決の問題を修正するビルド定義ファイルの内部実装変更です。エンドユーザーへの直接的な影響はありませんが、ビルドコマンドの信頼性が向上します。


#129484 [cDAC] Implement DacDbi API GetMetaDataFileInfoFromPEFile

  • 作成者: @rcj1
  • 作成日時: 2026年06月16日 22:39:42(UTC)
  • マージ日時: 2026年06月24日 23:04:21(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC Loader契約に GetFileHeadersInfo(ModuleHandle handle, out uint timeStamp, out uint imageSize) APIを追加し、DacDbi API GetMetaDataFileInfoFromPEFile の実装をサポートします。GetPath(ModuleHandle) を GetPath(TargetPointer peAssemblyPtr, bool fallbackToHint = false) に変更し、モジュールパス情報をPEImageに移動させるリファクタリングも含まれます。

変更内容

ILoader公開インターフェース(破壊的変更):

  • GetPath(ModuleHandle) を削除、GetPath(TargetPointer peAssemblyPtr) と GetFileHeadersInfo(ModuleHandle, out uint, out uint) を追加

Loader実装:

  • Loader_1.csで新APIを実装、PEImageからパス情報とPEヘッダ情報(TimeDateStamp、SizeOfImage)を取得

DacDbi実装:

  • DacDbiImpl.csでGetMetaDataFileInfoFromPEFileを実装(79行追加)、新Loader APIを使用

PE ヘッダ契約データ:

  • ImageFileHeader.csにTimeDateStampオフセット、ImageOptionalHeader.csにSizeOfImageオフセットを追加

データモデル:

  • Module.Pathフィールドを削除、PEImageにPathとModuleFileNameHintフィールドを追加
  • ネイティブ側CDAC記述子をそれに応じて調整(datadescriptor.inc、ceeload.hなど)

レガシーレイヤー:

  • SOSDacImpl.cs、ClrDataModule.csの既存パス照会をPEAssemblyベースのGetPathに更新

テスト:

  • LoaderTests.csでPEイメージターゲットビルダー使用の新APIテストを追加(134行追加)
  • MockDescriptors.Loader.csでモック更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は公開APIインターフェース(ILoader)の破壊的変更を伴います。既存のコードでGetPath(ModuleHandle)を使用している場合は、GetPath(GetPEAssembly(handle))に更新する必要があります。ドキュメント(Loader.md)も新API仕様に更新されています。


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

概要

VMRからのコードフロー更新であり、依存関係の更新と複数のリポジトリからのソースコード変更を含みます。主な変更は、System.Formats.Tar ライブラリでのセキュリティ強化、NativeAOT の相互運用性改善、および各種開発ツール依存関係の更新です。

変更内容

  • 依存関係更新: Microsoft.CodeAnalysis (5.0.0-2.26307.103 → 5.0.0-2.26319.104)、Microsoft.DotNet.Arcade.Sdk、NuGet パッケージ、Wasm Node Runtime など複数のパッケージをアップデート
  • System.Formats.Tar: TarEntry.cs に95行の機能追加(シンボリックリンク検証やパストラバーサル対策の強化と推定)
  • NativeAOT相互運用性: InteropHelpers.cs と PInvokeMarshal.cs を更新(計23行の変更)
  • テスト追加: TarFile の ExtractToDirectory メソッドに約118行のテストケースを追加、Marshal.StructureToPtr の新規テストを54行追加
  • ビルド設定: global.json および Version.Details.props/xml の更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 関連する複数リポジトリの変更が同期されています(aspnetcore、efcore、sdk、windowsdesktop、wpf など)
  • release/10.0.1xx ブランチのコードフロー更新であり、本番環境への準備段階の更新です
  • System.Formats.Tar への拡張的な変更とテスト追加により、セキュリティ面の改善が予想されますが、具体的な脆弱性情報は提供されていません

#129470 Port System.Diagnostics.Process to OpenBSD

概要

System.Diagnostics.Process をOpenBSDプラットフォームに対応させるポーティング実装です。プロセス情報の取得、プロセス管理、およびプロセススレッド情報の取得機能をOpenBSD固有のインターオプ層を通じて実装し、既存の他のUnixプラットフォーム対応と同様の構造で統合しています。

変更内容

  • Interop層(OpenBSD固有):Interop.Process.csとInterop.Process.GetProcInfo.csを新規・更新し、OpenBSDのシステムコール(libutil、procfs)経由でプロセス情報を取得するP/Invokeインターフェースを定義
  • ProcessManager実装:ProcessManager.OpenBSD.csを追加し、プロセス列挙・取得の具体的なロジックを実装
  • Process クラス実装:Process.OpenBSD.csを追加し、プロセスハンドル管理とメトリクス取得(CPU時間、メモリ使用量など)を実装
  • ProcessThread実装:ProcessThread.OpenBSD.csを追加し、スレッド情報取得機能を実装
  • プロジェクト設定:System.Diagnostics.Process.csprojにOpenBSD固有のコンパイル条件を追加
  • プラットフォーム検出:テスト用のPlatformDetection.csをOpenBSD対応に更新
  • 既存コード微調整:テストケース数件を調整、Environment.OpenBSD.csの軽微な修正

パフォーマンスへの影響

影響なし(プラットフォーム固有の実装追加のため、他のプラットフォームの動作に変更なし)

関連Issue

#124911

その他

なし


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

概要

dotnet/cecilの依存関係を更新するPRです。Microsoft.SourceBuild.Intermediate.cecilおよびMicrosoft.DotNet.Cecilを0.11.5-alpha.26307.3から0.11.5-alpha.26314.1にアップグレードします。

変更内容

  • eng/Version.Details.xml: Cecil依存関係のバージョン情報を更新(+4/-4行)
  • eng/Versions.props: バージョンプロパティを更新(+1/-1行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

自動依存関係更新PR(dotnet-maestro[bot]による)。release/9.0-stagingブランチへの定期的なメンテナンス更新です。


#129408 [release/10.0] Update dependencies from dotnet/xharness

概要

dotnet/xharnessの依存関係を更新するPull Request。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ツール設定の更新
  • eng/Version.Details.props: バージョン詳細情報の更新(3行変更)
  • eng/Version.Details.xml: バージョン詳細XMLの更新(6行変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 本PRは自動更新ツール(dotnet-maestro[bot])による依存関係更新です
  • xharnessのビルド20260619.2(コミット: a0534aec8f776d258392f0266cbdb9cc97e1dd98)に基づいています
  • release/10.0ブランチへの更新です

#129334 [wasm][coreclr] Re-enable System.Formats.Nrbf tests

概要

browser-wasm + CoreCLR環境でSystem.Formats.Nrbf.Testsテストスイートを再有効化します。

根本原因は、WebAssembly SDK のバンドルタスク ComputeWasmBuildAssets が相対パスのみで重複排除を行い、バージョンを無視していた点です。これにより、ランタイムパックのSystem.Runtime.Serialization.Formatters 8.1.0.0スタブがアプリローカル11.0.0.0版をシャドウイングし、テスト検出時に FileNotFoundException が発生していました。

修正では、MSBuild ターゲット _CoreCLRResolveRuntimePackVsAppLocalConflicts を追加し、SDK の ResolvePackageFileConflicts タスクを使用してバージョンベースでアセンブリバージョンの競合を解決してから webcil バンドルを構築します。

変更内容

  • src/mono/browser/build/BrowserWasmApp.CoreCLR.targets (+116行): CoreCLR-wasm 専用の新しいターゲットを追加。ResolveReferences 後、webcil バンドル候補の収集前に実行され、ReferenceCopyLocalPaths に含まれるランタイムパック版とアプリローカル版のアセンブリについて、アセンブリバージョン → ファイルバージョン → PreferredPackages ランクの順で競合を解決。低バージョンの方を ReferenceCopyLocalPaths から削除します。

  • src/libraries/tests.proj (-3/+1行): System.Formats.Nrbf.Tests の ProjectExclusions エントリを削除し、browser/CoreCLR 環境でのテスト実行を再有効化。

パフォーマンスへの影響

検証結果:

  • バンドル内の Formatters webcil サイズ: 69,913 → 156,953 バイト(8.1.0.0 スタブから機能する 11.0.0.0 版へ)
  • テスト検出数: 6 → 153 ケース(FileNotFoundException 解消)
  • テスト結果: 4 passed, 0 failed, exit 0(BinaryFormatter 非対応によるスキップ含)

関連Issue

#129741(共有 WebAssembly SDK タスク ComputeWasmBuildAssets 内の根本原因修正、.NET 12 ブランチ以降に計画)

その他

本修正は CoreCLR-wasm 専用ターゲットファイルに限定されており、Mono との共有バンドルパスへの変更を避けています。これは .NET 11 Mono リグレッションのリスク回避が目的です(Mono はこのバグに該当しません)。競合解決の方式はデスクトップの自己完結型パブリッシュと一致しており、バージョンが SDK のランタイムパック版より低いアプリローカルコピーは、デスクトップパブリッシュと同じ結果として敗北します。


#129279 Add OpenBSD support in System.Net.NetworkInformation

概要

System.Net.NetworkInformationでOpenBSDサポートを追加するPRです。System.Nativeレイヤーで既に実装されているOpenBSD対応を、マネージドレイヤーで有効化します。FreeBSDに存在するMsQuic固有の定義ファイルは不要なため、含めていません。

変更内容

  • System.Net.NetworkInformation.csproj: OpenBSDプラットフォーム対応の条件付きコンパイル設定を追加(+4/-4)
  • BsdIPGlobalProperties.cs: OpenBSD用のIPグローバルプロパティ実装を追加(+12)
  • IPGlobalPropertiesTest.cs / NetworkInterfaceBasicTest.cs: OpenBSD向けのテストケース追加(テスト条件を拡張)
  • Socket.cs: OpenBSD対応のソケット処理を追加(+2/-1)
  • pal_interfaceaddresses.c: OpenBSD用のネットワークインターフェイスアドレス取得実装を追加(+12)
  • pal_networking.c / pal_networkstatistics.c: OpenBSD対応のネットワーク統計情報取得ロジックを追加・修正(+93/-64)

パフォーマンスへの影響

影響なし

関連Issue

#124911

その他

  • 本変更はOpenBSDプラットフォーム固有の機能追加であり、既存プラットフォーム(Windows、Linux、FreeBSD、macOS)の動作に影響を与えません。
  • ネイティブレイヤー(System.Native)の実装は既に存在しており、本PRではマネージドコードとの統合を完了させています。

#129043 Async profiler: V1 (TaskAsync) instrumentation + tests.

概要

V1(コンパイラ生成のステートマシン型)async 実装に対するAsync Profilerインストルメンテーション機能を追加します。V1とV2の両async パスから統一的で明確に定義されたイベントストリームを出力し、ダウンストリームツールが両者を区別せずに消費できるようにします。V1専用のAppendAsyncCallstackイベントにより、レジューム時に完全な継続チェーンを再構築できます。

変更内容

  • AsyncStateMachineDispatcher — V1 State Machine Boxをラップするタスク派生クラス。TLS保存された状態と継続チェーン情報で Create/Resume/Suspend/Complete イベントを正確に追跡
  • インストルメンテーションポイント — TaskAwaiter、ValueTaskAwaiter、ConfiguredValueTaskAwaitable、YieldAwaitable、PoolingAsyncValueTaskMethodBuilderT等の await完了サイトにガード挿入
  • 診断データAPI — IAsyncStateMachineBox に GetDiagnosticData を追加し、AsyncTaskMethodBuilderT や AsyncMethodBuilderCore を通じて継続チェーン情報を公開
  • AsyncStateMachineDiagnostics — ステートマシンのメソッドID・状態フィールドオフセットをキャッシュ
  • テストスイート — 116テストを V1/V2 別ファイルに分割(AsyncProfilerV1Tests.cs、AsyncProfilerV2Tests.cs、共有インフラは AsyncProfilerTests.cs)
  • V2 リファクタリング — 既存V2実装を共有ヘルパーを使用するよう調整

パフォーマンスへの影響

  • Dispatcher派生クラスはV1継続チェーン毎に割り当てられます。最適化(スレッドプール・デフォルト同期コンテキスト等の既知パスでのアロケーション排除)は後続PRで検討予定
  • イベント送出時のオーバーヘッドは既存V2パスと同様

関連Issue

#129043

その他

  • NativeAOT対応: V1でのネイティブメソッドIPと状態フィールドアクセスの欠如により、NativeAOTではGetDiagnosticDataが false を返す。NativeAOT V1完全対応は今後の課題
  • 遅延アタッチ: V1のプロファイラー遅延アタッチでは、スタート時に非有効化の場合に盲点が生じる可能性。今後対応予定
  • Mono対応: AsyncProfiler + V1は Mono でビルド可能だが、テスト実行未実施。後続で検証予定
  • スコープ外: PoolingAsyncValueTaskMethodBuilderT の完全対応、既存 TPL/デバッガ チェックの統合最適化は後続PR で対応予定

#129035 [release/10.0] Reduce contention in UnwindInfoTable seen during high volume LCG method creation

概要

高ボリュームなLCG(Lightweight Code Generation)メソッド作成時のUnwindInfoTableにおける過度な競合を減らしてパフォーマンスを改善する修正を.NET 10にバックポートします。このリグレッションにより、Windows上でテストスイートが最大1.7倍遅くなっていました。

変更内容

  • src/coreclr/vm/codeman.cpp/h: UnwindInfoTableのロック機構を改善し、LCG メソッド作成時の競合を軽減する変更を実装(288行の変更)
  • src/coreclr/vm/dynamicmethod.cpp/h: 動的メソッド生成に関連する処理を調整(21行の変更)

パフォーマンスへの影響

改善あり。高ボリュームなLCGメソッド作成シナリオにおいて、テストスイートの実行速度が最大1.7倍改善されます。特にUnwindInfoTableへの競合が激しい状況での効果が顕著です。

関連Issue

#123124(元のリグレッション報告)、#128619(main向けの修正PR)

その他

  • 本修正は既にmain ブランチに約3週間マージされており、報告されている問題はなし
  • リスク評価:中程度(UnwindInfoTableの動作を変更するため)
  • 検証:高ボリュームなLCGメソッド同時生成という特定のシナリオに限定されるため、以前は見逃されていた

#128984 [release/10.0] [Android] Handle X509ChainContext creation failures

概要

Android プラットフォームで X509 チェーン作成失敗時のエラーハンドリングを改善するパッチです。以前は不透明なクラッシュが発生していたのに対し、適切なエラーコンテキストと例外メッセージを提供するように修正されました。この変更は #128651 の release/10.0 へのバックポートです。

変更内容

  • Interop.X509Chain.cs: Android P/Invoke インターフェースに新しいエラーハンドリング機能を追加
  • pal_x509chain.c: ネイティブコード側で X509ChainContext 作成失敗時のエラー情報を適切に返すよう修正
  • ChainPal.Android.cs: X509 チェーン作成失敗時の例外処理を改善
  • Strings.resx: エラーメッセージリソースを追加

パフォーマンスへの影響

影響なし

関連Issue

#128651

その他

  • 顧客報告の問題:Android アプリが不適切なエラーコンテキストなしでクラッシュしていた
  • リスク評価:低(Android 固有コードの変更であり、既存のユニットテストおよび機能テストでカバー済み)
  • 手動検証:Android デバイスで確認済み
  • .NET 10 以降向けのバックポート(release/X.0 ブランチに対応)

#128921 [cDAC] Add GetApproxTypeHandle DacDbi API

概要

cDAC(Compact DAC)の GetApproxTypeHandle DacDbi APIを追加するPRです。ネイティブの型ウォーク ロジックをマネージドにポートし、デバッガがダンプベースで近似型ハンドルを取得できるようにします。RuntimeTypeSystem APIの参照型判定ロジックを改善し、IsObjRef(TypeHandle)からIsCorElementTypeObjRef(CorElementType)へリファクタリングしています。

変更内容

  • TypeDataWalk.cs (新規):ネイティブのCordbType::GatherTypeDataをマネージドにポート。フラット化された型データ構造を操作するための新しいクラス
  • DacDbiImpl.cs:GetApproxTypeHandleのマネージド実装を追加。型ウォークロジックを統合
  • IDacDbiInterface.cs:DebuggerIPCE_TypeArgDataとTypeInfoList型を追加。GetApproxTypeHandleシグネチャを型付きポインタに厳密化
  • DacDbiApproxTypeHandleDumpTests.cs (新規):ダンプテスト。GCハンドルから到達可能なヒープオブジェクトを列挙し、GetApproxTypeHandleのラウンドトリップ動作を検証
  • IRuntimeTypeSystem.cs:IsObjRef(TypeHandle)を削除し、IsCorElementTypeObjRef(CorElementType)を追加(破壊的変更)
  • RuntimeTypeSystem_1.cs:新しいヘルパーの実装に更新
  • MethodTableTests.cs、RuntimeTypeSystemDumpTests.cs、DacDbiObjectDumpTests.cs:参照型判定ロジックを新ヘルパーに統一
  • RuntimeTypeSystem.md:契約ドキュメント更新

パフォーマンスへの影響

影響なし

関連Issue

#128921

その他

公開API変更:IRuntimeTypeSystemインターフェイスからIsObjRef(TypeHandle)が削除され、IsCorElementTypeObjRef(CorElementType)が追加されました。このインターフェイスに依存するコード は更新が必要です。cDACはデバッグ機能に関連するため、既存のデバッガツールに影響を与える可能性があります。


#128768 DI: avoid duplicate disposal for shared singleton instances

概要

DI コンテナで複数のサービス登録がファクトリ経由で同じシングルトンインスタンスに解決される場合、スコープ破棄時に重複したインスタンスが捕捉されて複数回破棄される問題を修正しました。スコープ破棄開始時に遅延的に重複排除を行い、シングルトンは1回のみ破棄しつつ、依存オブジェクトの破棄順序を保持します。

代表的なシナリオ:

services.AddSingleton<TImpl>();
services.AddSingleton<IService1>(sp => sp.GetRequiredService<TImpl>());
services.AddSingleton<IService2>(sp => sp.GetRequiredService<TImpl>());

変更内容

  • ServiceProviderEngineScope.cs: BeginDisposeに参照ベースの重複排除ロジックを追加。捕捉済み破棄対象リスト走査時に重複エントリをnullに置き換え、破棄ループではnullをスキップ。同期・非同期破棄パス両対応。
  • ServiceProvider.cs: 補助的な変更(詳細は記載なし)。
  • ServiceProviderEngineScopeTests.cs: シングルトン別名シナリオの回帰テスト追加。同じシングルトンが複数サービスとして解決される場合、1回のみ破棄されること、および依存オブジェクト破棄後に処理されることを検証。

パフォーマンスへの影響

影響なし。ホットパスのメモリ割り当てを軽量に保つため、捕捉時に重複排除せず、スコープ破棄開始時の遅延排除で対応しています。

関連Issue

なし

その他

本修正はIDisposableおよびIAsyncDisposableの両方の破棄パスで動作検証されています。破棄順序セマンティクス(依存オブジェクトより後にシングルトンを破棄)が保持されることが重要です。


#128306 Add MemoryExtensions.Min/Max

概要

ReadOnlySpan<T>に対してMinとMaxの拡張メソッドをMemoryExtensionsに追加します。デフォルトの比較器またはカスタムIComparer<T>をサポートし、空のスパンや参照型/null許容型を適切に処理します。LINQのEnumerable.Min/Maxのセマンティクスをスパン向けに実装します。

// 使用例
ReadOnlySpan<int> numbers = new[] { 3, 1, 4, 1, 5 };
int min = numbers.Min(); // 1
int max = numbers.Max(); // 5

// カスタム比較器の使用
var result = numbers.Max(comparer);

変更内容

  • MemoryExtensions.MinMax.cs(新規): 非null値型・参照型・null許容型に対応したMin<T>/Max<T>実装。空のスパンに対して非null値型はInvalidOperationExceptionを発生、参照型・null許容型はnullを返却
  • System.Memory参照アセンブリ: 新しい4つのオーバーロード(パラメータなし、IComparer<T>付き)の公開API署名を追加
  • ReadOnlySpan/MinMax.cs(新規): 空のスパン、全null、混合null、デフォルト比較器、カスタム比較器のテストケース168行
  • Linq関連の簡潔化: MaxMin.cs(170行)を削除し、Min.cs/Max.csを簡潔に(各26→7行に削減)
  • リソース文字列: 空のスパンエラーメッセージを追加

パフォーマンスへの影響

影響なし(ベンチマーク情報なし)

関連Issue

#127083

その他

  • 公開API追加による互換性への影響:なし(新規メソッドの追加)
  • 空のスパン処理で値型と参照型で動作が異なることに注意(値型は例外、参照型はnull返却)

#128252 Re-enable Microsoft.Extensions.Hosting shutdown functional coverage in CI and harden shutdown startup/Helix/NET481 compatibility

概要

Microsoft.Extensions.Hosting の機能的シャットダウンテスト(ShutdownTests)を CI で再有効化し、制限されたHelix/最小限のイメージ環境での互換性を確保するための硬化(ハードニング)を実施しました。テスト展開をソースツリーの検出ではなく、展開済み出力から実行し、外部プロセスツール(pgrep、kill)への依存を排除し、Unix シグナルハンドリングをランタイムの platform-specific signal mapping に合わせました。

変更内容

  • ShutdownTests.cs: テストアプリのデプロイを AppContext.BaseDirectory から実行するよう変更。ExistingOutputApplicationPublisher を追加してソースベースの発行を回避。出力観察を DeployAsync() 前に配線してスタートアップレース条件を修正。スタートアップ/シャットダウン待機ウィンドウを 180 秒に拡大。
  • ProcessExtensions.cs: libc kill P/Invoke を ProcessExtensions.SendSignal(int pid, int signal) に一元化。外部 kill プロセスを廃止し、代わりに libc signal 呼び出しを使用。Unix SIGINT/SIGTERM 番号を SystemNative_GetPlatformSignalNumber で実行時に解決(ハードコード廃止)。Windows では PlatformNotSupportedException を明示的にスロー。プロセス終了を graceful termination (SIGTERM) → hard-kill fallback (Process.Kill()) の段階的アプローチに改善。最終シャットダウン exit grace period を 30 秒に拡大。
  • PublishedApplication.cs: Dispose() メソッドを virtual に変更。BorrowedPublishedApplication クラスで no-op オーバーライド(テスト出力ディレクトリの削除を回避)。
  • AssemblyInfo.cs: assembly レベルの ActiveIssue 属性を削除。
  • Microsoft.Extensions.Hosting.Functional.Tests.csproj: IgnoreForCI を削除して CI で再実行。
  • SelfHostDeployer.cs: OutputReceived イベントを internal に変更。

パフォーマンスへの影響

影響なし(テスト信頼性向上とタイムアウト容限拡大が目的)。

関連Issue

なし

その他

  • 互換性: net481 互換性を Marshal.GetLastWin32Error() で修正。
  • レース条件修正: WaitForExit(timeout) の戻り値を直接使用し、プロセス終了後の Process.Kill() 呼び出しを catch (InvalidOperationException) でラップしてウィンドウ条件への耐性を付与。
  • 環境適応性: Helix/最小限イメージでのツール欠落に対する耐性強化(pgrep 欠落時の child-process enumeration 許容、外部 kill 廃止)。
  • コードレビュー指摘: OutputReceived イベントコールバック内での output 文字列の非同期更新はスレッド安全性に問題がある可能性を指摘されています。

#126669 Add Stream wrappers for memory and text-based types

概要

メモリおよびテキストベースの型に対する標準化されたストリームラッパーを新しい公開シール型として追加します。StringStream、ReadOnlyMemoryStream、WritableMemoryStream(CoreLib)、およびReadOnlySequenceStream(System.Memory)が導入され、テキスト・メモリデータをStream APIで統一的に扱えるようになります。

サンプルコード:

// StringStream: 文字列をストリーム化してエンコード
var stream = new StringStream("Hello, World!", Encoding.UTF8);
byte[] buffer = new byte[100];
int bytesRead = stream.Read(buffer, 0, buffer.Length);

// ReadOnlyMemoryStream: バイト配列の読み取り専用ストリーム
ReadOnlyMemory<byte> data = new byte[] { 1, 2, 3 };
var romStream = new ReadOnlyMemoryStream(data);

// WritableMemoryStream: 固定容量の読み書き可能ストリーム
Memory<byte> buffer = new byte[256];
var wmStream = new WritableMemoryStream(buffer);
wmStream.Write(new byte[] { 1, 2, 3 }, 0, 3);

// ReadOnlySequenceStream: ReadOnlySequence<byte>のストリーム化
ReadOnlySequence<byte> sequence = ...;
var rosStream = new ReadOnlySequenceStream(sequence);

変更内容

  • StringStream(CoreLib):文字列またはReadOnlyMemory<char>を動的にエンコードする非シーク型の読み取り専用ストリーム。エンコーディング指定が必須でBOMを出力しない。
  • ReadOnlyMemoryStream(CoreLib):ReadOnlyMemory<byte>上のシーク可能な読み取り専用ストリーム。MemoryStreamから派生。
  • WritableMemoryStream(CoreLib):Memory<byte>上の固定容量のシーク可能な読み書きストリーム。MemoryStreamから派生。
  • ReadOnlySequenceStream(System.Memory):ReadOnlySequence<byte>上のシーク可能な読み取り専用ストリーム。
  • 参照アセンブリ(System.Runtime、System.Memory)の更新
  • 内部呼び出し箇所(ReadOnlyMemoryContent、XmlPreloadedResolver、JsonXmlDataContract)の新型への置き換え
  • 全4型の準拠テストおよび動作テスト

パフォーマンスへの影響

StringStreamはバッファリングなしで呼び出し元バッファに直接エンコードするため、メモリ効率が良好。ReadOnlyMemoryStreamおよびWritableMemoryStreamはMemoryStreamベースで、既存実装と同等のパフォーマンス特性を継承。影響なし(改善による最適化)。

関連Issue

#82801、#100434(今後の作業)

その他

  • 全ての型はpublic sealedで、ファクトリメソッドではなく直接コンストラクタで使用
  • TryGetBufferはfalseを、GetBufferは例外をスローする(公開バッファサポートなし)
  • System.Memory.DataおよびSystem.Net.Httpは内部用共有ソースReadOnlyMemoryStreamを使用し、新公開型への完全な置き換えはできない(マルチターゲット対応の制限)
  • 複数回のAPI reviewを経た承認

#110721 Expression.Compile: empty the evaluation stack before evaluating second expression in OrElse and AndAlso

概要

Expression.CompileにおけるOrElseおよびAndAlso演算子の実装をを修正しました。これらの短絡評価演算子で2番目の式を評価する前に評価スタックを空にするようにしました。この修正により、以前のコミットの変更を元に戻しています。

変更内容

  • LambdaCompiler.Logical.cs: OrElseおよびAndAlso演算子のコンパイルロジックを修正(+68/-54)

    • 2番目の式を評価する前に評価スタックの状態を適切にクリア
  • LightCompiler.cs: インタープリタ側の対応実装(+19/-0)

    • LightCompilerでの短絡評価の動作を同期
  • ExceptionHandlingExpressions.cs: テストケース追加(+53/-0)

    • OrElseおよびAndAlsoの例外処理を含むテストを新規追加

パフォーマンスへの影響

影響なし

関連Issue

#103197

その他

このPRは以前のコミット(2ecfbbdc)の変更を明示的に元に戻すもので、短絡評価時のスタック状態管理に関する重要な修正です。Expression APIの信頼性向上に直結する変更です。


目次