注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #124862 Fix inverted IsNull check in RangeSectionMap::EnumMemoryRangeSectionMapLevel
- #124855 Add SSH and Copilot CLI features to devcontainer
- #124848 Fix three cDAC managed AMD64/X86 unwinder bugs found by native audit
- #124845 [cDAC] Fix AMD64 epilogue unwinder reading register number from wrong byte offset
- #124837 [Wasm RyuJit] more fixes from crossgen2 of spc
- #124831 Fix hijacking on arm32
- #124821 [runtime-diagnostics] Publish test dumps on failure
- #124820 Delete CORINFO_HELP_ENDCATCH
- #124814 Fix premature returns for argument/pointer checks in SOSDacImpl.cs
- #124813 Fix reachable Debug.Assert in SubReadStream.Read when seeked past end
- #124805 Implement ISOSDacInterface12::GetGlobalAllocationContext in cDAC SOSDacImpl
- #124803 Implement ISOSDacInterface::GetRegisterName in cDAC SOSDacImpl
- #124796 Add missing GC.KeepAlives to WMIInterop
- #124792 Remove calls to ToArray because string.Join already has overload for ROS
. - #124791 Use ConditionalFact/ConditionalTheory ctor that passes type
- #124786 Add CoreCLR runtime build for browser-wasm performance benchmarks
- #124783 [cDAC] Fix DebugInfo error codes for methods without debug metadata and add P/Invoke dump tests
- #124778 [main] Source code updates from dotnet/dotnet
- #124765 Fix Arm64: for 124357
- #124736 Enable case-sensitive LeadingStrings with frequency-based heuristic
- #124731 [Wasm RyuJit] internal registers, integer binop overflow checks
- #124684 Fix LoadExactInterfaceMap for sub-interfaces with complex type arguments under special marker parents
- #124590 Fix ALPN protocol list size field type and add boundary tests
- #124589 LoggerMessage source generator: preserve
ref readonly; forbidparams,scoped, and ref struct parameters - #124588 Mono: increase default stack size on s390x/ppc64le; support DOTNET_Thread_DefaultStackSize for setting stack size.
- #124548 [release/10.0] Source code updates from dotnet/dotnet
- #124519 Allow box_this pattern on composite r2r
- #124361 Backport XML doc comments for DispatchProxy from dotnet-api-docs
- #121906 fix: CreateSubdirectory failing for root directories
- #120275 [cDAC] GetCodeHeaderData fork
- #117956 Fuzz Json Deserializing
#124862 Fix inverted IsNull check in RangeSectionMap::EnumMemoryRangeSectionMapLevel
- 作成者: @max-charlamb
- 作成日時: 2026年02月25日 16:18:09(UTC)
- マージ日時: 2026年02月25日 22:00:00(UTC)
- ラベル: area-Diagnostics-coreclr
概要
RangeSectionMap::EnumMemoryRangeSectionMapLevelのテンプレートオーバーロードに存在する論理バグを修正するワンラインの変更です。IsNull()の条件が反転していたため、64ビット環境でレベルL2~L5のメモリ列挙時にNULLエントリを再帰処理し、有効なエントリをスキップしていました。この修正により、DAC(Debug Assist Component)によるメモリダンプ生成時に、正しくすべてのメモリ領域が列挙されるようになります。
変更内容
- ファイル:
src/coreclr/vm/codeman.h - 変更内容: テンプレートオーバーロード内のIsNull()条件を反転(1行目の
if (level[i].IsNull())をif (!level[i].IsNull())に変更) - 対象: レベルL1のオーバーロード(非テンプレート版)で既に正しい条件が使用されていたため、テンプレート版もこれに合わせることで一貫性を確保
パフォーマンスへの影響
直接的なパフォーマンス改善というより、正確性の修正です。修正により:
- 不要なNULLポインタの逆参照が回避され、クラッシュ防止
- DAC列挙時に正しいメモリ領域のみ処理されるため、メモリダンプがより完全かつ効率的に生成される
- 64ビット環境で深いレベル(L2~L5)のメモリ情報が正常に取得可能に
関連Issue
なし
その他
このバグは64ビット環境に限定されます(32ビットではL1レベルのみ使用)。ダンプ生成やメモリ診断機能に影響するため、デバッグやサポート診断の品質向上に寄与します。
#124855 Add SSH and Copilot CLI features to devcontainer
- 作成者: @maraf
- 作成日時: 2026年02月25日 13:11:51(UTC)
- マージ日時: 2026年02月25日 17:05:01(UTC)
- ラベル: area-Infrastructure
概要
このPRは、dotnet/runtimeのdev containerの設定にSSH(sshd)とGitHub Copilot CLIの機能を追加しています。開発環境でSSHアクセスおよびCopilot CLIの利用が可能になります。
変更内容
| ファイル | 変更内容 |
|---|---|
.devcontainer/devcontainer.json |
sshd機能を追加、copilot-cli機能を追加、既存のgithub-cli機能を保持した上でfeaturesマップを拡張 |
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- Dev Container Featuresの追加により、開発者はコンテナ内でSSHサーバーを実行でき、リモートアクセスが可能になります
- Copilot CLI機能により、コンテナ内でAIアシスタント機能を利用できるようになります
- この変更は開発環境の設定のみに影響し、ランタイムコンパイルやパッケージには影響ありません
#124848 Fix three cDAC managed AMD64/X86 unwinder bugs found by native audit
- 作成者: @Copilot
- 作成日時: 2026年02月25日 06:01:23(UTC)
- マージ日時: 2026年02月25日 17:31:39(UTC)
- ラベル: area-Diagnostics-coreclr
概要
cDAC(Compact Diagnostics Access Control)マネージドスタックアンワインダーの3つの正確性バグを修正します。AMD64アンワインダーでは、UWOP_PUSH_MACHFRAMEが誤ってマシンフレームフラグをfalseに設定してRIP/RSPを二重読込みする問題、UWOP_SAVE_NONVOL_FARオペコードの未実装により非volatile レジスタ復元が失敗する問題を修正。X86アンワインダーではデバッグ用のConsole.WriteLineを削除します。
// Bug 1: UWOP_PUSH_MACHFRAME - machineFrame = false → true に修正
case UnwindCode.OpCodes.UWOP_PUSH_MACHFRAME:
{
machineFrame = true; // 修正前: false
// ...
}
// Bug 2: 不足していた UWOP_SAVE_NONVOL_FAR ケースを追加
case UnwindCode.OpCodes.UWOP_SAVE_NONVOL_FAR:
{
uint frameOffset = GetUnwindCode(unwindInfo, index + 1).FrameOffset;
frameOffset += (uint)(GetUnwindCode(unwindInfo, index + 2).FrameOffset << 16);
SetRegister(ref context, unwindOp.OpInfo, _target.ReadPointer(frameBase + frameOffset));
index += 2;
break;
}
変更内容
- AMD64Unwinder.cs:
UWOP_PUSH_MACHFRAMEでmachineFrameをfalseからtrueに修正(1行変更)。後続のコード(行1046-1049)でif (!machineFrame)チェックにより、不正な二重RIP読込みを防止 - AMD64Unwinder.cs:
UnwindPrologueスイッチにUWOP_SAVE_NONVOL_FARケースを追加(16行追加)。32ビット変位から2つのインデックススロットを消費してnonvolatileレジスタを復元 - X86Unwinder.cs:
UnwindEspFrame内のConsole.WriteLine(methodStart)を削除(2行削除)
パフォーマンスへの影響
直接的なパフォーマンス改善なし。ただしバグ修正により、トラップ/割り込みフレームアンワインド時の不正なメモリアクセス(二重RIP読込み)と、nonvolatile レジスタ復元失敗による不安定な動作が解消されます。デバッグ用Console.WriteLineの削除により、ESP フレームアンワインド処理での不要なI/O処理が削減されます。
関連Issue
なし
その他
本修正は、ネイティブC++実装(dbs_stack_x64.cpp/gc_unwind_x86.inl)のコードレビュー監査に基づく修正です。Bug 1は高重度(RIP/RSP破損)、Bug 2は中重度(レジスタ復元失敗)、Bug 3は低重度(デバッグ出力)と分類されており、すべてスタックアンワインド動作の正確性に直結します。
#124845 [cDAC] Fix AMD64 epilogue unwinder reading register number from wrong byte offset
- 作成者: @Copilot
- 作成日時: 2026年02月25日 05:13:01(UTC)
- マージ日時: 2026年02月25日 17:31:09(UTC)
- ラベル: area-Diagnostics-coreclr
概要
AMD64 cDAC アンウインダーの epilogue emulation において、単一バイト pop r64 命令(レジスタ 0–7)のレジスタ番号を誤ったバイトオフセットから読み込んでいたバグを修正しました。pop r64 は単一バイトのオプコード(0x58 + r)であり、レジスタは opcode バイト自体の下位 3 ビットにエンコードされているため、nextByte + 2 から読むと任意の命令列のバイトを読み込み、unwound レジスタコンテキストが破損していました。
// 修正前(誤り — opcode の 2 バイト先を読む)
byte registerNumber = (byte)(ReadByteAt(nextByte + 2) & 0x7);
// 修正後(正 — nextByte から直接読む)
byte registerNumber = (byte)(ReadByteAt(nextByte) & 0x7);
変更内容
AMD64Unwinder.cs479行目:ReadByteAt(nextByte + 2)→ReadByteAt(nextByte)に修正し、pop r64opcode バイトからレジスタ番号を正しく抽出。ネイティブアンウインダー(dbs_stack_x64.cpp)の実装と一致させました。
パフォーマンスへの影響
影響なし。本修正は正確なレジスタ復元のための正確性の向上であり、パフォーマンスへの直接的な影響はありません。
関連Issue
なし
その他
- REX プリフィックス付きの
popケース(レジスタ 8–15)および非 epilogue の epilogue 検出スキャンは正しく機能しており、この修正の影響を受けません。 - 既存 cDAC テストスイート(836 テスト)がすべてパスしており、ネイティブ DAC との stack walk の収束性が改善されます。
- 本修正により、後続フレームの不正な instruction pointer へのカスケード的な影響を防止できます。
#124837 [Wasm RyuJit] more fixes from crossgen2 of spc
- 作成者: @AndyAyersMS
- 作成日時: 2026年02月25日 01:02:21(UTC)
- マージ日時: 2026年02月25日 03:36:49(UTC)
- ラベル: area-CodeGen-coreclr
概要
WASM RyuJitコンパイラがSystem.Private.CoreLibのcrossgen2処理中に検出された複数の問題を修正するPRです。構造体の処理、値番号付け、制御フロー、スイッチ最適化に関する5つの主要な修正が含まれています。
変更内容
| ファイル | 主な変更 |
|---|---|
| WasmLowering.cs | by-refで渡される/返される構造体のハンドリングに対応。LowerToAbiTypeがnullの場合、フォールバックとしてポインタ型を返す |
| valuenum.cpp | 値番号付けの検証を緩和。3個以上の引数を持つヘルパー呼び出しでWasmPortableEntryPointを許容 |
| layout.h | 8バイト構造体をプリミティブ型(TYP_LONG)として返せるよう対応。TARGET_64BITに加えてTARGET_WAsmを含める |
| fgwasm.cpp | EH経由でのみ到達可能なブロックに対してNYI例外を適切に報告する機能を追加 |
| fgopt.cpp | GT_JMPTABLE削除最適化をWASM向けに無効化(WAsmはジャンプテーブルを使用しない) |
パフォーマンスへの影響
懸念点:
- EH経由のみ到達可能なブロックに対するNYI例外の追加により、該当するWASM関数はコンパイル失敗またはフォールバック動作となる可能性がある
改善点:
- 8バイト構造体をプリミティブ値として返すことで、構造体参照のオーバーヘッドが削減される可能性がある
- WASM非対応の最適化を明示的に除外することで、不正な最適化によるランタイムエラーを防止
関連Issue
なし
その他
このPRはWASM RyuJitのSystem.Private.CoreLib互換性改善を目的とした段階的な修正シリーズの一部です。NYI(Not Yet Implemented)例外の追加により、未対応機能が明確に識別可能になり、今後の実装優先度決定に役立ちます。
#124831 Fix hijacking on arm32
- 作成者: @MichalStrehovsky
- 作成日時: 2026年02月24日 22:57:50(UTC)
- マージ日時: 2026年02月25日 04:51:18(UTC)
- ラベル: area-NativeAOT-coreclr runtime-async
概要
ARM32 のNativeAOT GC hijack パスにおいて、非同期継続を保持するr2レジスタが上書きされるバグを修正しました。RhpWaitForGcを通じてThread*をr3で保持することで、r2の値が保護される前に破壊されるのを防ぎます。
// ARM32 アセンブリレベルの修正
// 修正前: mov r2, r3 が r2 を上書きしていた
// 修正後: RhpWaitForGC が r3 から直接 Thread* を取得
変更内容
- src/coreclr/nativeaot/Runtime/arm/GcProbe.S
RhpWaitForGCを更新:Thread*入力としてr3をPUSH_PROBE_FRAMEに渡すよう修正RhpGcProbeHijack内のmov r2, r3命令を削除:非同期継続レジスタが保存される前に上書きされるのを防止
パフォーマンスへの影響
影響なし。本修正は正確性(correctness)のための変更であり、パフォーマンスへの直接的な影響はありません。むしろ非同期操作の信頼性向上に寄与します。
関連Issue
- #123526(関連する前の修正)
- #122526(このPRで解決)
- #123979(ARM32上の関連する問題)
その他
本修正はNativeAOT のGC probe hijack メカニズム(ARM32アーキテクチャ)に関わるレジスタ保護の問題です。r2レジスタは非同期継続を保持する可能性があるため、GC待機処理前に破壊されないようレジスタ割り当てを調整しています。
#124821 [runtime-diagnostics] Publish test dumps on failure
- 作成者: @max-charlamb
- 作成日時: 2026年02月24日 20:45:55(UTC)
- マージ日時: 2026年02月25日 16:52:28(UTC)
- ラベル: area-Diagnostics-coreclr
概要
Azure Pipelines の runtime-diagnostics ジョブで、テスト失敗時に自動的にクラッシュダンプとテストログをパイプラインアーティファクトとして公開するように更新しました。これにより、cDAC/DAC実行時の失敗調査が改善されます。
変更内容
- eng/pipelines/runtime-diagnostics.yml
- クラッシュダンプ (
artifacts/tmp/$(_BuildConfig)/dumps) を失敗時にアーティファクトとして公開 - テスト結果と SOS ログ (
artifacts/TestResults) を失敗時にアーティファクトとして公開 - cDAC と DAC の両方の診断ジョブに適用
- クラッシュダンプ (
パフォーマンスへの影響
影響なし。本変更は CI/CD パイプラインの構成変更であり、ランタイムやテスト実行のパフォーマンスには直接的な影響を及ぼしません。
関連Issue
記載されていません。
その他
- 本変更はデバッグ・トラブルシューティング機能の改善に焦点を当てており、失敗時のログ収集を自動化することで開発効率を向上させます。
- パイプラインの成功時には追加のアーティファクト出力は発生しないため、ストレージへの影響は最小限です。
#124820 Delete CORINFO_HELP_ENDCATCH
- 作成者: @jkotas
- 作成日時: 2026年02月24日 20:33:54(UTC)
- マージ日時: 2026年02月25日 02:59:54(UTC)
- ラベル: area-CodeGen-coreclr
概要
x86時代の例外処理(EH)レガシー機能であるCORINFO_HELP_ENDCATCH JITヘルパーを削除するクリーンアップPRです。JIT/EEインターフェース、ReadyToRunヘルパーマッピング、およびNativeAOT反射マップから該当機能を完全に削除し、JIT/EEインターフェースバージョンGUIDを更新します。
変更内容
- JIT/EEインターフェース:
CorInfoHelpFunc列挙型からCORINFO_HELP_ENDCATCHを削除(corinfo.h、jithelpers.h) - ReadyToRunヘルパー:
READYTORUN_HELPER_EndCatchマッピングを削除し、readytorunhelpers.hから対応するマクロを削除 - NativeAOT:
UnboxingAndInstantiatingStubMap(blob id 15)を未使用としてマーク(MetadataBlob.cs) - バージョン管理: jiteeversionguid.hのJIT/EEインターフェースバージョンGUIDを更新
- 実装: CorInfoImpl.ReadyToRun.csからR2Rマッピングを削除、jit/utils.cppからヘルパーテーブルエントリを削除
パフォーマンスへの影響
影響なし。本変更は不要な機能の削除であり、実行時パフォーマンスへの直接的な影響はありません。
関連Issue
なし
その他
- readytorun.hの
READYTORUN_HELPER_EndCatch列挙型値は互換性維持のため残されていますが、R2R v14.0以降は未使用として注釈付けされています - JIT/EEインターフェースバージョンGUIDの更新により、新旧バージョン間の互換性チェックが機能します
- 合計37行の削除で、古い例外処理機構の完全なクリーンアップが実現されています
#124814 Fix premature returns for argument/pointer checks in SOSDacImpl.cs
- 作成者: @Copilot
- 作成日時: 2026年02月24日 20:18:11(UTC)
- マージ日時: 2026年02月25日 03:51:27(UTC)
- ラベル: area-VM-coreclr
概要
SOSDacImpl.csの約30個のメソッドで、引数・ポインタ検証チェックをtryブロック前から内部に移動し、早期リターンを例外スローに変更。これにより、catch ブロックのHResult変換と#if DEBUGブロックが確実に実行されるように修正。
// Before —検証がtry/catchをバイパス
if (data == null)
return HResults.E_INVALIDARG;
// After — 検証がエラーハンドリング の一部に
try
{
if (data == null)
throw new ArgumentException();
// ...
}
catch (Exception ex) { hr = ex.HResult; }
変更内容
- SOSDacImpl.cs (+190行/-241行):
- E_INVALIDARG チェック →
throw new ArgumentException()に変更 - E_POINTER チェック →
throw new NullReferenceException()に変更 - ISOSDacInterface14 メソッド、GetILForModule、GetMethodDescFromToken、TraverseModuleMap の if/else ガード → 統一된 try/catch 構造に統合
- Switch default ケース → 例外スロー(処理継続を防止)
- GetPEFileName の内部リターン → NotImplementedException スロー(null パス上での後続処理を防止)
- SOSMethodEnum.GetCount → try/catch ラッパー追加
- GetThreadFromThinlockID → null チェック後のデリファレンス回避(潜在的バグ修正)
- E_INVALIDARG チェック →
パフォーマンスへの影響
影響なし。エラー条件の処理フローが統一されるだけで、正常系のパフォーマンスは不変。
関連Issue
なし
その他
- テスト実績: 既存の832個のcDAC単体テストがすべてパス
- 互換性: 内部実装の改善であり、公開APIの変更なし
- セキュリティ: GetThreadFromThinlockID の潜在的なnullデリファレンスバグを修正
#124813 Fix reachable Debug.Assert in SubReadStream.Read when seeked past end
- 作成者: @Copilot
- 作成日時: 2026年02月24日 19:39:48(UTC)
- マージ日時: 2026年02月25日 16:31:39(UTC)
- ラベル: area-System.IO.Compression
概要
SubReadStream(ZIP非圧縮エントリで使用)では、Seek(offset, SeekOrigin.End)またはPosition = value > Lengthでストリーム終端を超えてシークが可能でしたが、Readメソッドの3つのオーバーロードすべてが_positionInSuperStream <= _endInSuperStreamを前提としており、負の値を計算してDebug.Assert(count >= 0)に到達していました。本修正では、終端を超える位置での読み取り時に0バイトを返すよう改善しています。
ms.Position = 0;
using var readArchive = new ZipArchive(ms, ZipArchiveMode.Read);
using var readStream = readArchive.Entries[0].Open(); // 非圧縮エントリ
readStream.Seek(1, SeekOrigin.End); // 終端を超えてシーク
readStream.Read(buffer, 0, buffer.Length); // ← Debug.Assertが発火していた
変更内容
ZipCustomStreams.cs
Read(byte[], int, int)— カウント値をMath.Max(0L, _endInSuperStream - _positionInSuperStream)でクランプRead(Span<byte>)— 同様のクランプを適用ReadAsync(Memory<byte>)— バッファスライス長に同じクランプを適用
zip_ReadTests.cs
- テスト
ReadAfterSeekingPastEnd_ReturnsZeroBytesを追加 - 非圧縮ZIP エントリのシーク後の同期・非同期読み取りパスをカバー
- 読み取り前後の
Position値を検証
- テスト
パフォーマンスへの影響
影響なし。修正はエッジケース(終端を超えるシーク後の読み取り)でのみ適用され、通常の読み取りパスは変わりません。追加されるのはクランプ計算のみで、性能劣化はありません。
関連Issue
dotnet/runtime#124811
その他
なし
#124805 Implement ISOSDacInterface12::GetGlobalAllocationContext in cDAC SOSDacImpl
- 作成者: @Copilot
- 作成日時: 2026年02月24日 17:35:57(UTC)
- マージ日時: 2026年02月25日 14:47:18(UTC)
- ラベル: area-Diagnostics-coreclr
概要
このPRは、cDAC(Compact Diagnostics And Contracts)のSOSDacImplにISOSDacInterface12::GetGlobalAllocationContextを実装し、グローバルな割り当てコンテキストへのアクセスを提供します。ネイティブのClrDataAccess::GetGlobalAllocationContextをミラーリングし、GCコントラクト層を通じてg_global_alloc_contextを公開します。
// SOSDacImpl.cs での実装例
public int GetGlobalAllocationContext(out TargetPointer allocPtr, out TargetPointer allocLimit)
{
try
{
_target.Contracts.GC.GetGlobalAllocationContext(out allocPtr, out allocLimit);
return S_OK;
}
catch
{
allocPtr = default;
allocLimit = default;
return E_FAIL;
}
}
変更内容
- datadescriptor.inc:
g_global_alloc_contextをGlobalAllocContextグローバルポインタとして公開 - Constants.cs:
GlobalAllocContext定数を追加 - IGC.cs: IGCコントラクトインターフェイスに
GetGlobalAllocationContextメソッドシグネチャを追加 - GC_1.cs:
EEAllocContext→GCAllocContextを走査して実装 - SOSDacImpl.cs: レガシー実装から、パラメータ検証とエラーハンドリングを含むcDAC実装に置き換え
- GC.md:
EEAllocContextデータ型、グローバル変数、API署名、実装疑似コードを文書化 - WorkstationGCDumpTests.cs: グローバル割り当てコンテキストの読み取り可能性と不変式(allocPtr ≤ allocLimit)を検証するテストを追加
パフォーマンスへの影響
影響なし。本変更はデバッグおよび診断機能の実装であり、ランタイムのパフォーマンスクリティカルパスには影響しません。
関連Issue
https://github.com/dotnet/runtime/issues/124824
その他
- 実装は
ProcessedData.GetOrAddを使用してEEAllocContext/GCAllocContextデータ型を走査し、ネイティブDACがメモリを逆参照する方法をミラーリングします #if DEBUGセクションでレガシー実装との比較検証が含まれます- レビュアーから、新しく追加されたテストに
.NET 10.0でスキップ属性を追加する必要があるという指摘があります(GCコントラクトが.NET 10ダンプで利用できないため)
#124803 Implement ISOSDacInterface::GetRegisterName in cDAC SOSDacImpl
- 作成者: @Copilot
- 作成日時: 2026年02月24日 17:15:40(UTC)
- マージ日時: 2026年02月25日 14:46:13(UTC)
- ラベル: area-Diagnostics-coreclr
概要
cDAC(Compact Data Access Contract)のSOSDacImplクラスにGetRegisterNameメソッドを実装しました。レガシーDAC委譲からRuntimeInfoコントラクトベースの実装に移行し、実行時にGetTargetArchitecture()でターゲットアーキテクチャを動的に判定します。X64、X86、ARM、ARM64、LoongArch64、RiscV64の6つのアーキテクチャに対応し、コンパイル時の#ifdefガードが不要になります。
変更内容
| ファイル | 変更内容 |
|---|---|
SOSDacImpl.cs |
GetRegisterName実装:アーキテクチャ別のレジスタ名配列、Caller frameエンコーディング(負数で"caller.<reg>")、エラーハンドリング(E_POINTER/E_UNEXPECTED/S_FALSE)、DEBUG時のレガシーDAC比較ロジック |
GetRegisterNameTests.cs |
32個のテスト:全6アーキテクチャ、Caller frameプレフィックス、null/小バッファ対応、範囲外インデックス、非サポートアーキテクチャ(Wasm) |
パフォーマンスへの影響
影響なし
実行時のアーキテクチャ判定によるオーバーヘッドは、メソッド呼び出し時の1回限定で無視できるレベルです。OutputBufferHelpersを使用したバッファ処理は既存の確立されたパターンを継承しており、パフォーマンス低下はありません。
関連Issue
Issue #124823: GetRegisterName実装の要件
その他
- 互換性: API互換性を保ちながらレガシーDAC依存を削除
- エラーハンドリング: HResult マッピングは確立されたパターン(例:
IsRCWDCOMProxy)に従う - デバッグ支援:
#if DEBUGで未変更のregNameパラメータを直接使用したレガシーDAC比較により、マイグレーション検証が可能
#124796 Add missing GC.KeepAlives to WMIInterop
- 作成者: @EgorBo
- 作成日時: 2026年02月24日 14:53:53(UTC)
- マージ日時: 2026年02月25日 13:27:39(UTC)
- ラベル: area-System.Management
概要
System.Management WMIインターオップレイヤーにおけるGCセーフティの問題を修正するPRです。ネイティブコールバックに渡されるIntPtrフィールドを含むオブジェクトが、ガベージコレクションされる可能性があったため、GC.KeepAlive呼び出しを追加してオブジェクトをルート化しました。
変更内容
src/libraries/System.Management/src/System/Management/InteropClasses/WMIInterop.cs
CompareTo_メソッド内にGC.KeepAlive(pCompareTo)を追加PutMethod_メソッド内にGC.KeepAlive(pInSignature)とGC.KeepAlive(pOutSignature)を追加
これらの変更は、IWbemClassObjectFreeThreadedクラスのIntPtrフィールドを暗黙の変換演算子経由でネイティブコードに渡す際、ラッパーオブジェクトがネイティブ呼び出し中にGCされるリスクを排除しています。
// CompareTo_メソッド内での追加例
GC.KeepAlive(pCompareTo);
// PutMethod_メソッド内での追加例
GC.KeepAlive(pInSignature);
GC.KeepAlive(pOutSignature);
パフォーマンスへの影響
影響なし。GC.KeepAliveは実行時にコストを持たないノー・オプ命令として機能し、ジッターにより最適化されます。正確性を確保するためのメモリセーフティ改善です。
関連Issue
なし
その他
この修正は、Opusによってハイライトされた潜在的なGCセーフティ問題に対応しています。IntPtrフィールドをネイティブコードに渡す際にラッパーオブジェクトが明示的にルート化されていないため、予期しない早期GCのリスクがありました。この変更により、COM相互運用レイヤーの堅牢性が向上します。
#124792 Remove calls to ToArray because string.Join already has overload for ROS.
- 作成者: @cincuranet
- 作成日時: 2026年02月24日 13:42:15(UTC)
- マージ日時: 2026年02月25日 08:17:43(UTC)
- ラベル: area-System.Net.Http
概要
string.Join()メソッドがReadOnlySpan<string>型のオーバーロードに対応していることを活用し、不要な.ToArray()呼び出しを削除してメモリアロケーションを削減する最適化です。Http2Connectionのロギングコード内の2箇所で改善されています。
// 修正前
string.Join(", ", headers.Select(h => h.Key).ToArray())
// 修正後
string.Join(", ", headers.Select(h => h.Key))
変更内容
- src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/Http2Connection.cs
- ロギングステートメント内の
.ToArray()呼び出し2箇所を削除 ReadOnlySpan<string>を直接受け取るstring.Joinオーバーロードを活用
- ロギングステートメント内の
パフォーマンスへの影響
改善点: 診断・トレーシングコードパスにおいて、条件付き実行時のメモリアロケーションが削減されます。特にHTTP/2通信のロギングが有効な場合、配列生成処理が不要になるため、GCプレッシャーの軽減につながります。
関連Issue
なし
その他
この変更は公開APIの変更ではなく、内部実装の最適化です。HTTP/2接続のロギングが無効な場合の性能的な影響はありません。
#124791 Use ConditionalFact/ConditionalTheory ctor that passes type
- 作成者: @akoeplinger
- 作成日時: 2026年02月24日 12:42:09(UTC)
- マージ日時: 2026年02月25日 13:52:06(UTC)
- ラベル: area-Meta
概要
xUnit v3への対応に向けて、ConditionalFactおよびConditionalTheory属性の使用を、型パラメータを受け取るコンストラクタへ移行するテストコード全体の大規模アップデートです。旧コンストラクタが非推奨化されたため、309ファイルにわたって統一的に変更されています。
変更内容
- 対象: dotnet/runtimeテストコード全体(309ファイル)
- 主な変更:
ConditionalFactおよびConditionalTheory属性のインスタンス化を、型パラメータを明示的に指定するコンストラクタの使用に統一 - 影響範囲:
- ホスト有効化テスト
- ネットワーク・HTTP テスト
- セキュリティ・暗号化テスト
- ホスティング・ロギングテスト
- その他ライブラリテスト
パフォーマンスへの影響
影響なし。本変更は属性の呼び出し方式の統一であり、ランタイム実行時のパフォーマンスには直接的な影響はありません。
関連Issue
関連PR: https://github.com/dotnet/arcade/pull/16537
その他
- 互換性: xUnit v3への準備作業。旧コンストラクタは非推奨化されているため、このアップデートはxUnit v3採用時の必須対応です。
- スケール: 309ファイルにわたる大規模な機械的変更のため、Copilotが自動レビューを実施できませんでした。変更内容は定型的で単純な属性使用方法の統一化です。
#124786 Add CoreCLR runtime build for browser-wasm performance benchmarks
- 作成者: @ilonatommy
- 作成日時: 2026年02月24日 08:40:52(UTC)
- マージ日時: 2026年02月25日 12:38:14(UTC)
- ラベル: area-VM-coreclr perf-pipeline
概要
このPRは、browser-wasmのパフォーマンスベンチマークパイプラインにおいて、既存のMono実装に加えてCoresCLRランタイムのビルドとテストサポートを追加するものです。新しいビルドジョブを追加し、パラメータ化することでCoresCLRとMono両方のランタイムでwasmベンチマークを実行できるようになります。
変更内容
perf-wasm-build-jobs.yml
- CoresCLR向けbrowser_wasmビルドジョブを追加(アーティファクト名: BrowserWasmCoreCLR)
- 既存のMono向けジョブと並行実行可能な設定
perf-wasm-prepare-artifacts-steps.yml
runtimeFlavorとartifactNameパラメータを導入してテンプレートをパラメータ化- CoresCLRとMono両方のランタイムに対応
パフォーマンスへの影響
CoresCLRアーティファクトはMonoと比較して小さいサイズ(ランタイムパックのみが必要)となります。これにより、ベンチマーク実行時に--wasm-coreclrオプションを使用してCoresCLRとMonoのランタイム間でパフォーマンスを比較することが可能になります。アーティファクトサイズの削減により、ビルドおよび検証時間の短縮が期待できます。
関連Issue
なし
その他
- 変更は2つのテンプレートファイル(YAMLパイプライン設定)に限定されており、コア実装への変更はありません
- 本PR変更により、開発者はwasm環境でのランタイム選択肢が拡がり、より詳細なパフォーマンス分析が可能になります
#124783 [cDAC] Fix DebugInfo error codes for methods without debug metadata and add P/Invoke dump tests
- 作成者: @max-charlamb
- 作成日時: 2026年02月24日 03:44:34(UTC)
- マージ日時: 2026年02月25日 17:58:07(UTC)
- ラベル: area-Diagnostics-coreclr
概要
cDAC(Compact Data Access Component)の GetILAddressMap と GetILOffsetsByAddress メソッドが、デバッグメタデータを持たないメソッド(ILStubs など)に対して正しくないエラーコード(0x80131c49)を返していた問題を修正しました。レガシーDAC と同じ E_FAIL (0x80004005) を返すようにします。また、P/Invoke シナリオ向けの包括的なダンプベースの統合テストとOS対応テストスキップ機能を追加します。
// 修正前:デバッグ情報なしの場合、例外経由の予期しないHResultが返されていた
// 修正後:HasDebugInfo() で明示的にチェック
var hasDebugInfo = debugInfo.HasDebugInfo(pCode);
if (!hasDebugInfo)
{
throw (int)HResults.E_FAIL;
}
var offsetMappings = debugInfo.GetMethodNativeMap(pCode); // 非null返却
変更内容
コア修正(IDebugInfo契約変更)
IDebugInfo.GetMethodNativeMap()の戻り値型をIEnumerable<OffsetMapping>からIEnumerable<OffsetMapping>?に変更- 新 API
bool HasDebugInfo(TargetCodePointer pCode)を追加 DebugInfo_1/2.cs:debugInfo ポインタがヌルの場合は null を返すようチェック追加ClrDataMethodInstance.cs:GetILOffsetsByAddressとGetILAddressMapの両メソッドで null チェック後にE_FAILをスロー
テストインフラ追加
DumpInfo.cs:ダンプと共にメタデータ(OS/アーキテクチャ)をdump-info.jsonに記録SkipOnOSAttribute.cs:[SkipOnOS(IncludeOnly = "windows")]でOS固有テストのスキップを実装DumpTests.targets:ダンプ作成時に自動的にdump-info.jsonを生成する MSBuild ターゲット
新規デバッグ対象
VarargPInvoke:__arglist経由でsprintfを呼び出し、ネイティブ内クラッシュでスタックにスタブフレームを残すPInvokeStub:SetLastError=trueのP/Invoke経由でILStubDynamicMethodDesc生成、nullargs での memcpy クラッシュ
パフォーマンスへの影響
影響なし。このPRは主にバグ修正とテスト基盤整備であり、ランタイムパフォーマンスへの直接的な影響はありません。
関連Issue
なし
その他
互換性について:IDebugInfo.GetMethodNativeMap() の戻り値型が nullable に変更されるため、このインターフェイスを直接実装している外部コードがあれば、null チェック処理の追加が必要になります。ただし内部実装(Legacy DAC)では既に対応済みです。
テスト失敗の原因:CI の !clru -il コマンド実行時、cDAC が VarargPInvokeStub に対して HResult 80131c49(VirtualReadException)を返していたのに対し、レガシーDAC は 80004005(E_FAIL)を
#124778 [main] Source code updates from dotnet/dotnet
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年02月24日 02:08:24(UTC)
- マージ日時: 2026年02月25日 23:23:14(UTC)
- ラベル: area-codeflow
概要
VMR(Virtual Monorepo)から dotnet/runtime へのコードフロー更新です。2026年2月24日時点で、Roslyn、NuGet、System.Text.Json、ASP.NET Core など複数の主要コンポーネントの依存関係が一括更新されています。ソースコードの変更は限定的で、主にバージョン管理ファイルと JIT リグレッション テストの追加です。
変更内容
- バージョン管理ファイル:
eng/Version.Details.props、eng/Version.Details.xml、eng/Versions.propsが更新 - 依存関係の更新:
- Microsoft.CodeAnalysis ファミリ(5.5.0-2.26117.101 → 5.5.0-2.26124.102)
- Microsoft.NETCore.App.Ref、System.Reflection.Metadata(11.0.0-preview.2 → 11.0.0-preview.3)
- System.Text.Json(同上)
- NuGet ツール群(7.5.0-rc.11801 → 7.5.0-rc.12502)
- System.CommandLine(3.0.0-preview.2 → 3.0.0-preview.3)
- Mono LLVM ツールチェーン関連(複数プラットフォーム対応)
- WebAssembly Node.js ランタイム(複数プラットフォーム対応)
- ビルド・同期スクリプト:
vmr-sync.ps1、vmr-sync.shに VMR 同期処理の改善(32-6 行の変更) - テスト追加:
src/tests/JIT/jit64/regress/vsw/373472/test.ilに JIT リグレッション テスト追加
パフォーマンスへの影響
影響なし。本 PR は依存関係の定期的な更新とテスト追加であり、直接的なパフォーマンス変更は含まれていません。ただし、System.Text.Json の更新により、JSON シリアライゼーションのパフォーマンスが改善される可能性があります(具体的なベンチマーク情報は提供されていません)。
関連Issue
なし。本 PR はコードフロー更新(Maestro による自動同期)です。
その他
- 本 PR は dotnet-maestro[bot] による自動化されたコードフロー更新です
- Arcade、ASP.NET Core、EFCore、F#、NuGet、Razor、Roslyn など 12 のソース リポジトリからの変更が含まれています
darc vmr diffコマンドで詳細な差分を確認可能です
#124765 Fix Arm64: for 124357
- 作成者: @dhartglassMSFT
- 作成日時: 2026年02月23日 20:46:31(UTC)
- マージ日時: 2026年02月25日 10:07:55(UTC)
- ラベル: area-CodeGen-coreclr
概要
ARM64 JIT レジスタストレス時に、VectorTableLookup (TBL) 命令で4つの連続レジスタ割り当てに失敗する問題を修正しました。LSRA(Linear Scan Register Allocator)が d31→d0 のラップアラウンド時に、レジスタ使用状況マスク(consecutiveRegsInUseThisLocation)を誤った計算で扱っていたことが原因です。
変更内容
src/coreclr/jit/lsraarm64.cpp
consecutiveRegsInUseThisLocationマスク計算ロジックを修正し、d31→d0 ラップアラウンドケースに対応- ARM64 の連続レジスタ割り当ての競合検出ロジックを改善
src/coreclr/jit/lsra.h
- 関連する定義または定数を1行追加
パフォーマンスへの影響
影響なし。本修正はレジスタ割り当て失敗の回避であり、実行時パフォーマンスを改善するものではなく、JIT 動作の正確性を向上させます。
関連Issue
#124357
その他
- 修正対象は ARM64 アーキテクチャのみに影響
- VectorTableLookup などの SIMD 命令で連続レジスタが必要な場合の問題を解決
- JIT レジスタストレステスト環境での問題報告に基づいた修正
#124736 Enable case-sensitive LeadingStrings with frequency-based heuristic
- 作成者: @danmoseley
- 作成日時: 2026年02月23日 02:08:39(UTC)
- マージ日時: 2026年02月25日 02:29:02(UTC)
- ラベル: area-System.Text.RegularExpressions
概要
正規表現エンジンで複数の選択肢プレフィックス(a|b|c|...)を持つパターンに対し、文字頻度ベースのヒューリスティックを導入。高頻度の開始文字にはSearchValues<string>(Teddy/Aho-Corasick)を使用し、低頻度の文字には既存のFixedDistanceSets(IndexOfAny)にフォールバック。regex-reduxで1.81倍高速化、Leipzigテストで3.28倍高速化を実現。ASCII以外のパターンはヒューリスティックを無視し、既存動作を保持。
// 例:パターン "a|b|c" の場合、a, b, c は英語テキストで高頻度なため
// SearchValues (Aho-Corasick) を使用して複数文字列を同時検索
// パターン "T|A|B" の場合、大文字は低頻度なため IndexOfAny を優先
変更内容
- RegexFindOptimizations.cs (+66/-22):Rust aho-corasick の
BYTE_FREQUENCIESテーブルを参照した文字頻度判定ロジックを実装。平均ランク≥200でLeadingStringsを有効化、それ以下でFixedDistanceSetsにフォールバック。 - RegexPrefixAnalyzer.cs (+1/-1):既存の文字セット選別用頻度テーブルとの補完関係を維持。
- RegexFindOptimizationsTests.cs (+18):新しいヒューリスティックのテストケース追加。
パフォーマンスへの影響
大幅な改善:
- regex-redux系:1.20~1.81倍高速化
- Leipzig(複数プレフィックス含むパターン):3.28倍高速化(
Tomとriverの同時検索により誤検索が削減)
回帰なし:BinaryData、NonAsciiパターンはMannWhitneyテストで「Same」判定。非ASCII開始文字のパターンはヒューリスティックをスキップするため、既存動作を保証。
関連Issue
なし
その他
- 設計根拠:Ripgrepで10年間実証された頻度表アプローチを採用。既存の
RegexPrefixAnalyzer.csの頻度テーブルとは目的が異なる(前者:固定距離文字セットのランク付け、本変更:LeadingStrings選別)が補完的に機能。 - 非ASCII対応:パターンに非ASCII文字を含む場合、頻度データなしのため
false返却し、既存コードパスを維持。 - 二度目の試行:元々#98791で導入された検索戦略がコメントアウトされていた理由はリグレッションだったが、頻度表ベースのヒューリスティックでリグレッション解消を実現。
#124731 [Wasm RyuJit] internal registers, integer binop overflow checks
- 作成者: @AndyAyersMS
- 作成日時: 2026年02月22日 21:42:51(UTC)
- マージ日時: 2026年02月25日 05:47:37(UTC)
- ラベル: area-CodeGen-coreclr
概要
WebAssembly RyuJit コンパイラに内部レジスタサポートを追加し、ADD/SUB/MUL操作のオーバーフロー検査を実装します。結果が複数回使用される場合に内部レジスタを活用し、long型のMUL操作についてはランタイムヘルパーに委譲します。
変更内容
- codegen.h: 内部レジスタ機能のヘッダー定義を追加(+1行)
- codegenwasm.cpp: オーバーフロー検査実装ロジックを追加し、ADD/SUB/MULの code generation を拡張(+152行)
- lowerwasm.cpp: Wasm固有のlowering処理を追加(+7行)
- morph.cpp: IR変換時の形態変更処理を追加(+16行)
- regallocwasm.cpp: Wasmレジスタアロケータに内部レジスタ管理機能を追加(+74行)
- regallocwasm.h: 内部レジスタ管理用のデータ構造とインターフェースを追加(+15行、-12行)
パフォーマンスへの影響
内部レジスタを活用することで、オーバーフロー検査時の中間結果を効率的に保持でき、メモリスピルを削減できます。特に複数回使用されるオーバーフロー演算では、レジスタ圧力を低下させ生成されるコードサイズを最適化する可能性があります。
関連Issue
なし
その他
- 本変更はWebAssembly (Wasm) ターゲット固有の最適化です
- long型MUL操作は引き続きランタイムヘルパー関数を使用する設計を維持しています
- 複数ファイルにわたる包括的な変更のため、レジスタアロケーション戦略全体との整合性確認が重要です
#124684 Fix LoadExactInterfaceMap for sub-interfaces with complex type arguments under special marker parents
- 作成者: @davidwrighton
- 作成日時: 2026年02月21日 01:00:29(UTC)
- マージ日時: 2026年02月25日 00:44:14(UTC)
- ラベル: area-TypeSystem-coreclr
概要
特殊なマーカー型(special marker type)を親に持つサブインターフェースで、複雑な型引数(例:IList<T>)を含む正確なインスタンス化がある場合、LoadExactInterfaceMapが誤った処理を行っていた問題を修正しました。pNewIntfMTに対する適格性チェックを正しく実行するようにロジックを分割し、特殊マーカー型の最適化を正確に適用できるようにしました。
変更内容
| ファイル | 主な変更 |
|---|---|
src/coreclr/vm/methodtablebuilder.cpp |
LoadExactInterfaceMapの処理ロジックをCase 4から3つのケース(Case 4/5/6)に分割。特殊マーカー型の適格性チェックをpNewIntfMTベースで実行し、未解決のジェネリック変数を正しく処理 |
src/tests/Loader/classloader/regressions/GitHub_124369/GitHub_124369.vb |
3層インターフェース構造のジェネリック定義をあらかじめ読み込む8つの組み合わせをカバーする回帰テストを追加 |
src/tests/Loader/classloader/regressions/GitHub_124369/GitHub_124369.vbproj |
テストプロジェクト設定ファイルを追加 |
パフォーマンスへの影響
影響なし。バグ修正による機能的な改善であり、パフォーマンスへの直接的な影響はありません。ただし、以前は不正な最適化が行われていた可能性があるため、修正後は若干のオーバーヘッドが増える可能性は低いですが、正確な処理が優先されています。
関連Issue
#124369(修正対象のIssue)
その他
- 互換性への影響:この修正は内部実装(CLR仮想マシンのメソッドテーブル構築ロジック)の修正であり、パブリックAPIへの影響はありません
- 修正の背景:特殊マーカー型の適格性判定が
pMTではなくpNewIntfMTに対して正しく実行されていなかったため、ジェネリック変数を含むサブインターフェースが不正に処理されていました - テスト体制:3層のインターフェース階層と8つの読み込み順序パターンをカバーする包括的な回帰テストにより、異なるコードパスが確実にテストされています
#124590 Fix ALPN protocol list size field type and add boundary tests
- 作成者: @rzikm
- 作成日時: 2026年02月19日 12:28:42(UTC)
- マージ日時: 2026年02月25日 12:39:09(UTC)
- ラベル: area-System.Net.Security
概要
ALPN(Application-Layer Protocol Negotiation)プロトコルリストのサイズフィールド型を short から ushort に修正し、Windows ネイティブ API および RFC 7301 に準拠させました。最大サイズを 32,767 バイトから 65,535 バイトに拡大し、境界値テストを追加して検証ロジックを強化しています。
// 修正前
private short ProtocolListSize; // 最大32,767バイト
// 修正後
private ushort ProtocolListSize; // 最大65,535バイト
変更内容
Interop.Sec_Application_Protocols.cs:ProtocolListSizeフィールドをshort→ushortに変更、集計サイズ上限をshort.MaxValue(32,767) →ushort.MaxValue(65,535) に更新SslStreamAlpnTests.cs: ALPN リスト総合サイズが 65,535 バイトを超過する場合のテスト追加(Windows でArgumentException、Linux/FreeBSD でAuthenticationExceptionを検証)SslApplicationProtocolTests.cs: 個別プロトコルサイズの境界値テスト追加(0, 1, 254, 255, 256, 512 バイト)SafeDeleteSslContext.cs(Android/macOS) 他: ALPN リストサイズ検証ロジックを複数プラットフォームに追加
パフォーマンスへの影響
影響なし — 型変更はメモリレイアウトに影響を与えず、検証ロジックの追加は接続確立時の初期化段階での一度きりの処理です。ただし、従来は 32KB を超える ALPN リストが暗黙的に許可されていたため、今後は 65,535 バイトまでの拡張が可能になります。
関連Issue
記載なし
その他
セキュリティ考慮事項: Copilot レビューで指摘されている通り、各プロトコルの個別サイズ検証(1~255 バイト範囲)が一部プラットフォーム実装で不完全な可能性があります。default(SslApplicationProtocol)(長さ 0)のような無効なエントリが集計チェックを通過し、ネイティブ層でエラーになるリスクがあります。Windows や OpenSSL パス同様の事前検証の統一が今後推奨されます。
#124589 LoggerMessage source generator: preserve ref readonly; forbid params, scoped, and ref struct parameters
- 作成者: @Copilot
- 作成日時: 2026年02月19日 11:49:33(UTC)
- マージ日時: 2026年02月25日 09:41:53(UTC)
- ラベル: area-Extensions-Logging
概要
LoggerMessage ソースジェネレータの修正により、ref readonly パラメータ修飾子が生成されたメソッド実装で保持されるようになりました。同時に、params、scoped、およびref struct パラメータについてコンパイル時エラー(SYSLIB1028、SYSLIB1029)を発行し、署名の不一致を防止します。
// ref readonly が保持される
[LoggerMessage(Message = "{p}", Level = LogLevel.Info)]
static partial void Log(ILogger l, ref readonly int p);
// ✓ 生成コード: ref readonly global::System.Int32 p
// params と scoped はコンパイルエラー(SYSLIB1028)
[LoggerMessage(Message = "{args}", Level = LogLevel.Info)]
static partial void Log(ILogger l, params object?[] args); // ✗ SYSLIB1028
変更内容
- Parser(LoggerMessageGenerator.Parser.cs):
RefKind.RefReadOnlyParameterを検出し、params/scopedパラメータに対して SYSLIB1028 エラーを発行。Roslyn 4.4+ ではscoped検出、ref struct パラメータに SYSLIB1029 を発行 - Emitter(LoggerMessageGenerator.Emitter.cs): 生成パラメータリストで
in/ref/ref readonly修飾子を正しく出力 - Model(LoggerMessageGenerator.Roslyn4.0.cs):
IsScopedプロパティを spec から model へ伝播 - DiagnosticDescriptors.cs: SYSLIB1028 の診断記述子を追加
- リソース:
Strings.resxおよび 13 の xlf ファイルを SYSLIB1028/SYSLIB1029 メッセージで更新 - ドキュメント:
docs/project/list-of-diagnostics.mdに SYSLIB1028/SYSLIB1029 を追加 - テスト:
RefReadOnlyParameterOK、InvalidParamsParameter、InvalidRefLikeTypeParameterなど 6+ パラメータケースを含む包括的なテスト追加
パフォーマンスへの影響
影響なし。検証ロジックはパラメータ解析時(コンパイル時)に実行され、エラーケースで不要な文字列割り当てを回避する設計。
関連Issue
#91678(オリジナル issue:LoggerMessage で params キーワードが生成されない問題)
その他
- 破壊的変更ではなく、これまで不正に受け入れられていた無効なパラメータを検出するコンパイラ機能強化
- Roslyn バージョン依存機能(
RefKind.RefReadOnlyParameterは Roslyn 4.8+)はプリプロセッサで保護 - 多言語対応(13 言語のローカライズリソース更新)
#124588 Mono: increase default stack size on s390x/ppc64le; support DOTNET_Thread_DefaultStackSize for setting stack size.
- 作成者: @tmds
- 作成日時: 2026年02月19日 11:38:33(UTC)
- マージ日時: 2026年02月25日 15:03:13(UTC)
- ラベル: area-VM-meta-mono community-contribution
概要
Mono ランタイムの s390x および ppc64le アーキテクチャにおいて、デフォルトスタックサイズを 8MB に増加させました。また、DOTNET_Thread_DefaultStackSize 環境変数を新たにサポートし、ユーザーがスタックサイズを動的に制御できるようにしました。これにより、テールコール最適化の未実装による fsharp リポジトリのビルド失敗を解決します。
変更内容
- CMakeLists.txt: s390x と ppc64le アーキテクチャに対応した条件付きコンパイル設定を追加
- config.h.in: 新しいスタックサイズ設定マクロの定義を追加
- threads.c:
DOTNET_Thread_DefaultStackSize環境変数をサポートするロジックを実装(17行追加) - mono-threads-posix.c: POSIX スレッド生成時のスタックサイズ設定を更新
- mono-threads-wasm.c: WebAssembly 環境向けスタックサイズ設定を調整
- mono-threads-windows.c: Windows 環境向けスタックサイズ設定を調整
パフォーマンスへの影響
メモリ使用量増加:スタックサイズを 8MB に増加させるため、スレッドあたりのメモリ消費量が増加します。具体的な数値は提供されていません。ただし、この増加により深いコール スタック(テールコール最適化が未実装のため)でのスタックオーバーフロー エラーを防止でき、ビルド完了を可能にします。
関連Issue
#124368
その他
本変更はアーキテクチャ固有(s390x、ppc64le)の問題に対応しており、他のプラットフォームへの影響は最小限です。ユーザーは環境変数により必要に応じてスタックサイズをカスタマイズできます。
#124548 [release/10.0] Source code updates from dotnet/dotnet
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年02月18日 12:48:48(UTC)
- マージ日時: 2026年02月25日 19:23:54(UTC)
- ラベル: Servicing-approved area-codeflow
概要
このPull RequestはVMR(Virtual Monorepo)からの自動コードフロー更新です。.NET 10.0.1xxブランチの最新ビルド(20260217.15)に対応する依存関係とバージョン情報の更新が含まれています。Microsoft.CodeAnalysis、NuGetツール、ビルドタスクなど主要なNuGetパッケージが複数更新されています。
変更内容
- NuGet.config: ソース設定の軽微な更新
- eng/Version.Details.props/xml: 複数の依存関係バージョンを更新
- Microsoft.CodeAnalysis系: 5.0.0-2.26116.108 → 5.0.0-2.26117.115
- Microsoft.DotNet.Arcade.Sdk他ビルドタスク: 10.0.0-beta.26116.108 → 10.0.0-beta.26117.115
- NuGet.Frameworks/Packaging/ProjectModel: 7.0.2-rc.11708 → 7.0.2-rc.11815
- その他: System.Text.Json、System.Reflection.Metadataなど
- global.json: .NET SDK設定の同期更新
パフォーマンスへの影響
影響なし。(このPRは依存関係とバージョン情報の更新のみで、ランタイムロジックの変更を含みません)
関連Issue
なし
その他
- 本PRはMaestroボットによる自動化されたコードフロー更新です
- 対応するVMRコミット: cfcf1b8da3891fb3be2e2ad92fc1c39496c10248
- EFCore、Runtimeリポジトリからの関連変更も同期されています
- レビュワー(jozkee)による内容確認済みです
#124519 Allow box_this pattern on composite r2r
- 作成者: @BrzVlad
- 作成日時: 2026年02月17日 16:23:55(UTC)
- マージ日時: 2026年02月25日 06:49:34(UTC)
- ラベル: area-ReadyToRun-coreclr
概要
Composite ReadyToRun (R2R) コンパイルで box_this パターンの最適化を有効にする変更です。値型のメソッドが ref パラメータで渡される場合、制約付き呼び出しが行われます。従来のR2Rではこのパターンはスキップされていましたが、値型とメソッドが同じバージョンバブル内にある場合、安全に最適化できるようになりました。
struct MyStruct { public int Value; }
static string CallToString<T>(ref T val) where T : struct
{
return val.ToString(); // constrained. T callvirt ToString()
}
var s = new MyStruct { Value = 42 };
Console.WriteLine(CallToString(ref s));
変更内容
- ファイル:
src/coreclr/tools/aot/ILCompiler.ReadyToRun/JitInterface/CorInfoImpl.ReadyToRun.cs - 変更行数: +4/-0(4行追加)
- 主な内容: Composite R2Rコンパイル時に、値型とコンパイル対象メソッドが同じバージョンバブル内にあるかチェックするロジックを追加。この条件を満たす場合、
box_thisパターンを最適化対象として許可
パフォーマンスへの影響
コード生成の最適化により、値型に対する制約付き仮想呼び出しで不要なボックス処理を削除可能になります。これにより、メモリアロケーション削減と実行速度向上が期待できます。特に高頻度で呼び出されるジェネリックメソッドで効果が見込まれます。
関連Issue
なし
その他
- バージョンバブルチェックにより、Composite R2R環境での互換性を保証
- 単一のR2Rモジュール環境には影響しない設計
#124361 Backport XML doc comments for DispatchProxy from dotnet-api-docs
- 作成者: @Copilot
- 作成日時: 2026年02月12日 23:38:12(UTC)
- マージ日時: 2026年02月25日 21:57:57(UTC)
- ラベル: area-System.Reflection
概要
System.Reflection.DispatchProxyのXML ドキュメントコメントをdotnet-api-docsから逆移植し、ドキュメント精度を向上。例外条件の検証ロジックを正確に反映し、パラメータなしコンストラクタに関する文法誤りも修正。コンパイラ生成のXMLドキュメントファイル出力を有効化。
変更内容
DispatchProxy.cs:
- メソッドサマリーとパラメータ説明をdotnet-api-docsと同期
null参照を<see langword="null" />に統一(キーワード参照の標準化)- 例外ドキュメントの条件記述を修正:
Create<T, TProxy>:「Tはクラス」→「Tはインターフェース型ではない」に訂正、TProxyの「abstract」条件を追加Create(Type, Type):同様に修正、proxyTypeの「abstract」条件を追加
- パラメータなしコンストラクタの文法誤り修正:「has」→「does not have」(コードの
DynamicallyAccessedMemberTypes.PublicParameterlessConstructor要件に合致) - 保護されたコンストラクタのXMLドキュメントを追加
DispatchProxy.csproj:
<UseCompilerGeneratedDocXmlFile>false</UseCompilerGeneratedDocXmlFile>を削除し、自動XML生成を有効化
パフォーマンスへの影響
影響なし (ドキュメントのみの変更であり、ランタイム実行コードへの変更なし)
関連Issue
dotnet/dotnet-api-docs #12316
その他
本PRはPR #124227と同様のバックポート作業。ドキュメントの正確性向上により、開発者がAPIの動作を正しく理解できるようになります。特に例外条件の修正は、実装のコンパイラ動作検証属性と一致させた重要な修正です。
#121906 fix: CreateSubdirectory failing for root directories
- 作成者: @Neo-vortex
- 作成日時: 2025年11月23日 18:07:53(UTC)
- マージ日時: 2026年02月25日 02:18:52(UTC)
- ラベル: area-System.IO community-contribution
概要
DirectoryInfo.CreateSubdirectory(path) がルートディレクトリ(例:C:\)に対して呼び出された際に ArgumentException をスローする問題を修正しました。Path.TrimEndingDirectorySeparator がルートパスの末尾セパレーターを保持することが原因で、バウンダリ検証ロジックが誤ったインデックスを参照していました。修正後は、トリム後のパスが依然としてセパレーターで終わる場合(ルートディレクトリケース)に、検証前に明示的にセパレーターを除去するようになります。
変更内容
src/libraries/System.Private.CoreLib/src/System/IO/DirectoryInfo.cs
CreateSubdirectoryメソッド内のバウンダリ検証ロジックを修正Path.TrimEndingDirectorySeparator呼び出し後、残された末尾セパレーターを明示的に除去するチェック処理を追加(+4 行)
src/libraries/System.Runtime/tests/System.IO.FileSystem.Tests/DirectoryInfo/CreateSubdirectory.cs
- ルートディレクトリに対する
CreateSubdirectoryの動作を検証するテストケースを追加(+35 行)
- ルートディレクトリに対する
パフォーマンスへの影響
影響なし。修正は検証ロジックの局所的な改善であり、文字列操作の追加も最小限です。
関連Issue
#116087
その他
- 破壊的変更なし: ルート以外のディレクトリの動作は変わりません
- テスト済み: 既存テストは継続して合格し、ルートディレクトリでの手動テストにより修正を確認しています
new DirectoryInfo(@"C:\").CreateSubdirectory("test"); // ✓ 動作 new DirectoryInfo(@"C:\Users").CreateSubdirectory("Docs"); // ✓ 継続して動作
#120275 [cDAC] GetCodeHeaderData fork
- 作成者: @max-charlamb
- 作成日時: 2025年09月30日 21:05:25(UTC)
- マージ日時: 2026年02月25日 14:38:39(UTC)
- ラベル: area-Diagnostics-coreclr
概要
このPRは、cDAC(Common Data Architecture)の診断機能を拡張し、GetCodeHeaderData APIを追加する変更です。GCInfo(ガベージコレクション情報)デコーダーを実装し、x64、ARM64、ARMプラットフォーム上でコードヘッダーデータを取得できるようになります。ランタイム診断とプロファイリングの機能向上が主な目的です。
変更内容
- ExecutionManager関連:
GetCodeHeaderDatacDAC APIを追加し、ホット/コールド領域のルックアップロジック(HotColdLookup.cs)を実装 - GCInfo デコーダー: 新規契約
IGCInfoを実装し、x64/ARM64/ARMプラットフォーム向けのGCInfoDecoder.cs(511行)を追加 - プラットフォーム固有実装:
AMD64GCInfoTraits.cs、ARM64GCInfoTraits.cs、ARMGCInfoTraits.csなど5つのプラットフォーム特性クラスを追加 - アンワインドデータサイズ: x86以外のプラットフォーム対応のヘルパークラス(
UnwindDataSize.cs、107行)を実装 - ドキュメント:
ExecutionManager.mdと新規GCInfo.md(338行)で設計仕様を記載 - レガシーAPIサポート:
ISOSDacInterface.csとSOSDacImpl.csに対応メソッドを追加
パフォーマンスへの影響
影響なし。本変更は診断API(出力パス)の機能追加であり、ランタイムの実行パスや コア処理パフォーマンスへの直接的な影響はありません。
関連Issue
その他
- 作成者は将来、既存のx86 GCInfo デコーディング機能をこの新しい契約に統合する予定であり、それは別のPRで行われる予定です
- 複数のプラットフォームで統一的なGCInfo解析インターフェース(
IGCInfoDecoder)を提供することで、診断ツール側の実装を簡素化できます
#117956 Fuzz Json Deserializing
- 作成者: @BrennanConroy
- 作成日時: 2025年07月22日 23:53:18(UTC)
- マージ日時: 2026年02月25日 22:19:02(UTC)
- ラベル: area-System.Text.Json
概要
JSON逆シリアル化の堅牢性を検証するための新しいファザー Utf8JsonReaderFuzzer を追加しました。このファザーはSpanベースとSequenceベースの Utf8JsonReader インスタンスの動作を比較することで、様々なデータ型とシナリオにおけるJSON読み込み機能を包括的にテストします。OneFuzzインフラストラクチャへのデプロイ設定も含まれています。
変更内容
- Utf8JsonReaderFuzzer.cs (+672行): 新規ファザー実装。プリミティブ型と動的に生成された複雑なPOCO(Plain Old CLR Object)を含む包括的なJSON逆シリアル化テストを実装
- DotnetFuzzing.csproj: 新しいファザーをプロジェクトに追加
- deploy-to-onefuzz.yml (+8行): OneFuzzテスティングインフラストラクチャへのデプロイメント設定を更新
パフォーマンスへの影響
影響なし。本変更はテストインフラストラクチャの拡張であり、ランタイムのパフォーマンスに直接的な影響を与えません。
関連Issue
なし
その他
- 本ファザーは
System.Text.JsonライブラリのJSON読み込み処理における潜在的なバグやエッジケースを自動検出するためのものです - OneFuzzデプロイメント設定の追加により、継続的なファジングテストがCI/CDパイプラインに統合されます