Pull Request on 2026年04月24日

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

注意点

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


目次

  1. #127387 Disable trim and AOT analyzers in iOS test project
  2. #127386 Use safe Span.Slice loop pattern in CRC32 ARM scalar paths
  3. #127382 Use safe Span.Slice loop pattern in HashCode.AddBytes
  4. #127381 Use safe Span.Slice loop pattern in NumericsHelpers.DangerousMakeOnesComplement
  5. #127375 [browser] Remove public WasmWebcilVersion MSBuild property; always use internal _WasmWebcilVersion
  6. #127371 Normalize native compiler prop to CppCompilerAndLinker
  7. #127363 JIT: Tolerate edge/successor count mismatch at OSR entry in profile reconstruction
  8. #127357 JIT: Fix profile inconsistency asserts in flow graph optimization
  9. #127342 [release/10.0] Fix IJW OverflowException with 17+ by-ref parameters
  10. #127340 [browser] Fix DateTime marshalling to be timezone-independent
  11. #127339 [ilasm] Fix AsmParse::error to always write to stderr
  12. #127337 Support new message CMD_VM_GET_SYSTEM_INFORMATION
  13. #127335 Fix locale collation for build.sh
  14. #127321 Change heap dumps to use HEAP2 as the default
  15. #127316 Remove NOTIFY_SOCKET clear side effect from SystemdNotifier ctor
  16. #127315 [browser][wasm] Fix CoreCLR Emscripten out/err override
  17. #127314 [browser] Align CLR completeTaskWrapper to exit on exception, matching Mono
  18. #127308 [SRM] Miscellaneous clean-up.
  19. #127294 [browser][WBT] Bump Blazor to 11.0.0-preview.4.26211.102
  20. #127293 JIT: Fix uninitialized gtCallMethHnd for indirect calls causing false recursive tail call detection
  21. #127275 [QUIC] Add QuicStream.Priority property
  22. #127248 Implement X25519DiffieHellman
  23. #127246 System.Reflection.Metadata: preserve pre-linked suffix chain when linking into empty BlobBuilder
  24. #127237 [release/10.0] Force MetaDataGetDispenser to be linked into singlefilehost
  25. #127181 JIT: relop simplification during redundant branch opts
  26. #127124 JIT: propagate vector constants through assertion prop
  27. #127108 Fix xplat dump test OOM by splitting Helix payloads
  28. #127073 [browser] Native build on CoreCLR in Wasm.Build.Tests
  29. #127031 Add cdac-dump-inspect script for ad-hoc dump analysis
  30. #126963 Implement cDAC-backed DacDbi GetObjectForCCW and IsRcw + dump integration coverage
  31. #126838 Bump Android minimum API level from 21 to 24
  32. #126834 [QUIC] Remove check for AzL3 for QUIC and H/3 tests
  33. #126691 Fix LibraryImportDiagnosticsAnalyzer and DownlevelLibraryImportDiagnosticsAnalyzer missing diagnostics when StringMarshalling is set
  34. #126473 [release/10.0] [NET] Fix docker compose.
  35. #126159 Use libunwind's unw_get_proc_info_in_range on macOS
  36. #126105 [Interop] AddGeneratedComClassFixer: remove [ComVisible(true)] during conversion
  37. #126062 JIT: Handle edge cases around BlendVariableMask rewrite
  38. #125835 [mono] Restore signal handlers during crash chaining
  39. #123969 Improve FileLoadException message for assembly version conflicts with loaded assembly details
  40. #123736 Migrate SpanArr inline array from InvalidCSharp*.il to C#

#127387 Disable trim and AOT analyzers in iOS test project

概要

iOS/tvOS/MacCatalyst向けのSystem.Runtime ハイブリッドテストプロジェクトで、trim と AOT アナライザーを無効化します。これらのアナライザーは新たに有効化されたものですが、全てのテストがまだ対応していないため、extra-platforms での障害を防ぐための措置です。

変更内容

  • System.Runtime.IOS.Tests.csproj:
    • Trim アナライザーを無効化
    • AOT アナライザーを無効化
    • 追跡用コメント(dotnet/runtime#126862)を追加

パフォーマンスへの影響

影響なし

関連Issue

#126862

その他

このプロジェクトファイル内での変更のため、実装コードへの影響はなく、テストビルドの設定変更です。アナライザーの完全対応に向けた一時的な措置と考えられます。


#127386 Use safe Span.Slice loop pattern in CRC32 ARM scalar paths

概要

ARM/ARM64スカラーCRC32更新パスを、ポインタベースのループからSpanスライシングループパターンに書き換えました。BinaryPrimitives.ReadUInt64LittleEndian/ReadUInt32LittleEndianを使用し、JITが自動的に境界チェックを削除できるようにしました。

while (source.Length >= sizeof(ulong))
{
    crc = System.Runtime.Intrinsics.Arm.Crc32.Arm64.ComputeCrc32(crc, BinaryPrimitives.ReadUInt64LittleEndian(source));
    source = source.Slice(sizeof(ulong));
}

変更内容

  • src/libraries/System.IO.Hashing/src/System/IO/Hashing/Crc32ParameterSet.WellKnown.cs:
    • UpdateScalarArm、UpdateScalarArm64(Crc32とCrc32Cの両方)をSpanスライシングループに書き換え
    • Unsafe.ReadUnaligned<ulong/uint>と手動マスキングループをBinaryPrimitivesの読み込みに統一
    • 変更行数:+20/-41行

パフォーマンスへの影響

コード生成が改善されました。JITがwhile (data.Length >= CONST) { ...; data = data.Slice(CONST); }パターンを認識し、境界チェックを自動削除するため、より効率的なコードが生成されます。詳細はコード生成比較を参照。

関連Issue

#127386

その他

  • GitHub Copilot(AI生成コンテンツ)の支援で作成
  • ARM CRC32命令はバイトストリームとして値を消費し、.NETはARMでリトルエンディアンのみ実行するため、明示的なLittleEndian読み込みは従来のホスト側エンディアンUnsafe.ReadUnalignedと等価です
  • 内部実装の最適化で、公開APIへの影響はありません

#127382 Use safe Span.Slice loop pattern in HashCode.AddBytes

概要

HashCode.AddBytesメソッドを、JITが境界チェックを除去できる安全なSpan.Sliceループパターンに書き直しました。従来のUnsafe APIベースのポインタ走査(Unsafe.ReadUnaligned、Unsafe.Add、Unsafe.IsAddressLessThan)を、BitConverter.ToUInt32とReadOnlySpan<byte>.Sliceを用いた安全なループに置き換えています。JITはこのループ形状(while (data.Length >= CONST) { ...; data = data.Slice(CONST); })を認識して自動的に境界チェックを除去するため、生成コードは前の unsafe 実装と同等です。

// 従来の unsafe ベース → 安全な Span.Slice ベースへ
while (value.Length >= sizeof(int) * 4)
{
    _v1 = Round(_v1, BitConverter.ToUInt32(value));
    _v2 = Round(_v2, BitConverter.ToUInt32(value.Slice(sizeof(int) * 1)));
    _v3 = Round(_v3, BitConverter.ToUInt32(value.Slice(sizeof(int) * 2)));
    _v4 = Round(_v4, BitConverter.ToUInt32(value.Slice(sizeof(int) * 3)));
    
    _length += 4;
    value = value.Slice(sizeof(int) * 4);
}

変更内容

  • System.Private.CoreLib/System/HashCode.cs (+20行/-32行)
    • AddBytesメソッドのメインループを、ポインタ算術ベースから Span スライシングベースに変更
    • キュー フラッシュ処理(queue-flush)と4バイト末尾ループを Slice 経由で実装
    • 1バイト末尾処理をforeachで実装

パフォーマンスへの影響

コード生成は従来の unsafe 実装と同等。JIT が Span スライシングループパターンを認識して境界チェック除去を行うため、実行時パフォーマンス上の変化はなし。詳細はcodegen diffを参照。

関連Issue

なし

その他

  • 公開APIの動作変更なし(内部実装の安全性向上)
  • GitHub Copilot による AI 生成コンテンツを活用して作成

#127381 Use safe Span.Slice loop pattern in NumericsHelpers.DangerousMakeOnesComplement

概要

NumericsHelpers.DangerousMakeOnesComplementメソッドをリファクタリングし、unsafe操作を排除しつつJITの最適化を活用する安全なSpan.Sliceループパターンに統一しました。Vector<N>.LoadUnsafe/StoreUnsafeとUnsafe.AddをVector<N>.Create(span)とvector.CopyTo(span)に置き換え、JITが自動的に境界チェックを削除するループ構造を採用しています。

while (data.Length >= Vector<N><nuint>.Count)
{
    Vector<N><nuint> complement = ~Vector<N>.Create(data);
    complement.CopyTo(data);
    data = data.Slice(Vector<N><nuint>.Count);
}

変更内容

  • src/libraries/System.Runtime.Numerics/src/System/Numerics/NumericsHelpers.cs
    • Vector512/256/128の処理を安全なSpan.Sliceループパターンに統一
    • LoadUnsafe/StoreUnsafeとUnsafe.Addでの手動オフセット管理を廃止
    • System.Runtime.CompilerServicesとSystem.Runtime.InteropServicesの不要な using を削除
    • スカラーフォールバックループをスライス済みspanへのインデックスアクセスに簡略化

パフォーマンスへの影響

JITコンパイラがこの特定のループ形式(while (data.Length >= CONST) { ...; data = data.Slice(CONST); })を認識して境界チェックを自動的に削除するため、生成されるコード(コードジェン)は従来の unsafe 形式と同等です。パフォーマンス低下なし。

関連Issue

なし

その他

本PRはGitHub Copilotの支援により作成されています。コードジェンの詳細な比較は diffchecker で確認可能です。


#127375 [browser] Remove public WasmWebcilVersion MSBuild property; always use internal _WasmWebcilVersion

概要

WebAssembly SDK ビルドロジックから公開 MSBuild プロパティ WasmWebcilVersion を削除し、webcil バージョンを常に内部プロパティ _WasmWebcilVersion で決定するようにしました。これにより、webcil バージョンの決定ロジックが一元化されます(CoreCLR の場合は 1、それ以外は 0)。

変更内容

  • Microsoft.NET.Sdk.WebAssembly.Browser.targets: 公開プロパティ $(WasmWebcilVersion) を プライベートプロパティ $(_WasmWebcilVersion) にコピーしていた行を削除。既存のデフォルト値設定ロジック(CoreCLR で 1、その他は 0)は変更なし。すべての他の参照箇所(ConvertDllsToWebcil タスク属性)は既に $(_WasmWebcilVersion) を参照しており、影響なし。

パフォーマンスへの影響

影響なし

関連Issue

#127375

その他

この変更は破壊的変更です。WasmWebcilVersion は公開 MSBuild プロパティとして外部から設定可能でしたが、以降は設定不可になります。ユーザーがこのプロパティを明示的に設定していた場合、その設定は無視されるようになります。


#127371 Normalize native compiler prop to CppCompilerAndLinker

概要

ネイティブコンパイラプロパティを CppCompilerAndLinker に正規化する変更。VMR(Version Manifest Resolver)からgccを渡すための対応で、NativeAOT基盤で公開的に使用されている命名規則に統一する。

変更内容

  • eng/build.sh: ビルドスクリプトでのコンパイラプロパティ参照を更新(2行変更)
  • src/coreclr/runtime.proj: CoreCLRランタイムビルド設定のプロパティ名を統一(1行変更)
  • src/libraries/System.Runtime.InteropServices/tests/TestAssets/NativeExports/NativeExports.csproj: テストアセットのネイティブエクスポート設定を更新(1行変更)
  • src/mono/mono.proj: Monoランタイムビルド設定のプロパティ名を統一(1行変更)
  • src/native/corehost/corehost.proj: コアホストのネイティブビルド設定を更新(1行変更)
  • src/native/libs/build-native.proj: ネイティブライブラリビルド設定の統一(1行変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更は主にビルドシステムの内部実装の正規化であり、公開APIに対する破壊的変更はない。複数のプロジェクトファイルにおいてコンパイラプロパティの命名を一貫性のある形に統一することで、ビルドシステムの保守性と一貫性を向上させる。


#127363 JIT: Tolerate edge/successor count mismatch at OSR entry in profile reconstruction

概要

JIT のプロファイル再構築時に、OSR(On-Stack Replacement)エントリでエッジ数と後続ブロック数の不一致を許容するように改善しました。PGO エッジプロファイルデータを組み込む際、PropagateOSREntryEdges がエッジ数の厳密な一致をアサートしていましたが、スパニングツリー走査中に一部の BBJ_LEAVE ターゲットが見落とされる場合に失敗していました。この場合、PropagateEdges と同様に、等確率ヒューリスティックスにフォールバックするよう修正しました。

変更内容

  • src/coreclr/jit/fgprofile.cpp
    • PropagateOSREntryEdges でのアサーション削除:assert(nEdges == nSucc) を条件分岐に変更
    • エッジ数不一致または重みがゼロの場合、実際の後続ブロックに対して等確率を割り当てるフォールバックロジックを追加
    • 重みがゼロの場合は EntryWeightZero() を記録
    • 通常の一致ケースについては既存の正規化パスを保持

パフォーマンスへの影響

影響なし(プロファイル再構築の信頼性向上を目的とした修正)

関連Issue

#126725

その他

この修正は、スパニングツリー構築中に一部の制御フロー(特に BBJ_LEAVE)が見落とされる既知の問題に対応しています。PropagateEdges で既に採用されていた堅牢なアプローチをミラーリングすることで、OSR エントリでの同様の問題を解決しています。


#127357 JIT: Fix profile inconsistency asserts in flow graph optimization

概要

PGO(Profile Guided Optimization)ストレスモード下でのアサート失敗を修正するため、fgopt.cppのフロー グラフ最適化における3つのプロファイル重み不整合の問題に対処しています。具体的には、ブロック圧縮時の重み不一致検出、条件分岐のマージ後の尤度設定、プロファイル重みのクランプ検出の3つを修正しています。

変更内容

  • fgCompactBlock: ブロック圧縮時に、圧縮後のブロック重みと着信エッジ重みの合計が一致しないケースを検出し、fgPgoConsistent = falseをマーク
  • fgOptimizeBranchToEmptyUnconditional: 条件分岐の両エッジが同一ターゲットにマージされた場合、マージされたエッジの尤度を1.0に設定
  • fgOptimizeBranchToEmptyUnconditional: decreaseBBProfileWeightがブロック重みをゼロにクランプする場合、fgPgoConsistent = falseをマーク
  • JITDUMP出力メッセージの修正: プロファイルデータを不整合状態にマークする際に、誤って"consistent"と表示していた3つのメッセージを"inconsistent"に修正

パフォーマンスへの影響

影響なし(デバッグ・診断機能の修正)

関連Issue

#126381

その他

  • JITの内部実装(コンパイラ最適化パス)の修正であり、公開APIや互換性への影響なし
  • PGOストレスモード(JitRandomEdgeCounts、JitRandomGuardedDevirtualization)でのアサート失敗に対処するもの

#127342 [release/10.0] Fix IJW OverflowException with 17+ by-ref parameters

概要

C++/CLIからマネージドコードへのネイティブ呼び出し時に、17個以上の参照渡しパラメータがある場合にOverflowExceptionでプロセスがクラッシュする問題を修正しました。根本的なバッファ管理の問題を解決する修正をrelease/10.0ブランチにバックポートしています。

変更内容

  • stubgen.cpp: スタブ生成時のバッファ管理ロジックを修正(6行追加、2行削除)。17個以上の参照渡しパラメータを扱う場合のバッファ溢れを防止。
  • IjwNativeCallingManagedDll.cpp: 長い署名(17個以上の参照渡しパラメータ)を含むテストケースを追加(67行)
  • NativeCallingManaged.cs: マネージド側のテストコード追加(16行)

パフォーマンスへの影響

影響なし

関連Issue

#127182(オリジナルPR) #127166(顧客報告の問題) #106000(リグレッション導入PR)

その他

  • Customer reported の問題を修正
  • リグレッション確認済み(PR #106000で導入)
  • リスク評価:低(極めて長い署名のみに影響し、テストケースで保護)
  • ユニットテストが追加済み

#127340 [browser] Fix DateTime marshalling to be timezone-independent

概要

WebAssembly環境においてDateTime型のマーシャリングがタイムゾーン依存となっていた問題を修正しました。ToJS(DateTime)がnew DateTimeOffset(value)を使用していたため、ローカルタイムゾーンのオフセットが適用されていました。一方、ToManaged側は常に.UtcDateTime(offset=0)を返すため、ラウンドトリップ時にDateTime値がローカルUTCオフセット分シフトしていました。Emscripten 5.0.6がTZ環境変数を正しく処理するようになったことで、UTC以外のタイムゾーンで問題が露出しました。

修正内容:new DateTimeOffset(value)をnew DateTimeOffset(value.Ticks, TimeSpan.Zero)に変更し、Ticksを常にUTCとして解釈するようにしました。

// 変更前
new DateTimeOffset(value)

// 変更後
new DateTimeOffset(value.Ticks, TimeSpan.Zero)

変更内容

  • JSMarshalerArgument.DateTime.cs: ToJS(DateTime)およびToJS(DateTime?)のDateTimeOffset初期化方法を変更。Ticksを常にUTC(offset=0)として解釈することで、ToManaged側の.UtcDateTimeとの一貫性を確保
  • Tests.csproj: テスト実行時にTZ=Europe/Berlin環境変数を設定し、CIおよびローカル開発環境で非UTC タイムゾーンのコードパスをテストできるようにしました

パフォーマンスへの影響

影響なし

関連Issue

#127340

その他

この修正により、以下のテストケースが正常に機能するようになります:

  • DateTimeMaxValueBoundaryCondition(12月31日CETで1時間のシフトが解消)
  • DateTimeMarshallingLosesMicrosecondComponentPrecisionLoss(4月1日CESTで2時間のシフトが解消)
  • DateTimeMinValueBoundaryCondition(MinValue+オフセットによるオーバーフロー例外が解消)
  • JsExportFuncOfDateTime_Argument_OverflowNETDateTime(MaxValue+60sのオーバーフロー判定が正確化)
  • JsExportFunctionDateTimeDateTime(DateTime.Nowのラウンドトリップでオフセット時間のロスが解消)

DateTimeOffset型のマーシャリングは、すでにToUnixTimeMilliseconds()が保存されたオフセットを考慮しているため、本修正の影響を受けません。


#127339 [ilasm] Fix AsmParse::error to always write to stderr

  • 作成者: @Copilot
  • 作成日時: 2026年04月23日 20:18:23(UTC)
  • マージ日時: 2026年04月24日 05:37:20(UTC)
  • ラベル: area-ILTools-coreclr

概要

ilasmパーサーの診断出力を統一し、AsmParse::error()が-ERR(エラー許容)モード下でAsmParse::warn()と同じ動作をするよう修正。エラー出力は常にstderrに送られ、OnErrGoが有効な場合は診断出力が抑制されます。

変更内容

  • src/coreclr/ilasm/grammar_after.cpp: AsmParse::error()にassem->OnErrGoチェックを追加し、エラー許容モードでは出力を抑制
  • src/coreclr/ilasm/assembler.cpp: 7箇所の呼び出しサイトを整理し、if(OnErrGo) error(...); else { warn(...); fixup }からif(!OnErrGo) { warn(...); fixup }に変更(OnErrGo設定時は診断と修正を適用しない)

パフォーマンスへの影響

影響なし

関連Issue

#125320

その他

  • 誤解を招く条件付きプレフィックスassem->OnErrGo ? "warning : " : "error : "(到達不可能なデッドコード)を固定文字列"error : "に簡潔化
  • #127339は#125320で実装されたwarn()への修正と同一のパターンをerror()に適用

#127337 Support new message CMD_VM_GET_SYSTEM_INFORMATION

  • 作成者: @thaystg
  • 作成日時: 2026年04月23日 19:08:58(UTC)
  • マージ日時: 2026年04月24日 13:02:37(UTC)
  • ラベル: area-Debugger-mono

概要

Monoデバッガーのワイヤープロトコルに新しいVM コマンド CMD_VM_GET_SYSTEM_INFORMATION を追加します。このコマンドにより、デバッガークライアントがランタイムからプロセッサーアーキテクチャとOSページサイズなどのシステム情報をクエリできるようになります。

変更内容

  • debugger-protocol.h: デバッガープロトコルマイナーバージョンを2.68に更新。プロセッサーアーキテクチャ定数(winnt.hに準拠)と新しいVM コマンドID(CMD_VM_GET_SYSTEM_INFORMATION)を定義
  • debugger-engine.h: 新しいVM コマンドをエンジンレベルのCMD_マクロとして公開
  • debugger-agent.c: コマンド処理を実装し、プロセッサーアーキテクチャとページサイズを返す

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはMonoランタイムのデバッガープロトコル拡張で、内部実装の変更です。互換性への影響はプロトコルバージョンの更新のみです。


#127335 Fix locale collation for build.sh

  • 作成者: @vcsjones
  • 作成日時: 2026年04月23日 18:07:57(UTC)
  • マージ日時: 2026年04月24日 04:27:47(UTC)
  • ラベル: area-Infrastructure

概要

ビルドスクリプト(eng/build.sh)において、commコマンドとsortコマンドのロケール照合順序をCロケールに固定することで、システムのロケール設定に依存しない一貫した動作を実現します。これにより、Ubuntu 26.04などの新しいディストリビューションで発生する「input is not in sorted order」エラーを防止します。

変更内容

  • eng/build.sh: サポートされるアクションとユーザー引数の交差計算(actInt)時に、sortとcommの両方に対してLC_ALL=Cを設定し、ロケール依存の順序付けの不一致を回避

パフォーマンスへの影響

影響なし

関連Issue

#127334

その他

なし


#127321 Change heap dumps to use HEAP2 as the default

概要

ヒープダンプ生成時のメモリ領域列挙ロジックを簡潔化し、HEAP2パスをデフォルトとします。従来の低速な列挙パスと環境変数ベースの回避策を廃止し、LoaderAllocatorを通じた統一的な領域列挙に統合します。これにより、JitManager、SystemDomain、AppDomain、Assembly、Module、LoaderAllocatorからのメモリ領域が効率的に列挙されます。

変更内容

  • src/coreclr/debug/daccess/enummem.cpp: ヒープダンプを常にHEAP2経由で実行するよう変更し、CUSTOMダンプワーカーを単一のミニスタイルパスに簡潔化。レガシーHEAP処理を削除
  • src/coreclr/debug/createdump/crashinfo.cpp: 環境変数ベースのオプトアウト/互換動作を廃止し、常にHEAP2を使用
  • src/coreclr/vm/threads.cpp: 非HEAP2レガシーパスのスレッドからAppDomain列挙を削除
  • src/coreclr/vm/class.cpp: 非HEAP2レガシーパスの明示的なModuleおよびMethodDescChunk列挙を削除
  • src/coreclr/vm/ceeload.cpp: 非HEAP2レガシーパスのModule ハッシュテーブル/型/メンバ明示的列挙を削除(HEAP2のLoaderAllocator列挙は維持)
  • src/coreclr/vm/assembly.cpp: レガシーAssemblyサブ列挙を削除(HEAP2 LoaderAllocator列挙のみ維持)
  • src/coreclr/vm/methodtable.cpp: 非HEAP2レガシーパスのDispatchMap明示的列挙を削除
  • src/coreclr/debug/ee/functioninfo.cpp: 非HEAP2パスのレガシーデバッガModuleおよびMethodDesc列挙を削除

パフォーマンスへの影響

HEAP2パスは従来のパスより高パフォーマンスです。CollectibleなLoaderHeapも新たに列挙対象に追加されます。具体的なベンチマーク数値は提供されていません。

関連Issue

なし

その他

破壊的変更の警告: CLRDATA_ENUM_MEM_HEAPフラグはpublic API(clrdata.h)に残存していますが、EnumMemoryRegionsWrapper()では処理されなくなります。現在はデバッグアサートを発生させ、リテール環境ではS_OKを返しつつ何も処理しません。レビュアーから、後方互換性のためHEAP → HEAP2のマッピング追加、またはE_INVALIDARGなどのエラーHRESULT返却の検討が指摘されています。


#127316 Remove NOTIFY_SOCKET clear side effect from SystemdNotifier ctor

概要

SystemdNotifier コンストラクタから NOTIFY_SOCKET 環境変数のクリア処理を削除し、AddSystemdLifetime 内の ISystemdNotifier DI ファクトリに移動しました。公開パラメータなしコンストラクタが純粋な読み取り操作になり、環境変数はホスティングが実際に構成される場合にのみ更新されるようになります。

変更内容

  • SystemdHostBuilderExtensions.cs: AddSystemdLifetime 内の ISystemdNotifier DI ファクトリに NOTIFY_SOCKET クリア処理を追加
  • SystemdNotifier.cs: コンストラクタから NOTIFY_SOCKET クリア処理を削除

パフォーマンスへの影響

影響なし

関連Issue

#125520

その他

この変更により、SystemdNotifier のコンストラクタが副作用を持たない純粋な操作になり、環境変数の変更は DI コンテナがホストを構築する際に IHostLifetime 経由で notifier を解決するときのみ発生するようになります。遅延初期化の特性が保持されます。


#127315 [browser][wasm] Fix CoreCLR Emscripten out/err override

概要

CoreCLR browser WASM ローダーにおいて、ユーザー提供の out/err オーバーライド(dotnet.withModuleConfig() 経由)が Emscripten の print/printErr に橋渡しされていない問題を修正します。Mono ランタイムは既にこの機能を実装していましたが、CoreCLR にはその相当機能がありませんでした。本変更により CoreCLR の動作が Mono と一致するようになります。

変更内容

  • src/native/libs/Common/JavaScript/types/internal.ts: EmscriptenModuleInternal 型に print と printErr プロパティを追加
  • src/native/libs/Common/JavaScript/loader/run.ts: ネイティブモジュール読み込み前に Module.out/Module.err を Module.print/Module.printErr に接続し、Emscripten の初期化時に正しく拾われるようにする
  • src/mono/wasm/Wasm.Build.Tests/ModuleConfigTests.cs: OutErrOverrideWorks テストの Mono のみ制限を削除し、CoreCLR でも実行されるように変更

パフォーマンスへの影響

影響なし

関連Issue

#124945

その他

  • ブラウザ WASM 環境における CoreCLR と Mono の動作一貫性を確保する変更です。
  • テストは Wasm.Build.Tests.ModuleConfigTests で検証済み(CoreCLR フレーバーで実行、エラーなし)
  • AI/Copilot 生成の PR です。

#127314 [browser] Align CLR completeTaskWrapper to exit on exception, matching Mono

概要

ブラウザ環境でのPromise-to-Taskマーシャリング中に発生した例外の処理を改善します。CLR実装が例外を無視していた問題を修正し、Mono実装と同様にランタイムを終了するようにします。例外が発生するとManagedタスクが永遠にハング状態になり、GCHandle/プロキシの状態が破損するため、この修正は重要です。

変更内容

  • exchange.ts — LoaderExports型とLoaderExportsTableにexitを追加
  • loader/index.ts — ローダー関数オブジェクトとシリアライゼーション テーブルにexitを追加
  • cross-module/index.ts — 新しいテーブルインデックスからexitを読み込むようにデシリアライゼーションを更新
  • marshaled-types.ts — CLR completeTaskWrapperの例外ハンドリングで、例外を無視する代わりにexit(1, ex)を呼び出すように変更

パフォーマンスへの影響

影響なし

関連Issue

#125587

その他

レビュアーから、新しいexitエントリの挿入位置に関する指摘があります。現在の実装では既存のインデックスが変わるため、cross-bundleのABI互換性を保つため、新しいエクスポートはテーブルの末尾に追加すべきであるとのコメントが提出されました。


#127308 [SRM] Miscellaneous clean-up.

概要

System.Reflection.Metadataの内部実装を整理するクリーンアップPRです。カスタムUTF-8ヘルパーをEncoding.UTF8標準APIに置き換え、未使用の内部API(Hash.Combine(bool, int)など)を削除し、PEヘッダ書き込みと埋め込みPDB解凍コードパスを簡素化しています。

変更内容

  • EncodingHelper の統合: .NETコアapp専用実装を削除し、標準実装に統合。ArrayPool<byte>.Sharedを使用するよう変更
  • UTF-8ヘルパー廃止: BlobUtilities.GetUTF8ByteCount(string) を削除し、呼び出し元を Encoding.UTF8 APIに置き換え
  • PEヘッダ簡素化: DosHeaderSize 定数を削除し、PEBuilder.DosHeader.Length から動的に計算
  • 埋め込みPDB処理: Stream.ReadAtLeast (.NET向け) を使用し、カスタム TryReadAll(Span<byte>) ヘルパーを削除
  • API削除: Hash.Combine(bool, int) オーバーロード、StreamExtensions.TryReadAll 削除(テストも同時削除)
  • ImmutableArray 最適化: MethodBodyBlock で例外領域読み込みに ImmutableArray ビルダーを使用
  • BlobHeap 改善: GetBytes に unique オプションを追加し、blob ハンドリングを強化

パフォーマンスへの影響

影響なし。クリーンアップ中心の変更で、パフォーマンスに関連する重大な改善・劣化は報告されていません。

関連Issue

#115294(一部の変更がこのIssueからチェリーピック)

その他

  • 内部実装APIのみの変更であり、公開APIへの破壊的変更はなし
  • マルチフレームワーク対応を簡略化(.NET Core特定の条件付きコンパイルを削除)
  • StreamSpanPolyfills.cs に新しいポリフィルを追加(Stream.ReadAtLeastの互換性対応)

#127294 [browser][WBT] Bump Blazor to 11.0.0-preview.4.26211.102

概要

Mono WASM テストアセットの Blazor/AspNetCore パッケージを 11.0.0-preview.4 にアップデートしました。WBT(Web Based Tests)カバレッジをターゲット SDK/ランタイムバージョンに合わせるための変更です。

変更内容

7つのテストアセットプロジェクトのパッケージ参照をアップデート:

  • Microsoft.AspNetCore.Components.* WebAssembly パッケージを 11.0.0-preview.4.26215.121 に統一
  • Microsoft.AspNetCore.SignalR.Client を同じプレビューバージョンに更新
  • Microsoft.AspNetCore.Components.WebAssembly.Server をホストサーバーテストアセットで同バージョンに更新

対象ファイル:BlazorBasicTestApp、BlazorMultiClientHosted(Client1/2)、WasmOnAspNetCore(Shared/BlazorClient/AspNetCoreServer)の各プロジェクトファイル

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更は内部テストアセットの依存パッケージ更新であり、公開API には影響しません。Blazor/AspNetCore のプレビューバージョンアップに伴う定期的なメンテナンス作業です。


#127293 JIT: Fix uninitialized gtCallMethHnd for indirect calls causing false recursive tail call detection

概要

JITの間接呼び出し(CT_INDIRECT)処理において、gtCallMethHndフィールドが初期化されずにスタジアムデータを保持することで、gtIsRecursiveCall()が誤った正の判定をし、再帰的末尾呼び出しの検出が誤動作する問題を修正します。結果として、無限ループに陥るコード変換が発生していました。

変更内容

  • src/coreclr/jit/gentree.cpp (gtNewCallNode):CT_INDIRECT呼び出しに対してgtCallMethHnd = NO_METHOD_HANDLEを初期化し、スタジアムメモリ内の古いデータが残らないようにしました。

  • src/coreclr/jit/compiler.h (gtIsRecursiveCall):多層防御として、CT_INDIRECT呼び出しに対して明示的にfalseを返すようにしました。間接呼び出しは定義上再帰呼び出しにはなり得ないため。

  • src/coreclr/jit/gentree.cpp (gtCloneExprCallHelper):複製された間接呼び出しに対しても同じ初期化を追加し、複製パス内で同じ問題が発生しないようにしました。

パフォーマンスへの影響

影響なし。初期化処理は軽微で、むしろ無限ループへの変換を防止することでパフォーマンス劣化を回避しています。

関連Issue

#126930

その他

  • この問題はReleasビルドでのみ発生します(JITアリーナアロケータはReleaseビルドではメモリをゼロクリアしないため)
  • x64 CIでは非決定的に現れますが、arm64やローカルビルドでは現れません
  • CORINFO_VIRTUALCALL_LDVIRTFTN呼び出しは仮想フラグを持たないため、仮想呼び出しでないと判定され、問題がさらに複雑化していました
  • PR #125211でgtCallMethHndとgtCallAddrを共用体から独立フィールドに変更した際、初期化が漏れていたことが根本原因です

#127275 [QUIC] Add QuicStream.Priority property

  • 作成者: @ManickaP
  • 作成日時: 2026年04月22日 11:57:57(UTC)
  • マージ日時: 2026年04月24日 08:31:02(UTC)
  • ラベル: area-System.Net.Quic

概要

QUIC ストリームの優先度制御機能を System.Net.Quic に追加します。API承認済みの設計(#90281)に基づき、QuicStream.Priority プロパティ(byte)と DefaultPriority 定数(0x7F)を実装します。

namespace System.Net.Quic;

public partial class QuicStream
{
    public const byte DefaultPriority = 0x7F;
    public byte Priority { get; set; }
}

変更内容

  • QuicStream.cs: DefaultPriority 定数と Priority プロパティを追加。Getter はキャッシュされた値を返し、Setter は SetMsQuicParameter(QUIC_PARAM_STREAM_PRIORITY, (ushort)((value << 8) | 0xFF)) を呼び出して MsQuic の ushort 値域に変換。Disposal 後は ObjectDisposedException をスロー。
  • System.Net.Quic.cs(ref): 公開 API サーフェスに新しい定数とプロパティを追加。
  • QuicStreamTests.cs: 4 つの新規テストを追加(デフォルト値、Set/Get の往復、複数回設定、Disposal 後の例外)。

パフォーマンスへの影響

影響なし。Getter はキャッシュされた値の読み取りのみで P/Invoke を行わず、Setter のみ MsQuic パラメータ設定時に呼び出されます。

関連Issue

#90281

その他

GitHub Copilot の支援を受けて作成されました。既存テストと新規テストすべてが合格しています。


#127248 Implement X25519DiffieHellman

  • 作成者: @vcsjones
  • 作成日時: 2026年04月21日 21:22:36(UTC)
  • マージ日時: 2026年04月24日 21:50:55(UTC)
  • ラベル: area-System.Security

概要

X25519 Diffie-Hellman鍵交換の公開APIを実装します。Windows 10+ (CNG)、Apple macOS/iOS/tvOS (CryptoKit)、OpenSSLをサポートします。鍵のインポート/エクスポート(Raw/SPKI/PKCS#8/PEM形式)と共有秘密導出の機能を提供します。

// 使用例
using var x25519 = X25519DiffieHellman.Create();
byte[] publicKey = x25519.ExportRawPublicKey();
byte[] sharedSecret = x25519.DeriveRawSharedSecret(otherPartyPublicKey);

変更内容

  • 公開API: System.Security.Cryptography.X25519DiffieHellmanクラスを追加。鍵生成、インポート/エクスポート(Raw/SPKI/PKCS#8/PEM)、共有秘密導出をサポート
  • プラットフォーム実装:
    • Windows実装 (X25519DiffieHellmanImplementation.Windows.cs): BCrypt P/Invokeを使用
    • Apple実装 (X25519DiffieHellmanImplementation.Apple.cs): CryptoKit Swift バインディング経由
    • OpenSSL実装 (X25519DiffieHellmanImplementation.OpenSsl.cs): ネイティブPALエントリポイント経由
    • NotSupported実装 (フォールバック)
  • ネイティブバインディング:
    • OpenSSL: PAL関数定義&entrypoints追加(pal_evp_pkey_x25519.h/c)
    • Apple: CryptoKit Swift binding entrypoints&P/Invokeラッパー
    • Windows: BCrypt P/Invoke新規追加(SecretAgreement、DeriveKey、DestroySecret)
  • テスト: RFC 7748ベクトル、キーの往路復路テスト、PEM/PKCS#8動作確認、非サポート時の例外処理など包括的なテストスイート
  • 共通コード: PKCS#8暗号化検証ヘルパー(Pkcs8TestHelpers.cs)を導入し、テスト間で再利用可能に

パフォーマンスへの影響

影響なし

関連Issue

#126206

その他

  • 公開API(internal実装クラスではなく、X25519DiffieHellmanクラスが公開インターフェース)
  • 互換性: 新規追加のため破壊的変更なし
  • 今後のフォローアップ: プラットフォーム固有実装の個別分離およびAndroid実装予定

#127246 System.Reflection.Metadata: preserve pre-linked suffix chain when linking into empty BlobBuilder

概要

BlobBuilder.LinkSuffixがリンク済みの接尾辞チェーンを持つ空の宛先ビルダーにリンクされた場合、既にリンクされたコンテンツを失う問題を修正しました。本変更により、接尾辞チェーン全体が保持され、バイト順序と全コンテンツが正しく保持されるようになります。例:11-22(修正前は22-00になる場合がありました)。

element.LinkSuffix(tail);  // element: 0x11, tail: 0x22
emptyPrefix.LinkSuffix(element);  // 結果: [0x11, 0x22]

変更内容

  • System/Reflection/Metadata/BlobBuilder.cs

    • LinkSuffixメソッドに宛先が空の場合の明示的なパスを追加
    • 宛先が空の場合、接尾辞チェーンのテール(_nextOrPrevious)を宛先が採用するように変更
    • 宛先が空でない場合の既存ロジックは変更なし
  • Metadata/BlobTests.cs

    • LinkSuffix_EmptyDestination_SuffixAlreadyLinkedテストケースを追加
    • LinkSuffix_EmptyDestination_SuffixThreeChunkChainテストケースを追加(3チャンク事前リンク接尾辞チェーンの検証)
    • バイト順序の保持とビルダー間での一貫性をアサート

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正はSystem.Reflection.Metadataライブラリの内部実装BlobBuilderクラスへの修正であり、パブリックAPIの変更ではありません。リンク操作時の内部状態管理の正確性を向上させるものです。


#127237 [release/10.0] Force MetaDataGetDispenser to be linked into singlefilehost

概要

.NET 10でシングルファイル形式にビルドされた場合、ネイティブプロファイラーが使用するMetaDataGetDispenserエクスポートが失われていた問題を修正します。linkerフラグを追加して、singlefilehostビルド時に必要なエクスポートを保持するようにします。

変更内容

  • src/native/corehost/apphost/static/CMakeLists.txt: singlefilehostのビルドに対して、MetaDataGetDispenserを含む必要なエクスポートをリンク時に保持するためのlinkerフラグを追加(+18行)
  • src/installer/tests/AppHost.Bundle.Tests/StaticHost.cs: MetaDataGetDispenserエクスポートが存在することを検証する自動テストを追加(+65行)

パフォーマンスへの影響

影響なし

関連Issue

#126634 #127036(元のPR)

その他

  • このリグレッションはコミット c8403e62 のリファクタリングに由来
  • リスク評価:低
  • 手動検証済み、自動テストを追加済み
  • release/10.0ブランチへのバックポートPR

#127181 JIT: relop simplification during redundant branch opts

概要

JITコンパイラの冗長分岐最適化を拡張し、Value Number (VN)による論理式簡略化を活用して、支配的分岐の比較演算を削除できるようにしました。支配的述語が被支配述語を直接意味しない場合でも、(pB AND pA)をVN空間で簡略化して単一の関係演算子(relop)または定数に変換できれば、被支配側の比較を修正して削除できます。

例:if ((x >= 100) && (x <= 100)) S; → if (x == 100) S;

変更内容

  • src/coreclr/jit/valuenum.cpp (+375行): VN簡略化ロジックを拡張。NOT演算(二重否定、ド・モルガンの法則、relop否定)および同一オペランドを持つ関係演算子のAND/OR組み合わせ簡略化テーブルを追加
  • src/coreclr/jit/valuenum.h (+9行): 簡略化関数のヘッダー追加
  • src/coreclr/jit/redundantbranchopts.cpp (+97行): optRedundantDominatingBranchを拡張し、直接含意失敗時にVN簡略化を試行。簡略化成功時に被支配側のrelop を書き換え
  • テストコード追加: RedundantBranchSimplify.cs/.csproj により複数の簡略化パターンをテスト

パフォーマンスへの影響

JITコンパイル時に追加の簡略化処理が実行されますが、影響についての具体的なベンチマーク結果は提供されていません。コンパイルされたコードの実行時性能は、より効率的な比較演算への変換により向上する可能性があります。

関連Issue

#98227、#83859

その他

この最適化はJIT内部実装の改善であり、公開APIへの影響はありません。適用範囲は「ignorable」副作用を持つ場合には限定されていません。


#127124 JIT: propagate vector constants through assertion prop

  • 作成者: @EgorBo
  • 作成日時: 2026年04月19日 23:14:39(UTC)
  • マージ日時: 2026年04月24日 10:18:35(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT のアサーション伝播機能を拡張し、SIMD ベクトル定数(Vector64/128/256/512)の等値性/不等号チェックを認識して、ガード後のコード内でベクトル定数を伝播できるようにしました。これにより、ベクトル定数を使用する一般的なガード・パターンでより多くの定数畳み込み最適化が可能になります。

if (vec == Vector128<int>.Zero)
{
    // JIT がこのスコープ内の vec の使用すべてを Vector128<int>.Zero として定数伝播
}

変更内容

  • src/coreclr/jit/compiler.h: 新しいアサーション演算子 O2K_CONST_VEC を追加。アリーナ割り当てされた simd_t によるバッキング、等値性判定、出力機能、ファクトリ関数をサポート。VN ベースのSIMD定数伝播の適格性も拡張。
  • src/coreclr/jit/assertionprop.cpp: Vector*_op_Equality/op_Inequality パターンと GT_CNS_VEC の比較を認識してアサーション生成(浮動小数点ベース型は除外)。伝播時にSIMD定数を具体化(byref ABIパターンなどのSIMD型ロードへのVNベース伝播を含む)。

パフォーマンスへの影響

ベクトル定数伝播による定数畳み込みの増加により、一般的なガード・パターンでコード生成の最適化が向上します。詳細なベンチマーク結果は提供されていません。

関連Issue

なし

その他

この変更は内部JIT実装(アサーション伝播フェーズ)に関するもので、公開APIには影響ありません。浮動小数点ベース型を持つベクトルはアサーション生成から明示的に除外されています。


#127108 Fix xplat dump test OOM by splitting Helix payloads

概要

xplat dump テストの OOM 問題を、Helix ペイロードを分割することで修正します。従来は全プラットフォーム(linux-x64、linux-arm64、windows-x64、windows-x86、windows-arm64)のダンプを単一の MemoryStream ベースの ZipArchive に圧縮していたため、合計サイズが byte[] の ~2GB 制限を超えて OutOfMemoryException が発生していました。

変更内容

  • Helix ペイロード構造の変更(内部実装):
    • Correlation payload: テスト DLL(全ワークアイテム共通、1回のみアップロード)
    • Per-work-item payload: プラットフォーム固有のダンプ(ワークアイテムごとに1プラットフォーム)
  • ファイル変更:
    • eng/pipelines/runtime-diagnostics.yml: パイプライン設定の微調整
    • src/native/managed/cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj: ペイロード分割ロジックの実装

パフォーマンスへの影響

  • 各 zip ファイルサイズが 2GB 制限内に収まるため OOM を回避
  • テストバイナリが全ワークアイテムで重複されなくなるため、全体的なアップロードサイズ削減

関連Issue

なし

その他

  • Build 1384837 で検証済み:6 つの xplat ジョブ中 4 つが成功。2 つの失敗は 32 ビットホストの既知の問題で本変更と無関係

#127073 [browser] Native build on CoreCLR in Wasm.Build.Tests

概要

WebAssembly on CoreCLRのWasm.Build.Testsスイートで、ローカルおよびHelix環境での per-app ネイティブリリンク機能を有効化します。CoreCLR WBTレーンがBrowserWasmApp.CoreCLR.targetsを駆動するためのインフラストラクチャ(テンプレートインストール、EMSDK提供、環境変数ブリッジ、Helixペイロード)を追加し、ネイティブリリンクのエンドツーエンド動作を実現します。

変更内容

  • Helixペイロード設定 (src/libraries/sendtohelix-browser.targets)

    • CoreCLR + BuildWasmAppsシナリオにNeedsEMSDK=trueを強制
    • CoreCLRが不要な MicrosoftNetCoreAppRuntimePackDir、MonoAOTCompilerDir等のペイロードを除外
    • BrowserWasmApp.CoreCLR.targetsのインポートチェーン (eng/native.wasm.targets、eng/AcquireEmscriptenSdk.targets) をペイロードに含める
    • Helixプリコマンド経由で環境変数 (REPOSITORY_ENGINEERING_DIR、BROWSER_BUILD_TARGETS_DIR、WASM_APP_BUILDER_TASKS_ASSEMBLY_PATH、EMSDK_PATH) を設定
  • CoreCLR WBTエージェント上のEMSDK提供 (eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml)

    • build.sh -s provision.emsdk -os browserステップをsendtohelix実行前に追加
  • EMSDK獲得フック修正 (eng/AcquireEmscriptenSdk.proj)

    • Target属性をBeforeTargets="Build"に変更(Microsoft.Build.NoTargetsのBuildターゲットオーバーライド対策)
  • 環境変数配線 (複数ファイル)

    • Wasm.Build.Tests.csproj:ローカル実行時の環境変数エクスポート設定(EMSDK_PATHはfallback機能付き)
    • EnvironmentVariables.cs:新規環境変数を読み取り可能フィールドとして公開
    • BuildEnvironment.cs:環境変数をdotnet-newで生成されたプロジェクト構築に伝播
    • Local.Directory.Build.props/.targets:CoreCLR向けプロパティ設定およびターゲットインポート
  • WASMテンプレートインストール (Templates/WasmTemplateTestsBase.cs)

    • EnsureWasmTemplatesInstalledメソッド追加(double-checked lock)
    • dotnet new installでテンプレート登録、120秒タイムアウト機能付き
  • 非互換テストのスキップ (Templates/NativeBuildTests.cs)

    • BuildWithUndefinedNativeSymbol、BuildConsoleTemplateに[TestCategory("native")]タグを追加(CoreCLRでは除外)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • CI検証予定:本PR上で実施予定
  • フォローアップ:混合AOT/非AOTクラス内のメソッドを個別にリタグ化し、クラスレベルの除外を回避する予定
  • `eng/pipelines/runtime

#127031 Add cdac-dump-inspect script for ad-hoc dump analysis

概要

.NET クラッシュダンプの検査用開発ツール cdac-dump-inspect を追加しました。ClrMD と cDAC(契約ベースのデータアクセス)を使用して、WinDbg/SOS なしにダンプから契約記述子、スレッド、スタック情報を検査できます。

使用例:

./src/native/managed/cdac/scripts/cdac-dump-inspect.ps1 descriptor <dump-path>
./src/native/managed/cdac/scripts/cdac-dump-inspect.ps1 threads <dump-path>
./src/native/managed/cdac/scripts/cdac-dump-inspect.ps1 stacks <dump-path>

変更内容

  • DescriptorCommand.cs (+350行): 契約記述子の再帰的トラバーサルとマージ競合検出機能を実装
  • ThreadsCommand.cs (+80行): マネージスレッド一覧表示機能(OS ID、スレッド状態、アドレス表示)
  • StacksCommand.cs (+143行): マネージスタックウォーク機能(命令ポインタとメソッド記述子表示)
  • Program.cs (+19行): System.CommandLine を使用したCLIエントリポイント
  • DumpHelpers.cs (+65行): 契約記述子検索と cDAC ターゲット作成の共有ユーティリティ
  • ParsedDescriptor.cs (+12行): ParsedDescriptor レコード型定義
  • cdac-dump-inspect.ps1 (+66行): リポジトリローカル SDK を使用するビルド・実行用 PowerShell ラッパー
  • cdac-dump-inspect.csproj (+17行): ClrMD と cDAC 関連パッケージへの依存関係定義
  • README.md (+73行): 使用方法と前提条件のドキュメント

パフォーマンスへの影響

影響なし(開発者向けのデバッグツールのため、ランタイムパフォーマンスへの影響はなし)

関連Issue

なし

その他

  • NativeAOT サポート: 既知の CoreCLR モジュール外でも DotNetRuntimeContractDescriptor エクスポートをスキャンしてサポート
  • マージ競合検出: 複数の記述子間で重複した契約、型、グローバルを検出表示
  • 間接グローバル解決: ポインタデータアドレスと逆参照値の両方を表示(-> *0x... 形式)
  • 内部開発ツール(公開 API への影響なし)

#126963 Implement cDAC-backed DacDbi GetObjectForCCW and IsRcw + dump integration coverage

  • 作成者: @Copilot
  • 作成日時: 2026年04月15日 18:31:54(UTC)
  • マージ日時: 2026年04月24日 01:13:56(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Component Data Access Control)バックアップパスにおいて、COM相互運用関連のDacDbi API GetObjectForCCW と IsRcw の実装を追加します。既存のcDACコントラクトに基づいており、BuiltIn COM と ComWrappers の両シナリオに対応したダンプベースの統合テストも合わせて提供します。

変更内容

  • DacDbiImpl.cs: GetObjectForCCW と IsRcw の cDAC バックアップ実装を追加
    • GetObjectForCCW: ComWrappers優先の解決方法でBuiltIn COM フォールバック対応
    • IsRcw: IObject.GetBuiltInComData(...) を使用したRCW判定
    • DEBUG ビルド時のレガシーDAC との交差検証機能を含む
  • ComWrappers_1.cs: コントラクト定義の軽微な調整(+3/-2)
  • DacDbiCCWDumpTests.cs: BuiltIn COM CCW/インターフェースポインタ → オブジェクトハンドル解決の検証(Windows のみ)
  • DacDbiComWrappersDumpTests.cs: ComWrappers identity-pointer → マネージドオブジェクトラッパーハンドル解決の検証
  • DacDbiRCWDumpTests.cs: IsRcw がRCWに対しては true、非RCWに対しては false を返すことの検証(Windows のみ)

パフォーマンスへの影響

影響なし

関連Issue

#126963

その他

  • テスト対象はダンプベースの統合テストで、実際のダンプに対するCOM相互運用シナリオの検証を行います
  • Windows プラットフォーム限定のテストが存在します
  • 内部実装(DacDbi / cDAC)の変更であり、公開APIへの直接的な影響はありません

#126838 Bump Android minimum API level from 21 to 24

概要

Android向け.NETのランタイムをMonoからCoreCLRへ移行するため、サポート対象のAndroid最小APIレベルを21から24(Android 7.0 Nougat)に引き上げます。このAPIレベル以上が保証されることにより、API 21~23専用の互換性ワークアラウンド実装が削除でき、コードベースが簡潔になります。

変更内容

  • ビルド設定の統一: AndroidApiLevelMinをDirectory.Build.propsで24に引き上げ、ネイティブビルドスクリプト、MSBuildターゲット、タスク実装に反映
  • System.Native getifaddrs互換性シムの削除: API 24より前はBionic libc内にgetifaddrs/freeifaddrs実装がなかったため、netlink APIを使ったシム実装(pal_ifaddrs.c/h)を削除、ネイティブ実装へ統一
  • System.Security.Cryptography.Native.Android簡略化(JNI層):
    • API 23~24間で仕様が変わったSSLEngineResult.Status列挙型マッピング削除
    • Conscrypt内部API(OpenSSLEngineImplフィールド反射、SNIハンドシェイク処理)の削除
    • 標準APIのみ使用に統一(SSLEngine.getHandshakeSession()、SNIHostName/SSLParameters.setServerNames())
    • 証明書検証関連のAPI(CertPathValidatorException.getReason()、PKIXReason、PKIXRevocationChecker)をAPI 24必須に変更
  • テスト・ドキュメント更新: Android最小バージョン確認テストおよびAndroidビルドドキュメント更新

パフォーマンスへの影響

影響なし。本変更はコード簡潔化・保守性向上が主目的で、実行時のパフォーマンス改善は明記されていません。

関連Issue

#127265

その他

破壊的変更: Android API 21~23向けアプリケーション開発は本PRマージ後サポートされなくなります。

関連PR参照:

  • #71943, #76370: 削除されたgetifaddrsシムの導入背景
  • #94408: SSLEngineResult.Statusマッピングの導入背景
  • #78918: Conscrypt反射・SNI処理の導入背景

#126834 [QUIC] Remove check for AzL3 for QUIC and H/3 tests

  • 作成者: @ManickaP
  • 作成日時: 2026年04月13日 13:42:11(UTC)
  • マージ日時: 2026年04月24日 08:54:38(UTC)
  • ラベル: area-System.Net.Quic

概要

SymCrypt 1.9.5のリリースに伴い、Azure Linux 3 VM(AzL3)向けのQUICおよびHTTP/3テストスキップ条件を削除します。これまでMsQuicの互換性問題によりAzL3での実行がゲートされていましたが、更新されたSymCryptイメージにより問題が解決されたため、テスト実行を再度有効化します。

変更内容

  • QuicTestBase.cs: IsNotAzureLinux3VMヘルパープロパティを削除
  • QUIC機能テストクラス群(QuicStreamTests.cs、QuicConnectionTests.cs、QuicListenerTests.cs等): ConditionalClass属性からAzL3スキップ条件を削除
  • MsQuicテストクラス群(MsQuicTests.cs、MsQuicRemoteExecutorTests.cs等): ConditionalClass属性からAzL3スキップ条件を削除
  • HttpClientHandlerTestBase.SocketsHttpHandler.cs: HTTP/3サポート検出ロジックからAzL3ゲートを削除

パフォーマンスへの影響

影響なし

関連Issue

#123216

その他

このPRはテストインフラストラクチャの変更のみで、本体コード(ランタイム・ライブラリ)への影響はありません。テスト対象とするプラットフォームの範囲を拡大する内容です。


#126691 Fix LibraryImportDiagnosticsAnalyzer and DownlevelLibraryImportDiagnosticsAnalyzer missing diagnostics when StringMarshalling is set

概要

LibraryImportDiagnosticsAnalyzerとDownlevelLibraryImportDiagnosticsAnalyzerがStringMarshalling設定時に診断を報告しない回帰を修正。また、生成される内部[DllImport]スタブがStringMarshalling.Utf16設定時にCharSet = CharSet.Unicodeを省略し、転送型(例:StringBuilder)の実行時マーシャリングが不正になる問題を解決。

変更内容

  • LibraryImportDiagnosticsAnalyzer: GeneratedCodeAnalysisFlags.NoneからAnalyze | ReportDiagnosticsに変更し、生成コード判定されたメソッドでも診断を報告するよう修正。PartialDefinitionPartガードを追加して部分実装部での重複診断を防止。生成実装構文をスキップして利用者の部分宣言を検出し、診断フィルタリングで非生成ソースのみ報告。
  • DownlevelLibraryImportDiagnosticsAnalyzer: 同等のGeneratedCodeAnalysisFlags、PartialDefinitionPartガード、SYSLIB1050スキップ、診断フィルタリングを適用。
  • LibraryImportGenerator.CreateTargetDllImportAsLocalStatement: StringMarshalling.Utf16設定時に内部[DllImport]へCharSet = CharSet.Unicodeを転送。共有ヘルパーCreateEnumExpressionSyntaxを抽出して使用。
  • DownlevelLibraryImportGenerator.CreateTargetDllImportAsLocalStatement: 同等のCharSet転送修正と共有ヘルパー使用。
  • テスト追加: StringBuilderNotSupported_ReportsDiagnosticなどStringMarshallingバリアント での回帰テスト、および内部[DllImport]のCharSet検証テストを追加。

パフォーマンスへの影響

影響なし

関連Issue

#126691

その他

  • 互換性への影響:診断レポート動作の修正(従前は誤ってスキップされていた診断が正常に報告される)。
  • 生成コード判定の回帰:Preview.3で診断ロジックが生成器から分離アナライザーに移行した際、Roslyn の生成コード判定が[GeneratedCode]マークを持つスタブを含む部分メソッド全体を生成コードとして分類していた。
  • 全709ユニットテストがパス(1スキップ、0失敗)。

#126473 [release/10.0] [NET] Fix docker compose.

概要

System.Net ストレステストの Docker Compose ランナースクリプトをインフラストラクチャ変更に対応させる修正です。最近のイメージ変更による破損を解決するテスト基盤のみの変更で、プロダクトコードへの影響はありません。

変更内容

  • run-docker-compose.sh: bash ランナーを docker compose(Compose v2 プラグイン)を使用するように更新
  • run-docker-compose.ps1: PowerShell ランナーを docker-compose(Compose v1)を使用するように更新し、ログ/エラーメッセージを対応

パフォーマンスへの影響

影響なし(テスト基盤のみの変更)

関連Issue

なし

その他

  • テスト基盤のみの変更であり、プロダクトコードへの影響はなし
  • ストレステストパイプラインで実行・検証済み
  • リスク評価: 低(テスト基盤のみ変更)

#126159 Use libunwind's unw_get_proc_info_in_range on macOS

概要

macOSにおけるリモートアンワインド処理で、HP libunwindのunw_get_proc_info_in_range()APIを明示的に使用するように修正しました。CMakeの機能検出がシステムlibunwindの能力を報告するため、実際に使用するHP libunwindの能力と不一致が生じていた問題を解決します。

変更内容

  • src/coreclr/pal/src/exception/remote-unwind.cpp: __APPLE__マクロによる明示的なチェックを追加し、macOSでのリモートアンワインド時にHP libunwindのunw_get_proc_info_in_range()を確実に使用するように修正(+2/-2)

パフォーマンスへの影響

影響なし

関連Issue

#108250の修正漏れに対応

その他

  • この変更はcreatedumpユーティリティ(クロスプラットフォーム/アーキテクチャ対応の.NETクラッシュダンプ処理)のリモートアンワインド機能に限定した修正です
  • HP libunwindとシステム提供のlibunwind(llvm-libunwind)の両実装は同一の動作をするため、RHEL 9(HP libunwind 1.8以降が最小要件)がベースラインになった時点で、このフォールバック処理を削除可能です

#126105 [Interop] AddGeneratedComClassFixer: remove [ComVisible(true)] during conversion

  • 作成者: @Copilot
  • 作成日時: 2026年03月25日 16:59:37(UTC)
  • マージ日時: 2026年04月24日 03:09:09(UTC)
  • ラベル: area-Infrastructure

概要

AddGeneratedComClassFixerコード修正が、クラスを[GeneratedComClass]に変換する際に冗長な[ComVisible(true)]属性を削除していない問題を修正しました。別ファイルの部分宣言に存在する属性も対象に含まれます。

変換前:

[ComVisible(true)]
class C : I { }

変換後(修正後):

[GeneratedComClass] partial class C : I { }

変更内容

  • ConvertToSourceGeneratedInteropFixer.cs(基底クラス):修正デリゲート型をFunc<DocumentEditor, CancellationToken, Task>からFunc<SolutionEditor, DocumentId, CancellationToken, Task>に変更。複数ドキュメントの編集を単一のコードアクション内で可能にしました。
  • AddGeneratedComClassFixer.cs:SolutionEditorを使用するよう書き直し。すべての[ComVisible(true)]属性(複数の部分宣言を含む)をドキュメント全体から削除。solutionEditor.OriginalSolution.GetDocumentId()で各属性が存在するドキュメントを特定し、クロスドキュメント・同一ドキュメント・メタデータ(null)の各ケースを安全に処理。
  • ConvertComImportToGeneratedComInterfaceFixer.csとConvertToLibraryImportFixer.cs:新しいシグネチャに対応。
  • テスト追加:4つのテストケース(同一宣言での削除、[ComVisible(false)]の保持、同一ファイル内の別の部分宣言、別ファイルの部分宣言)。

パフォーマンスへの影響

影響なし

関連Issue

#94429

その他

  • 内部APIのみの変更(Roslyn分析ツール)。ランタイム動作への影響なし。
  • 基底クラスのリファクタリングは内部的な再構成で、既存フィッサー動作は保持。
  • 全8テスト(新規4テスト含む)がすべてパスし、回帰なし確認済み。

#126062 JIT: Handle edge cases around BlendVariableMask rewrite

概要

JIT の BlendVariableMask リライト処理におけるエッジケースを修正します。具体的には、インポート時に BlendVariable が BlendVariableMask にアップグレードされた後、rationalize フェーズで元の形式にダウングレードされる際の問題に対応しています。

マスク粒度が pblendvb 命令と互換性がない場合の不正なブレンド書き換えと、EVEX 埋め込みマスク最適化において ConvertVectorToMask から生成されたマスクを考慮せず無駄なマスク生成が行われる問題を修正しています。

変更内容

src/coreclr/jit/rationalize.cpp

  • RewriteHWIntrinsicBlendv 関数を拡張し、ブレンドマスクが NI_AVX512_ConvertVectorToMask 経由で生成されているケースを検出
  • 埋め込みマスクの保持を回避するための早期リターン条件を修正し、必要に応じてブレンドをマスク形式から非マスク形式にリライト可能に
  • マスク作成のみを目的とした無駄なマスク生成を防止

src/tests/JIT/Regression/JitBlue/Runtime_127260/Runtime_127260.cs

  • リグレッション テストケース追加(148行)

src/tests/JIT/Regression/Regression_ro_2.csproj

  • テストプロジェクト参照追加

パフォーマンスへの影響

改善あり。不要なマスク生成を回避することで、AVX-512 対応環境でのブレンド命令処理が最適化されます。具体的な数値ベンチマーク結果は提供されていません。

関連Issue

#127260

その他

レビューコメントで指摘されている潜在的な問題:op3 をローカル変数として取得した場合、RewriteHWIntrinsicToNonMask 呼び出し後に node->Op(3) が更新されない可能性があり、削除されたイントリンシックを指す dangling operand が残る可能性があります。オペランド参照 GenTree*& を使用するか、&node->Op(3) を直接渡すことで修正が必要です。


#125835 [mono] Restore signal handlers during crash chaining

概要

Mono のネイティブクラッシュハンドラが crash chaining 有効時に、事前インストールされたシグナルハンドラを SIG_DFL にリセットしてしまう問題を修正しました。この変更により、Sentry などのサードパーティツールが Mono より前にシグナルハンドラをインストールして、ネイティブクラッシュを適切にキャプチャできるようになります。

変更内容

  • mini-exceptions.c: mono_handle_native_crash 内のシグナルハンドラ(SIGABRT、SIGILL、SIGCHLD、SIGQUIT)のリセット処理を !mono_do_crash_chaining で条件付けし、crash chaining 有効時には実行されないようにしました。
  • mini-posix.c: 新しい公開API mono_runtime_posix_restore_handler を追加し、保存済みのシグナルハンドラを復元します。
  • mini-runtime.h: mono_runtime_posix_restore_handler の宣言を追加しました。
  • Android テストインフラ: CrashChaining Android 機能テストプロジェクトを新規追加。事前にインストールされた SIGSEGV ハンドラをトリガーしてネイティブクラッシュを発生させ、SIGABRT が SIG_DFL にリセットされていないことを検証します。
  • AndroidAppBuilder.cs/ApkBuilder.cs/CMakeLists-android.txt: テストビルドのためのインフラサポートを追加。

パフォーマンスへの影響

影響なし

関連Issue

#125835、外部リポジトリ issue: getsentry/sentry-dotnet#3954

その他

  • 変更は crash chaining が有効な場合のみ動作を変更します。無効時は従来通り SIG_DFL にリセットされます。
  • 保存済みハンドラはハッシュテーブルに保持され、mono_chain_signal が必要に応じてチェーンできる仕様です。
  • Android 機能テストは環境変数 TEST_CRASH_CHAINING で制御されます。

#123969 Improve FileLoadException message for assembly version conflicts with loaded assembly details

概要

アセンブリバージョン競合時のFileLoadExceptionメッセージを改善するPR。バインディング失敗時に既にロードされているアセンブリの詳細情報(バージョン、パス)を例外メッセージに含めることで、ユーザーがバージョン不一致の原因をより容易に診断できるようになります。

改善例:

// 改善前
Could not load file or assembly 'LibA, Version=2.0.0.0'...

// 改善後
A different copy of assembly 'LibA' is already loaded. 
Loaded assembly: 'LibA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 
from 'C:\repos\helloworld\bin\Debug\net10.0\LibA.dll'

変更内容

  • アセンブリバインディングAPI: AssemblyBinderCommon、DefaultAssemblyBinder、CustomAssemblyBinderにppExistingAssemblyOnFailure、ppExistingAssemblyOnConflictなどのオプション出力パラメータを追加し、バインディング失敗時に既ロードアセンブリを返すように拡張
  • バインディング失敗時の処理: バージョン不互換やMVID不一致で失敗した場合、既ロードアセンブリを呼び出し元に返却
  • エラーマッピング: FUSION_E_APP_DOMAIN_LOCKEDをFUSION_E_REF_DEF_MISMATCHにマップしてバージョン不一致時により詳細な情報を提供
  • テスト拡充: 異なるバージョンのアセンブリロード時の例外メッセージ検証テストを追加

パフォーマンスへの影響

影響なし

関連Issue

#123968

その他

  • DefaultAssemblyBinder・CustomAssemblyBinderの両方のコードパスで一貫性のある改善を実施
  • ランタイムリソースファイル(mscorrc.rc)に新しいエラーメッセージ定義を追加
  • 公開APIへの影響なし(バインダー内部実装の変更)

#123736 Migrate SpanArr inline array from InvalidCSharp*.il to C#

概要

SpanArr インラインアレイ型をIL(InvalidCSharpInlineArray.il)からC#(InlineArrayValid.cs)に移行するプルリクエストです。C# 12+のインラインアレイ機能を活用して、保守負荷を低減しながら言語進化を実証します。100個のSpan<object>要素を持つref structとして定義されています。

変更内容

  • 削除: InvalidCSharpInlineArray.ilからSpanArrのIL定義(47行削除)
  • 追加: InlineArrayValid.csにC#ベースのSpanArr ref struct実装(18行追加)
    • [InlineArray(100)]属性でアレイサイズを指定
    • LengthプロパティとAt(int index)メソッドを実装
    • [UnscopedRef]属性で参照の安全性を確保

なお、他の型(WithRefField、WithRefStructField、WithTypedReferenceField<T>など)はC#言語制限またはILの自己参照制約により、IL内に残されています。

パフォーマンスへの影響

影響なし。テスト用途の型定義であり、実行時動作は変わりません。

関連Issue

なし

その他

  • 純削減: 29行(47行IL削除 + 18行C#追加)
  • 変更ファイル: 2ファイルのみ
  • テスト動作に変更なし。SpanArrは移行前と同じセマンティクスを維持
  • 意図的に無効な型(明示的レイアウト、ゼロ/負の長さなど)はILに残存し、ネガティブテスト用途を継続

目次