Pull Request on 2026年06月30日

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

注意点

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


目次

  1. #130042 Fix Android NativeAOT JNI string access
  2. #130038 Add GetStressLogMemoryRanges to ISOSDacInterface17
  3. #130037 [browser][coreCLR] Re-enable passing libraries tests on browser+CoreCLR
  4. #130033 Remove NoWarn for NU1511 false positives
  5. #130032 Allow for Job escape when using KillOnParentExit
  6. #130020 Delete CheckDbiVersion and other code and comments about dac-dbi-runtime coupling
  7. #130015 Preserve throw kind across GetThread
  8. #130013 wasm: order funclets in RPO by funclet index
  9. #130009 Disable metadata generic attribute decoder test on MacCatalyst
  10. #130004 Add ActiveIssue to the new self_override_generic test
  11. #130003 JIT: fix asserts in fgRemoveUnreachableTry
  12. #130000 wasm: report the generic context to the GC stack walk
  13. #129999 Fix async resumption stub with byref parameters
  14. #129994 Handle large DiagnosticsIPC ProcessInfo payloads gracefully
  15. #129991 Fix TestNativeDigits for ur-IN on all Apple platforms
  16. #129985 Enable tiering for async versions
  17. #129975 [release/11.0-preview6] Avoid stripping IL of non-async Task-returning methods
  18. #129948 SPMI: per-context tpdiff examples
  19. #129923 Fix race condition in SharedMemoryHelpers.CreateOrOpenFile for named mutexes on Unix
  20. #129901 Handle Synchronized async versions
  21. #129872 Fix Android NativeAOT test crypto JNI export
  22. #129858 [cdac] x86 GCInfo decoder + PromoteCallerStack -> GCRefMap; enforce 0 known issues on windows-x86/x64
  23. #129844 Fix Tizen linking flags used during ILCompiler build
  24. #129616 Update CI failure fixer AWF tooling
  25. #129574 Disable AVX/AVX2 on interpreter-only x64 builds to fix Vector256 NRE
  26. #129570 Add macOS support for StartSuspended via POSIX_SPAWN_START_SUSPENDED
  27. #129490 Fix reflection-based XmlSerializer to support XmlSchemaObject-derived types
  28. #129485 Allow creating H2C connections over HTTP CONNECT proxy tunnels
  29. #129436 [browser][coreclr] Add wasm/CoreCLR libraries tests to outerloop CI
  30. #129259 Avoid socket telemetry errors for pending nonblocking connects
  31. #128979 Escape quotes and backslashes in MailAddress display name when encoding SMTP headers
  32. #128862 Add Process.Start callback overload with WindowsProcessStartArguments and UnixProcessStartArguments
  33. #127164 arm64: Clean up SVE embedded masked codegen

#130042 Fix Android NativeAOT JNI string access

  • 作成者: @sbomer
  • 作成日時: 2026年06月30日 16:41:54(UTC)
  • マージ日時: 2026年06月30日 23:06:07(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

Android NativeAOT環境でJNI GetStringUTFChars の呼び出しが失敗する問題を修正しました。[DisableRuntimeMarshalling] が指定されたテストアセンブリで、out byte パラメータがランタイムマーシャリングを要求し、NativeAOTが marshalling thunk をエミットする際にクラッシュしていました。JNI ABI形式の byte* パラメータに変更し、ローカル isCopy バイト変数のアドレスを渡すことで解決します。

変更内容

  • src/tasks/AndroidAppBuilder/Templates/monodroid-nativeaot.cs
    • JNINativeInterface の GetStringUTFChars 関数ポインタシグネチャを out byte から byte* に変更
    • 呼び出し時に out パラメータの代わりに &isCopy を渡すよう更新

パフォーマンスへの影響

影響なし

関連Issue

#120725

その他

  • 修正対象:Android NativeAOT ランナーテンプレートのJNI相互運用性
  • [DisableRuntimeMarshalling] 属性が指定されたテストアセンブリで、マーシャリング thunk のエミット前にクラッシュしていた問題が解決される
  • System.Net.Http.Functional.Tests での再現を含むテストで動作確認済み

#130038 Add GetStressLogMemoryRanges to ISOSDacInterface17

概要

ISOSDacInterface17にGetStressLogMemoryRangesメソッドを追加し、診断ツールがメモリ内ストレスログのバッキングチャンク(メモリ範囲)を列挙できるようにします。このインターフェースはまだシッピング製品で使用されていないため、破壊的変更として実装されています。メソッドはISOSMemoryEnumを返し、ストレスログのメモリ領域をディスカバリーおよび読み取り可能にします。

変更内容

  • sospriv.idl -- ISOSDacInterface17にGetStressLogMemoryRangesメソッド宣言を追加
  • IStressLog(抽象化層) -- StressLogMemoryRangeレコードとGetStressLogMemoryRangesコントラクトAPIを新規追加
  • StressLogコントラクト実装 -- 既存のStressLogMemory処理済みデータからストレスログチャンクを列挙し、StressLog_1とStressLog_2の両バージョンで対応
  • SOSDacImpl -- ISOSDacInterface17.GetStressLogMemoryRangesを実装し、コントラクト範囲をSOSMemoryRegionエントリに投影;プリコンピュートされた領域配列を受け取るSOSMemoryEnumコンストラクタを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 破壊的変更: ISOSDacInterface17はシッピング製品でまだ使用されていないため、このメソッド追加は互換性上の問題がないと判断されています
  • 実装範囲: 変更は診断インフラストラクチャ(SOS DAC層、cDAC、Legacy SAC)に限定されており、ランタイムコアには影響しません
  • 設計: 既存のストレスログ処理インフラを活用し、新規実装に最小限のコード追加に留めています

#130037 [browser][coreCLR] Re-enable passing libraries tests on browser+CoreCLR

概要

browser + CoreCLR (WASM) 構成で一時的に無効化されていたライブラリテストの一部を、実装及び検証を通じて安定稼働することが確認されたため、再度有効化するPRです。EventSource ActivityTracking、DLR動的言語ランタイム適合性テスト、Environment.ProcessPath、COM Variant マーシャリングに関する計19個のテストが対象です。

変更内容

  • System.Diagnostics.Tracing: ActivityTracking関連の4つのSkip属性を削除
  • System.Dynamic.Runtime: DLR適合性テスト(indexer/genmethod/operator/autoproperty)の9つのSkip属性を削除
  • System.Runtime.Extensions: Environment.ProcessPath_MatchesExpectedValueの1つのSkip属性を削除
  • System.Runtime.InteropServices: COM Variant マーシャリング関連の5つのSkip属性を削除

すべての変更はSkip属性の削除のみで、テストコード自体の修正はありません。

パフォーマンスへの影響

影響なし

関連Issue

#125495(browser + CoreCLRでの複数ライブラリテスト無効化に関する上位Issue)

その他

  • 各テストグループは WasmTestOnChrome シナリオで局所的に実行され、再有効化前に動作確認済み
  • 依然として失敗するテスト(実IUnknown COM ポインタが必要、ファイナライザー依存のGCチェック、ネイティブFS例外など)は引き続き無効化されたままで、#125495で追跡継続中
  • 単一スレッドブラウザ環境での動作が確認されたテストのみの再有効化

#130033 Remove NoWarn for NU1511 false positives

概要

NuGetの上流issue修正に伴い、NU1511警告の誤検知抑制を削除しました。また、正当なNU1511抑制のコメントを統一し、.NET 11でベース共有フレームワークに移行されたアセンブリについて、P2P参照を.NETFrameworkのみに変更することで、一部の抑制を削除しました。

変更内容

  • 複数の.csprojファイル: NU1511警告抑制(<NoWarn>)を削除
    • インストーラテスト関連: AppHost.Bundle.Tests、HostActivation.Tests、Microsoft.DotNet.CoreSetup.Packaging.Tests、Microsoft.NET.HostModel.Tests、TestUtils(各3行削除)
    • ライブラリテスト関連: Microsoft.Extensions.DependencyInjection.Tests、Microsoft.Extensions.Hosting.Abstractions.Tests、Microsoft.Extensions.Logging.Tests、System.Diagnostics.DiagnosticSource関連テスト、System.Threading.AccessControl.Tests
  • コメント統一: 残存するNU1511抑制について、統一されたコメントテキストを適用
  • P2P参照の条件付け: 一部アセンブリの参照を.NETFramework環境のみに限定

パフォーマンスへの影響

影響なし

関連Issue

#130033

その他

このPRはNuGetツールチェーン側での修正に依存しており、アップストリームのNuGet issueが既に解決されていることが前提です。NU1511は「アセンブリバージョンの不一致」警告で、誤検知の削除により、プロジェクトファイルがより簡潔になります。


#130032 Allow for Job escape when using KillOnParentExit

概要

Windows プラットフォームで ProcessStartInfo.KillOnParentExit 使用時に、子プロセスが親プロセスから独立した子孫プロセス(breakaway descendants)を作成できるようにするため、Job Object の設定を更新しました。JOB_OBJECT_LIMIT_BREAKAWAY_OK フラグを有効化することで、子プロセスは CREATE_BREAKAWAY_FROM_JOB フラグで親のジョブ制御から逃れることが可能になります。

変更内容

  • SafeProcessHandle.Windows.cs: KillOnParentExit 時に設定される Job Object のリミットフラグに JOB_OBJECT_LIMIT_BREAKAWAY_OK を追加
  • Interop.JobObjects.cs: Windows interop 定数 JOB_OBJECT_LIMIT_BREAKAWAY_OK を新規追加
  • Interop.CreateProcess.cs: Windows interop 定数 CREATE_BREAKAWAY_FROM_JOB を新規追加
  • ProcessHandlesTests.Windows.cs: RemoteExecutor を用いて、KillOnParentExit=true/false 両パターンで breakaway 子プロセスを生成するテストを追加(79行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更は内部実装(interop 定数の追加と Job Object フラグの設定)の更新であり、公開APIに対する破壊的変更はありません。Windows 専用の機能拡張です。


#130020 Delete CheckDbiVersion and other code and comments about dac-dbi-runtime coupling

  • 作成者: @rcj1
  • 作成日時: 2026年06月30日 05:18:28(UTC)
  • マージ日時: 2026年06月30日 14:15:22(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

DAC/DBI(Debugger Access Component/Debugging Interface)間のバージョンチェックに関連する不要なコードを削除するPRです。CheckDbiVersionエントリポイントとDbiVersion構造体、および関連する大規模なコメントブロックを削除し、DAC/DBI インターフェースを簡潔にします。

変更内容

  • マネージド層:IDacDbiInterface.csからDbiVersionとCheckDbiVersionを削除、DacDbiImpl.csからCheckDbiVersionラッパーを削除
  • ネイティブ層:dacdbi.idlからCheckDbiVersionメソッドとDbiVersion前方宣言を削除
  • ヘッダー/実装:dacdbistructures.hからDbiVersion構造体を削除、dacdbiinterface.hからCheckDbiVersionメソッド宣言を削除
  • DAC実装:dacdbiimpl.hとdacdbiimpl.cppからCheckDbiVersion実装を削除、dacimpl.hからVerifyDlls宣言を削除
  • デバッガー:process.cppから約96行の#DBIVersionCheckingに関するコメントブロックを削除、daccess.cppからVerifyDlls呼び出しと実装を削除

パフォーマンスへの影響

影響なし(デッドコード削除によるわずかなバイナリサイズ削減のみ)

関連Issue

なし

その他

この変更は公開APIの削除ではなく、内部的なDAC/DBI通信メカニズムから不要なバージョンチェック機能を削除するもので、互換性への影響はありません。


#130015 Preserve throw kind across GetThread

概要

Native AOTのランタイムにおいて、例外処理時にGetThread呼び出し後もthrow kind情報を保持するよう修正しました。例外ハンドリングのアーキテクチャ固有実装(amd64、arm64、loongarch64、riscv64)において、スタックレジスタの状態を適切に管理する変更です。

変更内容

  • src/coreclr/nativeaot/Runtime/amd64/ExceptionHandling.S: GetThread呼び出し前後のthrow kind保持処理を修正
  • src/coreclr/nativeaot/Runtime/arm64/ExceptionHandling.S: 同様にthrow kind情報の保存・復元処理を修正
  • src/coreclr/nativeaot/Runtime/loongarch64/ExceptionHandling.S: LoongArch64アーキテクチャでのthrow kind保持を修正
  • src/coreclr/nativeaot/Runtime/riscv64/ExceptionHandling.S: RISC-Vアーキテクチャでのthrow kind保持を修正

各ファイルで2行追加、1行削除(合計3行の変更)の軽微な修正です。

パフォーマンスへの影響

影響なし

関連Issue

#129792

その他

  • Native AOT ランタイムの内部実装変更です
  • 複数のアーキテクチャにおいて同一の修正パターンが適用されています
  • アセンブリレベルの低レベル例外ハンドリングコードの修正です

#130013 wasm: order funclets in RPO by funclet index

概要

WebAssembly JITにおいて、逆ポストオーダー(RPO)/プリオーダーの計算結果がfunclet生成順序と一致するよう制御フロー構造を調整します。これにより、インターバル/カーソルインデックスと物理ブロック走査間の不一致が減少します。

変更内容

  • src/coreclr/jit/fgwasm.cpp: DFS funclet エントリブロックを降順funclet インデックスでソート(逆ポストオーダーが増加するfuncletインデックスを生成)し、wasm ブロック再順序化後に物理Blocks()順序と割り当てられたbbPreorderNumの一致を検証するDEBUG専用チェックを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

内部実装の改善であり、公開APIへの影響はありません。主にWebAssembly codegen時のブロック順序化のロジック最適化です。


#130009 Disable metadata generic attribute decoder test on MacCatalyst

概要

MacCatalyst上でTestCustomAttributeDecoderGenericUsingReflectionテストが失敗する問題に対応したものです。モバイル固有のリフレクション列挙型解決動作により失敗が発生するため、既存のiOS/tvOS向けプラットフォームスキップをMacCatalystにも拡張しています。

変更内容

  • src/libraries/System.Reflection.Metadata/tests/Metadata/Decoding/CustomAttributeDecoderTests.cs
    • TestCustomAttributeDecoderGenericUsingReflectionのActiveIssue属性を更新
    • プラットフォームフラグにiOS/tvOSに加えてMacCatalystを追加(TestPlatforms.MacCatalystを結合)

パフォーマンスへの影響

影響なし

関連Issue

#60579

その他

  • テスト機能自体の変更ではなく、MacCatalystプラットフォームでのスキップ対象外とするテスト運用の調整です。
  • Apple系モバイルプラットフォーム(iOS、tvOS、MacCatalyst)での共通の反射動作の問題に対する一貫した対応です。

#130004 Add ActiveIssue to the new self_override_generic test

概要

テストに ActiveIssue 属性を追加する修正。self_override_generic テストに新たに ActiveIssue を追加し、self_override5.il テストの既存の ActiveIssue を更新する。

変更内容

  • src/tests/Loader/classloader/MethodImpl/Desktop/self_override_generic.il: ActiveIssue 属性を新規追加(3行追加)
  • src/tests/Loader/classloader/MethodImpl/Desktop/self_override5.il: ActiveIssue 属性を更新(1行変更)

パフォーマンスへの影響

影響なし

関連Issue

#123248(バッチ更新で誤った処理を修正)

その他

なし


#130003 JIT: fix asserts in fgRemoveUnreachableTry

概要

JIT コンパイラの fgRemoveUnreachableTry メソッドにおいて、到達不可能な領域に囲まれた到達可能に見える領域が正しく削除されないバグを修正しました。ブロック削除時に領域の終端を一貫して更新することで、アサーション失敗を解決します。

変更内容

  • src/coreclr/jit/fgehopt.cpp: fgRemoveUnreachableTry の領域削除ロジックを修正。ブロック削除時の領域終端更新を改善し、55行の変更を加えました。
  • src/coreclr/jit/fgbasic.cpp: fgRemoveBlock メソッドで領域終端の更新処理を追加(4行追加)。
  • 回帰テスト: 3 つの新しい回帰テストケース(Runtime_129970, 129971, 129972)を追加し、修正の検証を実施。

パフォーマンスへの影響

影響なし

関連Issue

#129970、#129971、#129972

その他

この修正は JIT コンパイラの内部実装(フロー グラフ最適化)に関するもので、公開 API には影響しません。到達不可能コード削除時のアサーション失敗や誤った最適化を防ぐための修正です。


#130000 wasm: report the generic context to the GC stack walk

概要

WebAssembly上でのGCスタックウォーク時にジェネリックコンテキスト引数を確実に追跡できるようにするため、プロローグでジェネリックコンテキストをGC報告可能フレームスロットにスピルし、TransitionFrameのレジスタ情報表示でフレームポインタを適切に設定します。

変更内容

  • src/coreclr/jit/codegencommon.cpp: WASM上でもgenReportGenericContextArgが呼び出されるようにWASM除外条件を削除
  • src/coreclr/jit/codegenwasm.cpp: WASM向けにCodeGen::genReportGenericContextArgを実装し、プロローグ生成時にジェネリックコンテキストをlvaCachedGenericContextArgOffset()にスピル
  • src/coreclr/vm/wasm/helpers.cpp: TransitionFrame::UpdateRegDisplay_Implでスタックポインタからフレームポインタを復元しInterpreterFPを設定

パフォーマンスへの影響

影響なし

関連Issue

#130000

その他

WASM上のGC処理における内部実装の改善であり、公開APIへの影響はありません。ジェネリックコンテキスト引数がGCスタックウォーク中に確実に定位置から検出されるようになることで、WASM環境でのガベージコレクション信頼性が向上します。


#129999 Fix async resumption stub with byref parameters

  • 作成者: @jakobbotsch
  • 作成日時: 2026年06月29日 20:18:10(UTC)
  • マージ日時: 2026年06月30日 07:28:25(UTC)
  • ラベル: area-VM-coreclr

概要

async resumption stubでbyrefパラメータを使用する場合、無効なIL(initobjでbyref localを初期化)が生成される問題を修正。byref引数に対して直接null管理ポインタを読み込む方式に変更し、回避パターンをテストケースに追加することで、resumption stub作成パスを確実に検証するようにしました。

関連Issue: #129990

変更内容

  • AsyncResumptionStub.cs: byref パラメータ初期化時に initobj の代わりに ldc.0; conv.u でnull管理ポインタを直接ロードするIL生成ロジックに変更
  • jitinterface.cpp: CEEJitInfo::getAsyncResumptionStubでbyref localに対する無効なIL生成を防止
  • byref-param.cs: suspension を強制し、inliningを防止するテストケースを追加。Taskを返す関数からTask<T>を返すシナリオで確実にresumption stubが作成されることを検証

パフォーマンスへの影響

影響なし

関連Issue

#129990

その他

本修正はASP.NETの検証ジェネレータケースにも対応。Taskを返す関数からTask<VerifyResult>を返すシナリオでは、suspension pointとresumption stubが必須となるため重要な修正です。


#129994 Handle large DiagnosticsIPC ProcessInfo payloads gracefully

概要

診断IPC(InterProcess Communication)メッセージ構築時に、大規模なPayloadによるサイレント切り詰めを防止するための変更です。Payloadサイズをより広い型(size_t)で計算し、ヘッダ+Payload合計がuint16_tメッセージサイズフィールドの範囲(最大65535バイト)を超える場合は失敗を返すようにしました。ProcessInfo/ProcessInfo2/ProcessInfo3、env-info、generate-core-dump応答Payloadのサイズ計算をbool戻り値+uint16_t出力パラメータのシグネチャに変更し、オーバーフロー時に明示的にエラーハンドリングしています。

変更内容

  • ds-protocol.h: ds_ipc_payload_size_try_narrowヘルパー関数を追加。Payloadサイズをuint16_t範囲に適合するか検証・変換
  • ds-protocol.c: ipc_message_flattenでメッセージ全体の長さをsize_tで計算し、UINT16_MAXを超える場合はエラー返却
  • ds-process-protocol.c: ProcessInfo/EnvInfo Payloadサイズ計算関数をbool+out uint16_tシグネチャに変更し、新しいヘルパー関数を活用
  • ds-dump-protocol.c: GenerateCoreDump応答のPayloadサイズ計算をbool+out uint16_tシグネチャに変更し、オーバーフロー時に処理を短絡

パフォーマンスへの影響

影響なし。既存の計算ロジックをより安全な方式に置き換えるもので、パフォーマンス低下はありません。

関連Issue

#129994

その他

本変更はランタイムの内部実装(EventPipe診断IPC)に関するもので、公開APIへの影響はありません。診断ツールが大規模メモリを持つプロセスに対して診断情報を取得する際の信頼性が向上します。


#129991 Fix TestNativeDigits for ur-IN on all Apple platforms

概要

Apple プラットフォーム上で ur-IN カルチャーの TestNativeDigits テストが失敗する問題を修正します。Apple の ICU が CLDR 仕様の拡張アラビア数字(U+06F0-U+06F9)ではなくラテン数字(0-9)を返すため、テスト期待値をすべての Apple プラットフォーム(macOS、iOS、tvOS、MacCatalyst)で統一的に調整します。

変更内容

  • src/libraries/System.Runtime/tests/System.Globalization.Tests/NumberFormatInfo/NumberFormatInfoTests.cs
    • ur-IN カルチャーのネイティブ数字の期待値ガード条件を IsApplePlatform26OrLater から IsApplePlatform に変更
    • テスト内コメントを更新し、この動作が macOS 26+ に限定されるのではなく、すべての Apple プラットフォームで発生することを反映

パフォーマンスへの影響

影響なし

関連Issue

#125933 #125934

その他

  • 本修正は xunit v3 アサート upgrade 後に実行されるようになったテストの失敗に対応するものです
  • 前回の修正(#125934)では macOS 26 以上に限定されていましたが、この問題は macOS 15(x64)および iOS/tvOS/MacCatalyst(OSVersion.Major ≈18)でも発生するため、プラットフォーム全体での対応が必要でした

#129985 Enable tiering for async versions

概要

CoreCLRのティアード・コンパイル(Tiered Compilation)の対象条件を緩和し、ランタイム非同期メソッド(async version methods)がティアリングに参加可能にしました。これにより、ティアード PGO の候補となります。一方、サポートされていないラッパー・スンク非同期メソッドは除外されたままです。

変更内容

  • src/coreclr/vm/method.cpp: ティアリング除外ルールを更新。SupportsAsyncVersionCodegen() をサポートする非同期スンク メソッドをティアリング対象として許可するよう条件を緩和しました(+2/-2)。

パフォーマンスへの影響

ティアリング対象の拡大により、ランタイム非同期メソッドがティアード PGO の候補となるため、長期実行アプリケーションにおいて非同期メソッドの実行性能が向上する可能性があります。具体的なベンチマーク結果は提供されていません。

関連Issue

#115096

その他

  • 変更は CoreCLR コンパイラ(内部実装)に限定されます。
  • コメント文の更新も含まれていますが、レビュー時に文言をより正確にする指摘があります。

#129975 [release/11.0-preview6] Avoid stripping IL of non-async Task-returning methods

概要

Crossgen2で非async Task/ValueTask戻り値メソッドのILが不正に削除され、ランタイム非同期が有効な場合に実行時エラーが発生する問題を修正しました。該当メソッドのIL削除を防止し、NullReferenceExceptionの発生を回避します。

変更内容

  • src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/CopiedMethodILNode.cs
    • 非async Task戻り値メソッドのIL削除ロジックを修正
    • IL削除の判定ロジックに19行追加、2行削除(計21行)

パフォーマンスへの影響

該当メソッドのILを保持するため、メモリ使用量がわずかに増加する可能性があります。ただし、回帰を修正する必要最小限の対応のため、影響は限定的と考えられます。

関連Issue

#129813、#128384

その他

  • リスク評価:低い。非async Task戻り値メソッドのIL削除を単純に無効化する対応です
  • リグレッション:#128384で導入された回帰で、ランタイム非同期を有効にした際にユーザーILに依存するようになったことが原因
  • これはrelease/11.0-preview6へのバックポート対応です

#129948 SPMI: per-context tpdiff examples

概要

SuperPMI tpdiff マークダウン要約に、メソッドごとの回帰/改善例を追加するコマンドラインツール変更です。既存の詳細CSV内のコンテキストごとのスループット差分データを集約し、PDIFF%でランク付けされたFullOpts/MinOpts別トップNテーブルを出力します。Release JITがMethodFullNameを報告しない場合は、SPMI コンテキスト番号をフォールバック参照用に表示し、mcs -dumpMapやsuperpmi -c Nで詳細を確認可能にします。

変更内容

  • src/coreclr/scripts/superpmi.py: aggregate_diff_metrics()を拡張して、コンテキストごとのスループット差分(ベースvs差分の命令数)を収集し、呼び出し元に返すようにしました。
  • replay_with_throughput_diff()とマークダウン要約生成へのコンテキストごとのスループット差分データの配線を追加。
  • PDIFF%でランク付けされたコンテキストごとの回帰/改善トップN(FullOpts/MinOpts別)をリストする新しいマークダウンセクションを追加。
  • 古い3タプルJSON要約との後方互換性のため、マークダウンライターを更新。

パフォーマンスへの影響

影響なし(分析ツール機能の改善で、実行時パフォーマンスへの直接的な影響はありません)。

関連Issue

#85755

その他

なし


#129923 Fix race condition in SharedMemoryHelpers.CreateOrOpenFile for named mutexes on Unix

  • 作成者: @Copilot
  • 作成日時: 2026年06月27日 06:02:56(UTC)
  • マージ日時: 2026年06月30日 15:34:33(UTC)
  • ラベル: area-System.Threading

概要

Unix上の名前付きミューテックス作成時における競合状態を修正します。複数プロセスが同時に同じ名前のミューテックスを作成しようとした場合、O_RDWRでENOENTが返されてもO_CREAT|O_EXCLでEEXISTエラーになる TOCTOU(Time-of-check-time-of-use)ウィンドウが存在し、ハンドルされないIOExceptionが発生していました。EnsureDirectoryExistsで既に使用されている再試行パターンをミラーリングすることで対応します。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/IO/SharedMemoryManager.Unix.cs: SharedMemoryHelpers.CreateOrOpenFileメソッドに再試行ループを追加。O_CREAT|O_EXCLがEEXISTエラーで失敗した場合、例外をスローする代わりに既存ファイルを開くように再試行します。
  • src/libraries/System.Threading/tests/MutexTests.cs: 競合状態をテストする新しいテストケース(76行追加)を追加。

パフォーマンスへの影響

影響なし。修正は例外的な競合シナリオでのみ再試行ロジックを発動させるため、通常のシングルプロセス利用やレアケースの競合シナリオでのパフォーマンス低下は最小限です。

関連Issue

#91987

その他

この修正はUnix環境での名前付きミューテックスの信頼性向上に関わるもので、内部実装(System.Private.CoreLib)の変更です。破壊的変更ではなく、既存の例外をより適切に処理する改善となります。


#129901 Handle Synchronized async versions

概要

MethodImplOptions.Synchronizedで修飾された非asyncメソッドがTask/ValueTaskを返す場合のランタイム非同期バージョン処理に対応しました。JITとインタプリタの両方で、モニタロック解放のタイミングを正しく制御し、テールコール最適化を禁止することで、awaitの前にロックが確実に解放されるようにしています。

変更内容

  • JIT (importer.cpp): 同期化メソッドではテール・アウェイト認識を回避し、戻り値をawaitでラップする前に明示的なMON_EXITを発行
  • JIT (flowgraph.cpp): 非同期バージョンに対する通常の同期化リターンMON_EXITブロック挿入を回避し、lvaMonAcquired割り当てを冪等にする
  • インタプリタ (compiler.h/cpp): 同期化/非同期リターン値の一時変数作成を中央化し、非同期バージョンのリターンラッピング/テールコール処理を調整
  • テスト: TaskとValueTaskの両方をカバーする同期化非asyncメソッドの回帰テストを追加

パフォーマンスへの影響

影響なし(ロック解放タイミングの正確化であり、パフォーマンス特性に変化なし)

関連Issue

なし

その他

この変更は内部実装(JIT/インタプリタ)の修正であり、公開APIに対する破壊的変更はありません。同期化メソッドでTask/ValueTaskを返すシナリオにおけるスレッドセーフティ保証を強化するための修正です。


#129872 Fix Android NativeAOT test crypto JNI export

  • 作成者: @sbomer
  • 作成日時: 2026年06月25日 22:49:40(UTC)
  • マージ日時: 2026年06月30日 16:32:34(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

Android NativeAOT テスト APK のパッケージング設定を修正し、暗号信頼マネージャーの JNI コールバック シンボル Java_net_dot_android_crypto_DotnetProxyTrustManager_verifyRemoteCertificate が最終的な共有ライブラリに確実に保持・エクスポートされるようにします。これにより、以前除外されていた System.Net.Requests.Tests と System.Net.WebSockets.Client.Tests のテストが再度有効化されます。

変更内容

  • eng/testing/tests.android.targets: NativeAOT リンカー引数(IlcArg)を追加し、暗号 JNI 信頼マネージャー コールバックがテスト APK で保持・エクスポートされるようにします。
  • src/libraries/tests.proj: Android NativeAOT テスト除外設定から System.Net.Requests.Tests と System.Net.WebSockets.Client.Tests を削除します。

パフォーマンスへの影響

影響なし

関連Issue

#120959

その他

この変更はランタイム テスト APK パッケージング専用であり、顧客向け Android NativeAOT アプリケーションの本来の修正は dotnet/android リポジトリの NativeAOT パッケージング/リンク パスに実装されています。


#129858 [cdac] x86 GCInfo decoder + PromoteCallerStack -> GCRefMap; enforce 0 known issues on windows-x86/x64

概要

x86 GCInfo デコーダーの cDAC 実装と、GcScanner.PromoteCallerStack の ICallingConvention.TryComputeArgGCRefMapBlob への書き換えを実施し、Windows x86/x64 での既知の問題をゼロに厳格化するPRです。変更後、x86 cDAC スタックウォーキングはランタイムと同等の機能を実現し、cdacstress GCREFS スイートで 4798/4798 パス(既知の問題なし)を達成しています。

変更内容

  • x86 GCInfo デコーダー実装(28 commits)

    • EnumerateLiveSlots と GetInterruptibleRanges を x86 に実装
    • レガシー InfoHdr バイトストリーム処理と per-offset Transitions の処理
    • 複数の正確性修正:0xFB huge-encoding コードデルタ累積対応、ESP フレーム untracked/VarPtr スロット処理、ApplyPointerTransition の非ポインタプッシュ対応など
  • GcScanner.PromoteCallerStack 書き換え(2 commits)

    • RecordDeferredFrame スタブを実装に置き換え、ICallingConvention.TryComputeArgGCRefMapBlob を使用して GCRefMap blob を合成
    • R2R ベースの PromoteCallerStackUsingGCRefMap と同じトークン反復ループを実行
    • 非 Windows・非 x86/x64 ターゲット、または blob 合成失敗時には RecordDeferredFrame にフォールバック
    • GCRefMapDecoder(byte[]) コンストラクタ追加で合成 blob をデコード可能に
    • X86FrameHandler.HandleTransitionFrame オーバーライドで x86 の cbStackPop を復元
  • ストレステスト框組みの強化

    • x86 テストスキップ条件を削除(x86 GCInfo デコード対応により)
    • Windows x86/x64 で results.KnownIssues > 0 時にテスト失敗を強制
    • 複数のデバッギー追加(VarArgs、StructScenarios、CrossModule、CallSignatures)
    • [GC_STATS] / [ARG_STATS] の統計情報出力対応

パフォーマンスへの影響

影響なし(機能実装と既存機能の有効化が主体)

関連Issue

#126359

その他

  • 内部実装(cDAC ランタイム側)の機能拡張であり、公開 API の変更はなし
  • 破壊的変更なし
  • 28 個のコミットは個別に意味を持ち、bisect に対応
  • ARGITER ストレステストは Windows x86/x64 に限定(main と同様)
  • GitHub Copilot の支援で作成
  • cDAC スタックウォーキングが x86 で完全にランタイムと機能パリティを達成

#129844 Fix Tizen linking flags used during ILCompiler build

概要

Tizen プラットフォーム向けの NativeAOT ビルド時に、toolchain.cmake で設定されるプラットフォーム固有のリンカーフラグが反映されていない問題を修正します。SetupOSSpecificProps で Tizen 固有の設定を考慮するようにしました。

変更内容

  • src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Unix.targets: Tizen プラットフォーム向けのリンカーフラグ設定を追加(13行追加)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正は NativeAOT コンパイラの内部ビルド統合に関する変更です。Tizen プラットフォーム固有のリンク設定が適切に適用されるようになり、ビルドの正確性が向上します。


#129616 Update CI failure fixer AWF tooling

概要

CI Outer-Loop Failure Fixer のワークフローで使用される gh-aw-firewall ツーリングを 0.25.40 から 0.27.7 に更新するもの。新しいバージョンでは Squid プロキシの起動パスに改善が含まれており、sandbox/proxy の起動時の安定性が向上する。ワークフロー定義本体は変更されず、生成されたロックファイルのツーリングバージョンとイメージダイジェストのみが更新される。

変更内容

  • .github/workflows/ci-failure-fix.lock.yml、ci-failure-scan.lock.yml、ci-failure-scan-feedback.lock.yml の 3 ファイルで gh-aw-firewall のバージョン参照を 0.25.40 から 0.27.7 に更新
  • ghcr.io/github/gh-aw-firewall/{agent,api-proxy,squid} イメージのタグとダイジェストを 0.27.7 に更新
  • AWF config スキーマ URL と GH_AW_INFO_AWF_VERSION メタデータを更新

パフォーマンスへの影響

影響なし。この変更は CI/CD ツーリングの安定性向上を目的としており、ランタイムパフォーマンスの数値的な改善ではなく、Squid sandbox の起動信頼性を改善するもの。

関連Issue

なし

その他

  • 変更は意図的に狭い範囲に限定されており、ロックファイルのバージョン・ダイジェスト更新のみに留められている
  • 検証済み:0.25.40 への全参照が削除され、0.27.7 のダイジェストが公式リリースマニフェストと一致することを確認
  • git diff --check パスを確認
  • Windows 環境での gh aw compile/gh aw lint は実行されていない(ただし検証は最小限の変更でカバー)

#129574 Disable AVX/AVX2 on interpreter-only x64 builds to fix Vector256 NRE

概要

インタープリタ専用のx64ビルド(Apple mobileなど)において、Vector256<T>を使用するコードがVector256.get_IsHardwareAccelerated()でNullReferenceExceptionをスローする問題を修正します。インタープリタ専用モードでAVXを無効化することで、ReadyToRun(R2R)のx86-64-v2ベースラインと実行時に報告されるISA(命令セット)の一貫性を保ち、不正なコードパス選択を防ぎます。

変更内容

  • src/coreclr/vm/codeman.cpp: EEJitManager::SetCpuInfo()内で、FEATURE_INTERPRETER有効時かつインタープリタ専用の場合、x86/x64上でInstructionSet_AVXをクリアします。既存のISA依存性の正規化メカニズム(EnsureValidInstructionSetSupport)により、AVX2、AVX512などの従属ISAが自動的にカスケード削除されます。

パフォーマンスへの影響

影響なし。本修正はインタープリタ専用ビルドにおいて、不正なコードパス選択による実行時エラーを防ぐもので、パフォーマンス改善ではなく正確性(correctness)の修正です。

関連Issue

#129574、#129012、dotnet/macios#25734

その他

本修正は#129012のフォローアップであり、Vector<T>の上限設定と同じinterpreterOnlyフラグを使用しています。R2R基盤がx86-64-v2(AVX/AVX2非対応)のターゲットでは、SetCpuInfo()がホストCPUからAVXを有効化することで、CHECK_InstructionSetSupport AVX2-の修正が失敗し、ランタイムが不正な256ビットパスを実行することが原因でした。


#129570 Add macOS support for StartSuspended via POSIX_SPAWN_START_SUSPENDED

概要

macOSでProcessStartInfo.StartSuspendedとSafeProcessHandle.Resume()のサポートを追加しました。macOS 10.5以降で利用可能なPOSIX_SPAWN_START_SUSPENDEDフラグを使用してプロセスを中断状態で起動し、SIGCONTシグナルで再開できるようになりました。

var process = new Process
{
    StartInfo = new ProcessStartInfo("/usr/bin/app") { StartSuspended = true }
};
using var handle = SafeProcessHandle.Start(process.StartInfo);
// プロセスは中断状態...
handle.Resume(); // macOSではSIGCONTを送信

変更内容

  • API サーフェス: StartSuspendedとResume()に[SupportedOSPlatform("macos")]属性を追加
  • マネージド↔ネイティブ相互運用: Interop.Sys.ForkAndExecProcessがシグネチャを変更し、個別のbool値ではなくProcessStartInfoを直接受け入れるように修正
  • ネイティブ(pal_process.c): macOSのposix_spawnパスでstartSuspended=true時にPOSIX_SPAWN_START_SUSPENDEDフラグを設定。fork()パスではENOTSUPを返して、サイレント動作差異を防止
  • ネイティブ(pal_process_wasi.c): WASIスタブにstartSuspendedパラメータを追加
  • Unix上の再開: ResumeCoreがSignalCore(PosixSignal.SIGCONT)を呼び出し。共有Resume()は非対応OS上でPlatformNotSupportedExceptionをスロー。複数呼び出しの制限を廃止し、OS エラーを直接Win32Exceptionとして表出
  • バリデーション: ProcessStartInfo.Validate()で非Windows/非macOS上のStartSuspended=true時にPlatformNotSupportedExceptionをスロー。対応OS上のUseShellExecute非互換時はInvalidOperationExceptionをスロー
  • XML ドキュメント: Resume()の「1回のみ呼び出し可能」制限を削除し、プラットフォーム別の動作を文書化
  • テスト: StartSuspendedTestsをWindows・macOSの両方で実行するよう拡張。Resume_OnNonSuspendedProcessテストはWindows限定となり、OSからのWin32Exceptionを期待

パフォーマンスへの影響

影響なし

関連Issue

#94127

その他

  • 破壊的変更なし: 既存APIの動作は変わらず、macOS向けのプラットフォーム固有サポート追加
  • 互換性: Resume()の複数呼び出し制限廃止により、前のドキュメント記載の制限は削除された
  • レビュアー指摘: Copilotが、macOSでの「Resume二重呼び出し」エラーケースのテストカバレッジ追加を検討する価値があると指摘

#129490 Fix reflection-based XmlSerializer to support XmlSchemaObject-derived types

概要

XmlSchemaObjectから派生した型の逆シリアル化に対応するため、リフレクションベースのXmlSerializerの2つの関連バグを修正。

  1. WriteLiteralStructMethodがXmlSchemaObject派生型でNotImplementedExceptionをスローしていた問題を、DecodeName = falseの設定で解決(スキーマ名のコロン含有問題を防止)
  2. メンバーフラッシュループが読み取り専用コレクションプロパティ(XmlSchemaElement.Constraintsなど)に対してSetValueを呼び出し、ArgumentExceptionをスローしていた問題を、セッターなしプロパティを検出して既存コレクションインスタンスに直接アイテムを追加する処理で解決

変更内容

  • ReflectionXmlSerializationReader.cs: WriteLiteralStructMethodでDecodeName設定を追加、読み取り専用コレクションプロパティの処理を改善(AddObjectsIntoTargetCollectionを使用)
  • XmlSerializerTests.Internal.cs: 既存テスト35行を削除
  • XmlSerializerTests.RuntimeOnly.cs: XmlSchemaObjectベースの型の逆シリアル化テスト75行を追加

パフォーマンスへの影響

影響なし

関連Issue

#1399

その他

なし


#129485 Allow creating H2C connections over HTTP CONNECT proxy tunnels

  • 作成者: @MihaZupan
  • 作成日時: 2026年06月16日 22:50:37(UTC)
  • マージ日時: 2026年06月30日 21:25:58(UTC)
  • ラベル: area-System.Net.Http

概要

HTTP CONNECTプロキシトンネル経由でH2C(クリアテキストHTTP/2)接続を作成できるようにする変更です。これにより、HTTPプロキシ経由のHTTP/2通信でHTTP/1.1へのフォールバックを回避し、HTTP/2のパフォーマンス利点を活かせるようになります。WebSocketのプロキシトンネル対応と同様のメカニズムを適用しています。

変更内容

  • HttpConnectionPoolManager.cs: クリアテキストHTTP/2をHTTP(S)プロキシ経由で送信する場合、接続キーの選択ロジックを調整してCONNECT トンネリングを使用するように変更
  • HttpConnectionPool.cs/Http2.cs: ProxyTunnel接続タイプに対してHTTP/2プーリングを有効化(コンストラクタのswitch文とデバッグ不変量を更新)
  • HttpConnectionKind.cs: enum コメントを更新し、HTTP/1.1のプロキシフォワーディングとCONNECT トンネリング(H2C含む)の使い分けを明確化
  • SocketsHttpHandlerTest.cs: HTTPS および クリアテキストHTTP/2プロキシシナリオにおけるCONNECT トンネリング動作の機能テストを追加

パフォーマンスへの影響

影響なし(互換性維持変更)。ただし、クリアテキストHTTP/2プロキシ通信がCONNECT トンネル経由で確立されることで、HTTP/1.1へのフォールバック回避による多重化利点が得られます。

関連Issue

#99689

その他

  • 公開APIの変更なし(内部実装の改善)
  • 既存の非セキュアWebSocket プロキシトンネル対応と同様のアーキテクチャを踏襲
  • 後方互換性を保持

#129436 [browser][coreclr] Add wasm/CoreCLR libraries tests to outerloop CI

概要

Browser + CoreCLRの単一スレッドwasm環境におけるouterloop CI実行を整備するため、遅いライブラリテストスイートをCI実行可能にするパイプライン構成・タイムアウト管理・テストゲーティングを追加します。従来はouterloopパイプラインでwasm/CoreCLRの実行カバレッジがなく、今回新規に「slow tests([OuterLoop])を含む約200スイート、657k以上のテスト」を実行可能にしました。innerloop動作は変更されません。

変更内容

CI パイプラインレイヤー:

  • eng/pipelines/libraries/outerloop.yml: WasmTestOnChrome(Release、/maxcpucount:1、600分タイムアウト)のwasm/CoreCLR outerloopジョブを追加
  • eng/testing/tests.wasm.targets: outerloop/all向けxharnessスイートタイムアウトを4時間に延長(innerloopは1.5/0.5時間)
  • src/libraries/sendtohelixhelp.proj: outerloop/all向け非バッチ作業項目タイムアウトを4時間30分に延長

テストスケジューリング最適化:

  • src/libraries/tests.proj: 長時間実行スイート(System.Linq、System.Memory、System.Private.Uri、System.Private.Xml、System.Runtime.Numerics、System.Text.Json)をRunLongRunningWasmTestsプロパティで条件付きで有効化
  • src/libraries/sendtohelix-browser.targets: SoloItemsメカニズムで遅いスイートを個別Helixバッチに隔離
  • src/tasks/HelixTestTasks/GroupWorkItems.cs, ComputeBatchTimeout.cs: バッチタイムアウト計算をパラメータ化(MinutesPerSuite/MinimumMinutes/MaximumMinutes)

テストゲーティング:

  • マルチスレッド不可/64ビット必須のテスト(System.Threading.Tasks、System.Linq.Parallel など計10ファイル): [ConditionalClass]/[ConditionalTheory] で単一スレッドwasm上でのハング/失敗を防止
  • 実行可能だが低速/メモリ過多のテスト(深い式木コンパイル、大容量JSON処理など): [ActiveIssue("...#129973", IsCoreCLR, IsBrowser)] で CoreCLR-wasmのみ無効化(Monoは実行継続)
  • System.Linq.Parallel スイート全体: WithoutCategories=OuterLoop で195k組み合わせ行列の実行回避(メモリ枯渇防止)

パフォーマンスへの影響

タイムアウト拡張に伴い、単一スレッドwasm環境での遅いテスト実行が完了可能に。バッチ隔離により遅いスイートが他のバッチの実行時間を圧縮しません。最新CI実行実績(build 1485712): 31作業項目全合格、657,944テスト実行・653,983合格・0失敗・3,961スキップ。タイムアウト層の順序(xharness4h ≤ 非バッチ/バッチ4.5h(cap 5h) ≤ AzDOジョブ10h)により、遅いスイートはそれ自体のタイムアウトで制


#129259 Avoid socket telemetry errors for pending nonblocking connects

概要

非ブロッキングSocket.Connectで保留状態を示すWouldBlock(Windows)またはInProgress(Unix)が返される場合、テレメトリがこれをエラーとして扱っていた問題を修正します。本PR後は、保留状態ではActivityのステータスを未設定のままとし、error.typeを省略し、対応するConnectFailedイベントを抑制します。他のSocketError値は既存のエラー処理パスを維持します。

変更内容

  • SocketsTelemetry.cs: AfterConnectメソッドを調整し、非ブロッキング接続の保留結果(WouldBlock/InProgress)に対してエラーステータス/タグ付けと失敗カウントをスキップする処理を追加
  • TelemetryTest.cs: 非ブロッキング接続が初回は保留状態を返しながら最終的に成功するシナリオをカバーするテストConnect_NonBlockingPending_ActivityNotMarkedAsErrorを追加

パフォーマンスへの影響

影響なし

関連Issue

#129252

その他

  • 本変更はテレメトリのActivity表面に限定され、EventSourceレイヤーの同一の保留結果ケースも含みます
  • 既存の制限として継続:保留状態の接続が後に成功した場合、outgoing-connections-establishedカウンターには計上されません(変更前も同様)
  • Windows上でローカル検証済み
  • ブロッキング関連のテストも実行確認済み

#128979 Escape quotes and backslashes in MailAddress display name when encoding SMTP headers

  • 作成者: @Copilot
  • 作成日時: 2026年06月04日 11:51:23(UTC)
  • マージ日時: 2026年06月30日 11:05:13(UTC)
  • ラベル: area-System.Net

概要

MailAddress.Encode で生成される SMTP ヘッダーの表示名(DisplayName)に含まれるダブルクォート(")とバックスラッシュ(\)を RFC 5322 準拠のように正しくエスケープする修正です。Henry "The Fonz" Winkler や C:\path\to\file のような特殊文字を含む表示名を使用した際に、不正な quoted-string が生成される問題を解決します。

変更内容

  • MailAddress.Encode (ASCII / allowUnicode=true ブランチ): バックスラッシュを \\ に、ダブルクォートを \" にエスケープし、RFC 5322 準拠の quoted-string を生成するよう修正
  • MailAddress.ToString(): \ → \\ のエスケープを追加し、Encode パスとの一貫性を確保
  • エスケープ順序: 両呼び出し側でバックスラッシュを先にエスケープした後にダブルクォートをエスケープ(順序を逆にすると二重エスケープが発生)
  • テスト拡充: MailAddressEncodeTest に回帰テスト(DisplayNamesWithSpecialChars データソース)を追加し、クォートのみ、バックスラッシュのみ、両者の組み合わせケースをカバー;MailAddressDisplayNameTest のテスト データを拡張しバックスラッシュ変種を追加

パフォーマンスへの影響

影響なし

関連Issue

#36752(クォート対応の当初実装)

その他

Q エンコード(非 ASCII)ブランチは影響を受けません(encoded-word 構文は quoted-string 構文を使用しないため)。この修正により、特殊文字を含む表示名でも正しい SMTP ヘッダーが生成されるようになります。


#128862 Add Process.Start callback overload with WindowsProcessStartArguments and UnixProcessStartArguments

概要

Process.Start() にコールバックベースのオーバーロードを追加し、開発者がカスタムプラットフォームAPI(Windows の CreateProcess や Unix の posix_spawn など)でプロセスを作成しながら、.NET の Process インフラストラクチャ(ストリーム処理、WaitForExit など)を活用できるようにしました。新しい ref struct 型 WindowsProcessStartArguments と UnixProcessStartArguments は、プリペアされたスタート情報(標準ハンドル、コマンドラインやargv、環境ブロック、Unix では UTF-8 ポインタとしての実行可能ファイルパス)をコールバックに渡します。

変更内容

  • Process.Start() オーバーロード追加(公開API): Process.Start(ProcessStartInfo, Func<WindowsProcessStartArguments, IntPtr>) と Process.Start(ProcessStartInfo, Func<UnixProcessStartArguments, int>) を追加。Windows はプロセスハンドルを、Unix はプロセスIDを返します。
  • 新しい ref struct 型(公開API、System.Runtime.InteropServices 名前空間): WindowsProcessStartArguments(標準ハンドル、コマンドラインなど)と UnixProcessStartArguments(argv/envp、解決されたパスへの byte* ポインタなど)
  • SafeProcessHandle へのコールバック支援: Windows で環境ブロック+コマンドラインの構築・ピニング、Unix で argv/envp の割り当てと待機状態登録を実装
  • ProcessUtils.Unix の統一パス検証: ProcessUtils.ResolveValidPath() が空白のみのワーキングディレクトリを null に正規化
  • トリミング対応: StartCore と StartCoreWithCallback を完全に分離し、SafeProcessHandle.StartWithCallback はコールバックAPI を明示的に使用するアプリケーションにのみ含まれるようにしました
  • テスト追加: Windows・Unix での stdout/stderr リダイレクション検証用コールバックテストを実装

パフォーマンスへの影響

影響なし。コールバックベースの呼び出しパスと従来のパスは分離されており、既存コードのパフォーマンスに変化はありません。

関連Issue

#71595

その他

  • 破壊的変更なし: 新しいオーバーロード追加のみで、既存API は変更なし
  • プラットフォーム標注: [SupportedOSPlatform]/[UnsupportedOSPlatform] はメソッドレベルに配置
  • セキュリティ: ref struct 制約によりポインタ型プロパティの生存期間はコールバック呼び出しに限定
  • API ガイダンス: 元の ProcessStartArguments.FileName は廃止され、Unix 専用の UnixProcessStartArguments.ResolvedPath(byte*)に置き換わりました
  • リスク判定: 中程度。新しい公開API サーフェスと参照アセンブリ整合性の検証が必要ですが、コールバック固有パスに限定した変更により軽減されています

#127164 arm64: Clean up SVE embedded masked codegen

概要

ARM64 SVE(Scalable Vector Extension)のマスク付きハードウェア組み込み命令コード生成を整理・最適化するPR。#115508の最終段階として、コード生成ロジックの統合、movprfx命令の利用最適化、および関連テストの修正を実施。

変更内容

JIT コンパイラ(内部実装):

  • hwintrinsiccodegenarm64.cpp: マスク付き命令のコード生成を新関数genEmbeddedMaskedHWIntrinsicに移行し、異なるオペランド数のコードパスを統合
  • emitarm64sve.cpp: SVE命令エミッタの微調整
  • lowerarmarch.cpp・lsraarm64.cpp: LSRA(Linear Scan Register Allocation)ロジック更新、unary演算やzero falseOp含有の対応

movprfx最適化:

  • マスクが全true時は、述語付きmovprfxを非述語付きmovprfxに置換(パフォーマンス向上)
  • マスクが全true以外の場合、zero falseOpの含有を許可してゼロ述語付きmovprfxを活用
  • 単項マスク付き演算でmovprfxサポートを追加(ターゲットレジスタのLSRA遅延フリーが必須)

テスト修正:

  • 複数のSVEテンプレートでConditionalSelect_ZeroOp呼び出し修正:zero vectorをローカル変数ではなく定数として直接ConditionalSelectに渡すように統一

パフォーマンスへの影響

述語付きmovprfxから非述語付きmovprfxへの置換により、マスク全true時のパフォーマンス向上が期待される。具体的なベンチマーク結果は提供されていない。

関連Issue

#115508

その他

なし


目次