Pull Request on 2026年04月08日

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

注意点

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


目次

  1. #126644 Fix decimal NumberStyles validation
  2. #126624 Revert "Add GroupJoin overload returning IGrouping"
  3. #126618 Fix missing error handling in SafeFileHandle.Type on Windows
  4. #126612 Remove unused FreeBSD OSPlatform extension from TargetInfo.cs
  5. #126605 Disable HTTP/3 tests on AzureLinux 3 VMs due to QUIC OOM
  6. #126602 Fix SmtpException.GetMessageForStatus: use distinct messages for unknown and defined-but-unmapped status codes
  7. #126597 [LoongArch64] Fix the floating-point register copy in SoftwareExceptionFrame::UpdateContextFromTransitionBlock().
  8. #126594 Enable runtime-async in CoreCLR System.Private.CoreLib
  9. #126588 JIT: use funclet iterator in genCodeForBBlist
  10. #126561 Fix regex compiler/source generator resumeAt handling of conditionals inside loops
  11. #126550 Disable ICorProfiler on non-desktop and WASM platforms
  12. #126517 Fix SkipOnCoreClr generating unreachable test code in standalone runner
  13. #126445 Wasm funclet RA
  14. #126374 [Wasm RyuJit] transform multi-entry try regions
  15. #126346 Fix ARM64 interface dispatch cache torn read
  16. #126318 Add ProcessStartInfo.InheritedHandles to restrict child process handle inheritance
  17. #125963 Fix intermittent OSX CI failures in StartsWithNoMatch_StringComparison and EndsWithNoMatch_StringComparison
  18. #125900 [Runtime Async] Support for covariant override of Task- returning base with a Task<T>- returning derived method.
  19. #125647 [crossgen2] Add --strip-il-bodies option for composite R2R
  20. #125226 Support InstructionSet_VectorT in HWIntrinsic importer
  21. #124266 Re-enable symbol stripping for Apple platforms
  22. #119891 Annotate System.Diagnostics.EventLog with Nullable Reference Types

#126644 Fix decimal NumberStyles validation

  • 作成者: @lilinus
  • 作成日時: 2026年04月08日 13:45:48(UTC)
  • マージ日時: 2026年04月08日 18:55:01(UTC)
  • ラベル: area-System.Globalization community-contribution

概要

decimal.Parsedecimal.TryParseのNumberStyles検証を修正し、AllowHexSpecifierAllowBinarySpecifierスタイルを正しく拒否するようにしました。UTF-16とUTF-8の両方のパースAPI間で動作を統一し、#126643を解決します。

変更内容

  • NumberFormatInfo.cs: ValidateParseStyleDecimalメソッドを追加。decimalに対してAllowHexSpecifierAllowBinarySpecifierを拒否するための専用検証を実装
  • Decimal.cs: UTF-16およびUTF-8オーバーロードのParse/TryParseメソッドを、新しいdecimal固有の検証を使用するよう更新
  • Strings.resx: unsupportedなhex/binaryスタイルに対するエラーメッセージリソースを追加
  • NumberFormatInfoValidateParseStyle.cs: decimal.Parseのスタイル検証をカバーする新しいユニットテスト(UTF-16パス)を追加

パフォーマンスへの影響

影響なし

関連Issue

#126643#123289

その他

本修正により、decimal.Parseで16進数または2進数指定子スタイルを使用しようとしたときの動作がUTF-16とUTF-8の両方で一貫性を持つようになります。


#126624 Revert "Add GroupJoin overload returning IGrouping"

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年04月08日 03:46:27(UTC)
  • マージ日時: 2026年04月08日 07:34:10(UTC)
  • ラベル: area-System.Linq

概要

PR #121999で追加されたGroupJoin オーバーロード(IGrouping を返す)機能をリバートします。このPRは CI 停止中にマージされており、System.Linq.AsyncEnumerable のテストでコンパイルエラーが発生しています。

変更内容

  • System.Linq: GroupJoin、Join、LeftJoin、RightJoin の各メソッドの実装とテストを削除
  • System.Linq.AsyncEnumerable: 非同期版の GroupJoin、Join、LeftJoin、RightJoin 実装とテストを削除
  • System.Linq.Queryable: Queryable 向けの GroupJoin、Join、LeftJoin、RightJoin 実装とテストを削除
  • 参照アセンブリ: 3つのライブラリ(System.Linq、System.Linq.AsyncEnumerable、System.Linq.Queryable)の ref ファイルから該当メソッドシグネチャを削除

計26ファイルで約1,826行のコード・テストが削除されます。

パフォーマンスへの影響

影響なし

関連Issue

#121999(リバート対象)

その他

  • リバート理由はコンパイルエラー(型引数推論の失敗)と CI 停止中の無検証マージ
  • 公開API(IGrouping を返す新しいオーバーロード)の削除であり、既に公開されていた場合は破壊的変更となります

#126618 Fix missing error handling in SafeFileHandle.Type on Windows

  • 作成者: @Copilot
  • 作成日時: 2026年04月07日 20:44:21(UTC)
  • マージ日時: 2026年04月08日 06:42:10(UTC)
  • ラベル: area-System.IO

概要

Windows上でのSafeFileHandle.Typeプロパティの不具合を修正。従来は無効なハンドルに対してFileHandleType.Unknownを無条件に返していましたが、本修正によりGetFileTypeFILE_TYPE_UNKNOWNを返した際にGetLastErrorをチェックして、実際のエラーが発生している場合は例外をスローするようになります。

変更内容

  • src/libraries/System.Private.CoreLib/src/Microsoft/Win32/SafeHandles/SafeFileHandle.Windows.cs
    • GetFileTypeCore()メソッド内にFILE_TYPE_UNKNOWNの事前チェック処理を追加
    • Marshal.GetLastPInvokeError()でエラーコードを確認し、ERROR_SUCCESS以外の場合はWin32Marshal.GetExceptionForWin32Error()で例外をスロー
    • エラーが無い場合のみFileHandleType.Unknownを返却

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この修正は公開API(SafeFileHandle.Typeプロパティ)の動作変更です。従来は無効なハンドルでも例外を発生させずにFileHandleType.Unknownを返していましたが、修正後は適切なWin32例外がスローされるため、既存コードで無効なハンドルに対する黙示的な例外処理が行われていた場合は影響を受ける可能性があります。


#126612 Remove unused FreeBSD OSPlatform extension from TargetInfo.cs

  • 作成者: @Copilot
  • 作成日時: 2026年04月07日 19:02:37(UTC)
  • マージ日時: 2026年04月08日 04:41:36(UTC)
  • ラベル: area-HostModel

概要

PR #126437で削除されたFreeBSD OSPlatform拡張メソッドの残存コードを削除するクリーンアップPRです。TargetInfo.csPlatformExtensions内で定義されながら使用されていないFreeBSD OSPlatform拡張ブロックを削除し、引き続き使用されているArchitecture.LoongArch64拡張ブロックは保持します。

変更内容

  • src/installer/managed/Microsoft.NET.HostModel/Bundle/TargetInfo.cs:
    • #if NETFRAMEWORK配下の未使用のFreeBSD OSPlatform拡張メンバーを削除(5行削除)
    • Architecture.LoongArch64拡張メンバーは保持(引き続き使用中)

パフォーマンスへの影響

影響なし

関連Issue

#126437の後続クリーンアップ

その他

なし


#126605 Disable HTTP/3 tests on AzureLinux 3 VMs due to QUIC OOM

  • 作成者: @rzikm
  • 作成日時: 2026年04月07日 15:00:55(UTC)
  • マージ日時: 2026年04月08日 08:12:34(UTC)
  • ラベル: area-System.Net.Http

概要

AzureLinux 3 VMs上でMsQuicがメモリ不足エラー(QUIC_STATUS_OUT_OF_MEMORY)で失敗するため、HTTP/3機能テストを無効化します。既存のQUICテスト側での対策に合わせて、HTTP/3テスト用のサポートゲート条件にIsNotAzureLinux3VMチェックを追加することで、該当環境でのテストスキップを実現します。

変更内容

  • src/libraries/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTestBase.SocketsHttpHandler.cs
    • IsHttp3SupportedプロパティにIsNotAzureLinux3VM条件を追加
    • これにより、AzureLinux 3 VMs上でのすべてのHTTP/3テストクラス(*_Http3/*_Http30)が自動的にスキップされます

パフォーマンスへの影響

影響なし

関連Issue

#123216

その他

  • QUICテスト側での同様の対策(PR #125665、#125772)に倣った実装
  • AzureLinux 3環境での継続的なメモリリソース問題に対応するための安定性向上策

#126602 Fix SmtpException.GetMessageForStatus: use distinct messages for unknown and defined-but-unmapped status codes

  • 作成者: @Copilot
  • 作成日時: 2026年04月07日 12:05:01(UTC)
  • マージ日時: 2026年04月08日 08:09:28(UTC)
  • ラベル: area-System.Net

概要

SmtpException.GetMessageForStatusが未定義のステータスコード(初期化されていない_statusCodeなど)に対して誤って"Syntax error, command unrecognized."というメッセージを返していた問題を修正しました。未定義のステータスコードと定義済みながらマッピングされていなかったステータスコードを区別し、それぞれ適切なメッセージを返すようになります。

変更内容

  • Strings.resx: 3つの新しいリソース文字列を追加
    • SmtpUnknownStatusCode → "Unknown SMTP status code."(未定義のステータスコード用)
    • SmtpCannotVerifyUserWillAttemptDelivery → "Cannot verify user, but attempt delivery."(SMTP 252用)
    • SmtpGeneralFailure → "General failure."(内部のGeneralFailure = -1用)
  • SmtpException.cs: GetMessageForStatusメソッドのswitch文を修正
    • defaultケースをCommandUnrecognizedから分離し、未定義値に対して新しい"Unknown SMTP status code"メッセージを返すように変更
    • 定義済みながら未マッピングだったCannotVerifyUserWillAttemptDeliveryGeneralFailureに明示的なケースを追加
  • SmtpExceptionTest.cs: 未定義のステータスコード(666など)がCommandUnrecognizedと異なるメッセージを返すことを検証するアサーションを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 互換性への影響:既存の定義済みステータスコード値のメッセージは変わりません。今回の変更は診断メッセージのみに影響し、動作ロジックに変更はありません
  • リスク評価:非常に低い。switch文内のみの変更で、未定義のステータスコードが返されるという稀なケースを改善するものです
  • 既存テスト:318個のテストがすべてパスしており、回帰はありません

#126597 [LoongArch64] Fix the floating-point register copy in SoftwareExceptionFrame::UpdateContextFromTransitionBlock().

  • 作成者: @LuckyXu-HF
  • 作成日時: 2026年04月07日 03:01:17(UTC)
  • マージ日時: 2026年04月08日 14:34:49(UTC)
  • ラベル: area-VM-coreclr community-contribution arch-loongarch64

概要

LoongArch64アーキテクチャにおいて、SoftwareExceptionFrame::UpdateContextFromTransitionBlock()内の浮動小数点レジスタコピー処理を修正しました。このPRは例外処理時のレジスタコンテキスト更新で、浮動小数点レジスタが正しく保存・復元されることを確保します。

変更内容

  • src/coreclr/pal/inc/unixasmmacrosloongarch64.inc: LoongArch64アセンブリマクロの浮動小数点レジスタ処理を修正(+3行、-2行)
  • src/coreclr/vm/excep.cpp: 例外フレーム処理内の浮動小数点レジスタコピーロジックを修正(+6行、-6行)
  • src/coreclr/vm/loongarch64/stubs.cpp: LoongArch64固有のスタブコード内のレジスタ処理を修正(+2行、-2行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正はLoongArch64プラットフォーム固有の問題であり、例外発生時のコンテキスト復元の正確性向上に貢献します。内部実装(ランタイムコア)の修正であり、公開APIへの影響はありません。


#126594 Enable runtime-async in CoreCLR System.Private.CoreLib

  • 作成者: @Copilot
  • 作成日時: 2026年04月06日 23:41:45(UTC)
  • マージ日時: 2026年04月08日 16:49:46(UTC)
  • ラベル: area-Infrastructure-coreclr runtime-async

概要

CoreCLR の System.Private.CoreLib に対して runtime-async=on Roslyn 機能フラグを有効化し、既に src/libraries で有効化されているランタイム非同期機能を CoreCLR 側に合わせます。riscv64、loongarch64、および Mono ランタイムフレーバーは除外されます。

変更内容

  • src/coreclr/System.Private.CoreLib/System.Private.CoreLib.csproj: MSBuild 条件付きで Features プロパティに runtime-async=on を追加
    • 除外条件:TargetArchitecture が riscv64 または loongarch64、または RuntimeFlavor が Mono

パフォーマンスへの影響

影響なし

関連Issue

#124934(riscv64 除外関連) #124935(loongarch64 除外関連)

その他

なし


#126588 JIT: use funclet iterator in genCodeForBBlist

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年04月06日 20:59:36(UTC)
  • マージ日時: 2026年04月08日 21:27:48(UTC)
  • ラベル: area-CodeGen-coreclr

概要

CoreCLR JITの線形コード生成ロジックをリファクタリングし、関数本体(funclet)の反復処理を既存の Compiler::Funcs() / FuncInfoDsc::Blocks() レンジベースの反復子を使用するように変更します。これにより、BBJ_CALLFINALLYブロック後のスキップ処理を廃止し、代わりにコード生成時にBBJ_CALLFINALLYRETブロックをスキップする仕様に統一します。

変更内容

  • codegenlinear.cpp: genCodeForBBlistを単一のブロックウォークから、funclet単位の反復処理(genCodeForFunclet + genCodeForBlock)へ変更。ブロック制御フローの簡素化。
  • codegen.h: genEmitEndBlockgenCallFinallyの戻り値型をBasicBlock*からvoidに変更し、新しいヘルパー関数の宣言を追加。
  • codegenxarch.cpp, codegenarm.cpp, codegenarm64.cpp, codegenloongarch64.cpp, codegenriscv64.cpp, codegenwasm.cpp: 各アーキテクチャ実装においてgenCallFinallyのシグネチャをvoidに統一し、スキップ戻り値ロジックを削除。
  • BBJ_CALLFINALLYRETブロックはコード生成時にスキップされるため、特別な処理が不要に。

パフォーマンスへの影響

影響なし(リファクタリングのみで機能変更なし)

関連Issue

なし

その他

この変更は内部実装(JIT コンパイラの例外処理フロー生成)に限定されており、公開APIへの影響はありません。すべてのプラットフォーム対応アーキテクチャの一貫性が確保されています。


#126561 Fix regex compiler/source generator resumeAt handling of conditionals inside loops

  • 作成者: @stephentoub
  • 作成日時: 2026年04月05日 12:59:33(UTC)
  • マージ日時: 2026年04月08日 19:05:33(UTC)
  • ラベル: area-System.Text.RegularExpressions

概要

正規表現コンパイラおよびソースジェネレータにおいて、ループ内の条件式でresumeAtがリセットされない問題を修正。この問題により、コンパイル/ソースコード生成された正規表現での複数マッチの結果が不正確になっていました。EmitExpressionConditionalをループ内で実行される各ブランチごとにresumeAtをリセットするよう更新。

変更内容

  • RegexCompiler.cs: ループ内の条件式実行時に各ブランチでresumeAtをリセット。スタッシュされた古いブランチ状態がバックトラック時に再利用されるのを防止。
  • RegexGenerator.Emitter.cs: RegexCompilerと同じresumeAt処理をソースコード生成時にも適用。
  • Regex.MultipleMatches.Tests.cs: バランシングループ内の条件式を含む回帰テストを追加(Non-Backtracking エンジンを除く)。

パフォーマンスへの影響

影響なし

関連Issue

#126556

その他

このバグは、JIT コンパイル/ソースコード生成される正規表現の正確性問題で、インタープリタとの動作の相違と例外発生につながる可能性がありました。修正により、ループ内の条件式を含む正規表現パターンの複数マッチ処理がインタープリタと一貫した動作をするようになります。


#126550 Disable ICorProfiler on non-desktop and WASM platforms

  • 作成者: @AaronRobinsonMSFT
  • 作成日時: 2026年04月04日 18:54:36(UTC)
  • マージ日時: 2026年04月08日 18:08:13(UTC)
  • ラベル: arch-wasm area-Diagnostics-coreclr

概要

clrfeatures.cmakeFEATURE_CORPROFILERフラグロジックをリファクタリング。ICorProfilerサポートを、プロファイリングが非サポートのプラットフォーム(Android、iOS、Mac Catalyst、tvOS、WASM)でデフォルト無効化しつつ、コマンドラインからのオーバーライドを可能にします。

変更内容

  • src/coreclr/clrfeatures.cmake:
    • FEATURE_CORPROFILERif(NOT DEFINED FEATURE_CORPROFILER)でラップし、コマンドライン上書きを許可
    • Android、iOS、Mac Catalyst、tvOSおよびWASM以外のターゲットでのみFEATURE_CORPROFILERを有効化
    • WASMの個別オーバーライド処理を削除

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はビルド時設定に関するもので、プロファイリング機能が不要なプラットフォームでの不要なコード生成を回避することを意図しています。コマンドラインで-DFEATURE_CORPROFILER=1を指定することで、フラグをオーバーライドできるようになります。


#126517 Fix SkipOnCoreClr generating unreachable test code in standalone runner

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年04月03日 21:24:33(UTC)
  • マージ日時: 2026年04月08日 23:07:37(UTC)
  • ラベル: area-Infrastructure

概要

XUnitWrapperGeneratorにおけるSkipOnCoreClrAttributeの処理を修正しました。属性で1つのディメンション(例:RuntimeTestModes.InterpreterActive)のみを指定した場合、他のディメンションがAny値のままになり、結果としてfalseのプラットフォーム条件が生成され、スタンドアロンランナーでテスト本体が到達不可能なデッドコードになる問題を解決しています。

変更内容

  • XUnitWrapperGenerator.cs: skippedTestPlatformsskippedConfigurationsskippedTestModesの初期化をAny値から0(「未指定」を意味する)に変更。「引数なし」判定ロジックを更新し、ディメンションが指定されていない場合のみ「CoreCLR全体をスキップ」の意図した動作を保持。
  • ExtensionPoints.cs、hijacking.il: テスト関連のマイナー修正。

パフォーマンスへの影響

影響なし

関連Issue

#126499#126517

その他

この修正により、SkipOnCoreClrAttributeで特定のテストモードのみをスキップするテストが正常に実行されるようになります。修正前はスタンドアロンランナーが終了コード100(パス)を返していたため、テストが実際に実行されないまま成功と見なされていました。


#126445 Wasm funclet RA

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年04月02日 02:03:04(UTC)
  • マージ日時: 2026年04月08日 21:16:20(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssemblyターゲット向けのJITコンパイラに関数レット(funclet)のレジスタ割り当て機能を実装します。関数レットごとに独立したレジスタ割り当て状態(SP/FP/例外レジスタ)、ローカル変数宣言、およびプロログコード生成を追加し、例外処理リージョンが独自のWasmローカルレイアウトで生成できるようにします。

変更内容

  • regallocwasm.h/cpp: 関数レットごとのRA状態(SP/FP/EX + 参照追跡)、キャッチ引数収集フック、関数レット単位での割り当てとローカル変数宣言生成を実装
  • codegeninterface.h/codegencommon.cpp: 非固定レジスタターゲット(WASM)で、SP/FP、内部レジスタ追跡、ローカル変数宣言を関数レットごとに管理するよう修正
  • codegenwasm.cpp: 関数レット単位のSP/FP アクセッサを使用し、プロログ内でローカルシグネチャを生成
  • emitwasm.cpp: 関数レットシグネチャに対応した引数カウント計算を拡張
  • lclvars.cpp: 非固定レジスタターゲットでリージョン0のSP/FPを使用するようフレーム位置ダンプを調整
  • codegen.h/compiler.h: 関数レット管理用の新規フィールドを追加
  • flowgraph.cpp/regalloc.cpp: 関数レット処理の初期化支援

パフォーマンスへの影響

提供されたファイルサイズ変更情報のみから判断すると、主にメタデータ構造の拡張であり、ランタイムパフォーマンスへの直接的な負の影響は想定されませんが、具体的なベンチマーク結果の記載なし。

関連Issue

なし

その他

重要な懸念点: Copilotのレビューコメントで、genCodeForLclVarで単一グローバルなregNumでは不十分であることが指摘されています(funcletは独立したローカルインデックス空間を持つため)。この問題に対し、関数レット単位のマッピングを使用するか、RA中にLCL_VARノードを書き直してwasm localを指定する必要があるとされています。実装の完全性については追加レビューが必要とみられます。


#126374 [Wasm RyuJit] transform multi-entry try regions

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年03月31日 20:53:22(UTC)
  • マージ日時: 2026年04月08日 14:25:51(UTC)
  • ラベル: area-CodeGen-coreclr

概要

Wasm RyuJit のコントロールフロー最適化パイプラインを更新し、複数エントリポイントを持つ try/catch 領域をマルチエントリループとして一時的にモデル化して、既存の SCC-to-single-entry-loop 変換を活用し、Wasm try_table コード生成に適した単一エントリフォーム に変換します。

変更内容

  • fgwasm.h/cpp: Wasm サクセッサ列挙拡張により、サイドエントリ try ブロックを囲む try ヘッダーへのサクセッサとして合成。Wasm DFS と SCC 変換中に try 領域情報を構築・使用。SCC 書き換え時に Wasm try ヘッダーの特別処理を追加。
  • flowgraph.cpp: マルチエントリ try 領域の先行辺を一時的に追加/削除するヘルパー関数を実装。
  • compiler.h: 新しい FlowGraphTryRegions ヘルパー API を宣言。

パフォーマンスへの影響

影響なし(コントロールフロー構造の最適化であり、ランタイム性能への直接的な計測値は提供されていません)

関連Issue

なし

その他

  • この変更は Wasm プラットフォーム固有の最適化(try_table コード生成用)であり、他のプラットフォームには影響しません。
  • 内部実装変更のため、公開 API への影響はありません。
  • フロー変換の特性として、try への全フローは最初に try ヘッダーを通過してからディスパッチブロックへ進みます。

#126346 Fix ARM64 interface dispatch cache torn read

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年03月31日 05:36:58(UTC)
  • マージ日時: 2026年04月08日 03:04:41(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

ARM64のインターフェース ディスパッチ キャッシュで、2つの独立したロード命令による制御依存関係の間でのロード再順序化により、破損した読み取り(torn read)が発生する競合状態を修正します。並行スレッドがキャッシュエントリを更新している最中に、古い m_pTargetCode(0)を読み取り、その値にブランチしてしまう問題を、単一の ldp 命令とガード条件を用いて解決します。

変更内容

  • src/coreclr/runtime/arm64/StubDispatch.S: CHECK_CACHE_ENTRY マクロを修正。2つの separate ldr 命令を単一の ldp 命令に置き換え、m_pInstanceType と m_pTargetCode を原子的に読み取るように変更。さらに cbz ガードを追加して、LSE2以前のハードウェア上での破損読み取りをキャッシュミスとして扱う。
  • src/coreclr/runtime/arm64/StubDispatch.asm: GAS版と同じロジックを ARMASM版にも適用し、実装の一貫性を保持。

パフォーマンスへの影響

影響なし。今回の変更は正確性(correctness)の修正であり、命令数は若干増加しますが、キャッシュヒット時の高速パスは変わらず、むしろ破損読み取りによるアドレス 0 へのブランチという致命的なバグを防止します。

関連Issue

#126345

その他

ARM64 の弱いメモリモデル(制御依存関係を跨ぐロード再順序化)と、UpdateCacheEntryAtomically による stlxp/casp による原子更新との間の競合状態を修正。FEAT_LSE2/ARMv8.4以降のハードウェアでは ldp が単一コピー原子性を提供し、それ以前のハードウェアでは cbz ガードで破損読み取りを検出します。


#126318 Add ProcessStartInfo.InheritedHandles to restrict child process handle inheritance

  • 作成者: @Copilot
  • 作成日時: 2026年03月30日 14:58:33(UTC)
  • マージ日時: 2026年04月08日 05:43:37(UTC)
  • ラベル: area-System.Diagnostics.Process

概要

ProcessStartInfo.InheritedHandlesプロパティを追加し、子プロセスへのハンドル継承を制限できる新機能です。Windows/Unix両プラットフォームで、親プロセスから子プロセスに継承されるハンドルを選別して制御できるようになります。セキュリティと情報漏洩のリスク軽減を目的とした公開API追加です。

変更内容

  • ProcessStartInfo.cs: InheritedHandlesプロパティを新規追加(ハンドル集合の管理)
  • SafeProcessHandle.Windows.cs: Windows固有の処理を大幅拡張。ハンドル継承フラグの制御ロジックを実装
  • SafeProcessHandle.Unix.cs: Unix固有の処理を拡張。fork/execの際のハンドル継承管理を実装
  • Interop.CreateProcess.cs: Windows CreateProcess APIの呼び出しに継承ハンドル制御パラメータを追加
  • Interop.ForkAndExecProcess.cs: Unix fork/exec APIの呼び出しに継承ハンドル制御パラメータを追加
  • pal_process.c: ネイティブ層(C)でのハンドル継承制御実装
  • ProcessHandlesTests.cs/ProcessHandlesTests.Windows.cs: 新機能の包括的なテストを追加(計436行)
  • Strings.resx: エラーメッセージリソースを更新

パフォーマンスへの影響

影響なし(管理的な機能追加であり、実行時性能への直接的な影響はありません)

関連Issue

#13943

その他

公開API追加のため、ref/System.Diagnostics.Process.csに定義が反映されています。Windows/Unix両プラットフォームで統一されたAPI仕様を提供し、プラットフォーム固有の実装差異は内部に隠蔽されています。


#125963 Fix intermittent OSX CI failures in StartsWithNoMatch_StringComparison and EndsWithNoMatch_StringComparison

  • 作成者: @Copilot
  • 作成日時: 2026年03月23日 14:30:27(UTC)
  • マージ日時: 2026年04月08日 20:38:03(UTC)
  • ラベル: area-Infrastructure-libraries os-mac-os-x

概要

Apple の NSString compare:options:range:locale: が特定の Unicode 入力(C1 制御文字 \u0080\u009F)に対して非決定的な動作をするため、StartsWithNoMatch_StringComparisonEndsWithNoMatch_StringComparison テストが macOS で間欠的に失敗する問題を修正します。既存の [ActiveIssue] 属性が IsAppleMobile(iOS/tvOS)のみをカバーしていた gap を解決し、macOS にも対応させます。

変更内容

src/libraries/Common/tests/Tests/System/StringTests.cs

  • StartsWithNoMatch_StringComparison: [ActiveIssue(..., IsOSX)] を追加(Issue #108832 参照)。複数の Assert.Equal 呼び出しを foreach ループに統合し、Assert.True(expected == actual, message) で検証。デバッグメッセージに lengthmismatchIndexcomp(StringComparison)、ミスマッチ位置の文字値、期待値・実際の値を含める。
  • EndsWithNoMatch_StringComparison: 同一の根本原因(Apple ネイティブ API)のため同じ修正を適用。同じ [ActiveIssue] 参照とメッセージ形式で一貫性を確保。

診断メッセージ例:

String.StartsWith: length=3, mismatchIndex=1, comp=CurrentCulture, chars=(2,3), expected=True, actual=False
Span.StartsWith:   length=3, mismatchIndex=1, comp=CurrentCulture, chars=(2,3), expected=True, actual=False

パフォーマンスへの影響

影響なし(テストコードの修正のみ)

関連Issue

#108832#112195

その他

  • テストは macOS 環境で [ActiveIssue] により無効化されるため、根本的な Apple ネイティブ API の修正ではなく、既知の問題をスキップする対応。
  • 今後 Apple 側で修正されるまで、テストは保留状態となります。

#125900 [Runtime Async] Support for covariant override of Task- returning base with a Task\<T\>- returning derived method.

  • 作成者: @VSadov
  • 作成日時: 2026年03月22日 00:23:59(UTC)
  • マージ日時: 2026年04月08日 13:40:47(UTC)
  • ラベル: area-VM-coreclr runtime-async

概要

Taskを返すベースメソッドをTask<T>を返すオーバーライドメソッドで共変オーバーライドする場合のサポートを追加するもの。非同期コンテキストでvoidを返すベースとTを返す派生が衝突する問題に対して、Tの結果を無視する特別なvoid返却スロップシンク(return-dropping thunk)を導入し、仮想呼び出しのエラーを解決します。これはIssue #124238に貢献するものです。

変更内容

  • method.hpp/method.cpp: 非同期メソッド変種管理をMatching/Otherから明示的なOrdinary/Asyncルックアップに変更。ReturnDroppingThunkフラグと新しい変種アクセッサを導入。
  • methodtablebuilder.cpp: 共変オーバーライド時に返却スロップしない非同期シンクの3番目の宣言メソッドパスを追加。非同期変種解決ロジックを更新。
  • asyncthunks.cpp: 返却をドロップするシンクIL生成を実装。
  • methodtable.cpp/methodtable.h: GetParallelMethodDescを複数オーバーロード(ノールックアップ/ルックアップ版)に分割。
  • class.cpp: 共変リターン検証中の非同期変種スキップ特別ケースを削除。
  • zapsig.cpp/stubmgr.cpp/runtimehandles.cpp/jitinterface.cpp/genmeth.cpp/memberload.cpp: 変種ルックアップロジックを新しい明示的なルックアップパターンに対応。
  • テスト追加: TaskTask<T>共変オーバーライド動作のリグレッションテストを追加。

パフォーマンスへの影響

影響なし

関連Issue

#124238

その他

  • 実装はTask<T>が単純なベース階層を持つことに依存しており、Task<T>Taskケースを確実に検出可能。
  • この変更はTask<T> → カスタム戻り型のオーバーライドには対応していない(別途の修正が必要)。
  • Copilotレビューで複数の懸念が指摘されています:DAC(Debugging Access Component)におけるGetAsyncOtherVariantNoCreateの未定義参照、ClassifyMethodReturnKindの未初期化アウトパラメータ、デバッガー統合での正確な変種選択の問題など、マージ前の対応が推奨されます。

#125647 [crossgen2] Add --strip-il-bodies option for composite R2R

  • 作成者: @kotlarmilos
  • 作成日時: 2026年03月17日 11:37:00(UTC)
  • マージ日時: 2026年04月08日 12:39:30(UTC)
  • ラベル: area-crossgen2-coreclr

概要

Composite ReadyToRun (R2R) 出力で、正常にコンパイルされたメソッドのILボディを最小限のスタブに置換する --strip-il-bodies オプションをcrossgen2に追加します。IL インタプリタフォールバックが不要なシナリオ(iOS/MacCatalyst等のAppleプラットフォーム)において、アセンブリサイズを削減します。

変更内容

  • Crossgen2 CLI/MSBuild統合: --strip-il-bodies オプションをCrossgen2RootCommand.cs に追加し、Program.cs経由で NodeFactoryOptimizationFlags に接続。Microsoft.NET.CrossGen.targets でApple RID向けに自動適用。
  • コンパイル済みメソッド追跡: ReadyToRunCodegenCompilation.cs でComposite ビルド時にコンパイル済みメソッドセットを構築し、コンポーネント再書き込み処理に渡す。
  • IL本体置換実装: CopiedMethodILNode.cs でコンポーネントアセンブリ再書き込み時に、適格なメソッドのIL本体を最小限のスタブに置換。
  • 定数定義: readytorun.h、ModuleHeaders.h、ReadyToRunConstants.cs でフラグおよび関連定数を追加。
  • ランタイムサポート: readytoruninfo.cpp でストリップされたIL検出ロジックを実装。

パフォーマンスへの影響

アセンブリサイズ削減(具体的な削減率は提供なし)。IL インタプリタフォールバックが必要ないシナリオでのデプロイメントサイズ最適化。ランタイムオーバーヘッドへの記載なし。

関連Issue

#124860

その他

  • 内部実装変更:ReadyToRun コンパイラの IL ボディ処理ロジック(パブリックAPIではなくコンパイラ内部)
  • 互換性への影響:オプトイン機能のため既存コンパイルは影響なし
  • Resources.resx に新規オプションのヘルプテキスト追加

#125226 Support InstructionSet_VectorT in HWIntrinsic importer

  • 作成者: @snickolls-arm
  • 作成日時: 2026年03月05日 16:08:27(UTC)
  • マージ日時: 2026年04月08日 22:42:46(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution arm-sve

概要

SVE(Scalable Vector Extension)対応のVector<T>に対するハードウェア組み込み関数(HWIntrinsic)のサポートを追加します。空の組み込み関数テーブルを作成し、インポート時にこれらの組み込み関数を認識するためのプランビング処理を実装しています。

変更内容

  • compiler.h: 組み込み関数テーブル管理用の構造体を拡張(14行追加、7行削除)
  • hwintrinsic.cpp: 汎用的な組み込み関数インポート処理に対応ロジックを追加(11行追加、2行削除)
  • hwintrinsicarm64.cpp: ARM64固有の組み込み関数処理を更新(15行追加、6行削除)
  • hwintrinsiclistarm64sve.h: SVE向けの空の組み込み関数テーブルを新規作成(8行)
  • importercalls.cpp: メタデータインポート時にSVE対応のVector<T>組み込み関数を認識するロジックを追加(26行追加、3行削除)

パフォーマンスへの影響

影響なし。本変更はインフラストラクチャレベルの実装で、実際の最適化コード生成は将来の追加実装に依存します。

関連Issue

なし

その他

本変更はInstructionSet_VectorTフラグを使用し、ARM64プラットフォームで動作するSVEベースのベクトル処理の基盤を整備するものです。実装の初期段階であり、具体的な組み込み関数の実装は今後のPRで追加される予定と推定されます。


#124266 Re-enable symbol stripping for Apple platforms

  • 作成者: @kotlarmilos
  • 作成日時: 2026年02月11日 12:34:47(UTC)
  • マージ日時: 2026年04月08日 12:50:36(UTC)
  • ラベル: area-crossgen2-coreclr

概要

Apple プラットフォームのシンボルストリッピング(dsymutil処理)を再度有効化するPRです。Apple の事前構築 Swift ランタイムライブラリに含まれる DWARF デバッグ情報が、ビルドマシンにのみ存在する .pcm モジュールキャッシュファイルへの参照を持つことで dsymutil が標準エラー出力を発生させる問題に対応します。これまでの StripSymbols=false というワークアラウンドを削除し、代わりに dsymutil の Exec タスクで IgnoreStandardErrorWarningFormat="true" を設定して、エラーメッセージを無視しつつ非ゼロ終了コードで実際の失敗を検出するよう改善します。

変更内容

  • ILCompiler_publish.csproj, crossgen2_publish.csproj, ilasm.csproj, XUnitLogChecker.csproj: StripSymbols=false 設定を削除
  • Microsoft.NETCore.Native.targets, Microsoft.NET.CrossGen.targets, native-library.targets: dsymutil Exec タスクに IgnoreStandardErrorWarningFormat="true" を追加
  • eng/toolAot.targets: Apple プラットフォーム検出を _IsApplePlatform から PortableOS に変更し、UseNativeAotForComponents 条件を追加して XUnitLogChecker などのコンポーネントにも対応

パフォーマンスへの影響

影響なし

関連Issue

#123687

その他

  • 変更はネイティブAOT(NativeAOT)コンパイラとビルドシステムの内部実装に限定されます
  • Apple プラットフォーム(iOS, macOS, tvOS など)での NativeAOT 公開時のビルド動作に影響します
  • 公開API には影響しません

#119891 Annotate System.Diagnostics.EventLog with Nullable Reference Types

  • 作成者: @RenderMichael
  • 作成日時: 2025年09月19日 12:44:04(UTC)
  • マージ日時: 2026年04月08日 10:29:10(UTC)
  • ラベル: area-System.Diagnostics.EventLog community-contribution

概要

System.Diagnostics.EventLogライブラリにNullable Reference Types (NRT)のアノテーションを追加し、nullability意図を明確に表現することで型安全性を向上させるPRです。パラメータ、戻り値、フィールド、プロパティに対して?アノテーションを追加し、プロジェクトファイルの<Nullable>disable</Nullable>を削除してNRT検査を有効化しました。

変更内容

  • プロジェクトファイル: 3つのプロジェクトファイル(本体、メッセージ、ref)で<Nullable>disable</Nullable>ディレクティブを削除
  • Ref Assembly (ref/System.Diagnostics.EventLog.cs): パブリックAPI署名にnullableアノテーションを追加
  • EventLog関連クラス: EventLog.cs, EventLogInternal.cs, EventLogEntry.csなどに対して、パブリック・内部APIのパラメータ・戻り値・プロパティにnullableアノテーション(?)を追加
  • Reader/Watcher関連: EventLogReader.cs, EventLogWatcher.cs, EventLogConfiguration.csなど、イベントログ読み込みインフラ全般にnullableアノテーション追加
  • フロー解析属性: [NotNullWhen][MemberNotNull][MemberNotNullWhen]属性をメソッドに追加してコンパイラの null状態解析を改善
  • P/Invoke署名: Interopファイルとネイティブメソッド署名にnullableアノテーションを追加
  • ユーティリティ: NetFrameworkUtils.cs内のユーティリティメソッドにnullableアノテーション追加

パフォーマンスへの影響

影響なし

関連Issue

#90400

その他

注記: レビュー過程で、ref assembly内のEventLogSession.ExportLogメソッドがまだnullable(queryパラメータ)として実装されている一方で、ref署名ではnon-nullableとして定義されている不整合が指摘されています。パブリックサーフェスの一貫性のため、ref assemblyのアノテーションを実装に合わせて更新する必要があると指摘されました。


目次