Pull Request on 2026年03月28日

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

注意点

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



#126254 [Wasm RyuJIT] Fix build break

  • 作成者: @kg
  • 作成日時: 2026年03月28日 13:30:32(UTC)
  • マージ日時: 2026年03月28日 13:43:08(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WASM JIT Loweringパスのデバッグビルド破損を修正するPRです。SetMultiplyUsed呼び出しで、デバッグ構成において必須の"reason"引数を渡すようにしました。マージ時の競合により、チェックを通り抜けてしまった変更を修正します。

変更内容

  • src/coreclr/jit/lowerwasm.cpp: Lowering::LowerIndexAddrメソッド内のSetMultiplyUsed呼び出し(Arr()Index())に対して、DEBUGARG(...)マクロで理由文字列を追加(+2/-2行)

パフォーマンスへの影響

影響なし(デバッグビルド専用のコンパイル時引数追加)

関連Issue

なし

その他

デバッグ構成でのみ影響する変更で、DEBUGARGマクロはリリースビルドでは展開されません。


#126243 Fix RedirectedOutputDoesNotUseAnsiSequences test failure

  • 作成者: @Copilot
  • 作成日時: 2026年03月28日 05:51:30(UTC)
  • マージ日時: 2026年03月28日 15:29:33(UTC)
  • ラベル: area-Infrastructure

概要

RedirectedOutputDoesNotUseAnsiSequences テストの失敗を修正しました。xunitのバックグラウンド診断レポーター スレッドが、テスト実行中にリダイレクトされた Console.Out に対してテスト名を書き込み、キャプチャされた出力を汚染していたことが原因です。テスト本体を RemoteExecutor.Invoke() でラップして、xunitレポーター スレッドが干渉しない独立した子プロセスで実行するように修正しました。

変更内容

  • src/libraries/System.Console/tests/Color.cs
    • [Fact][ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))] に変更
    • テスト本体を RemoteExecutor.Invoke(static () => { ... }).Dispose() でラップして、子プロセスでのテスト実行と確実なリソース解放を実現

パフォーマンスへの影響

影響なし(テストの信頼性向上が目的)

関連Issue

#126243

その他

  • 同じファイル内の兄弟テスト RedirectedOutput_ColorEnvVars_RespectColorPreference で既に使用されている同じパターンに従っています
  • System.Console の全 4294 テストがパス(失敗 0)し、特に RedirectedOutputDoesNotUseAnsiSequences テストが安定して成功することを確認済み

#126242 Escape U+2028/U+2029 in regex source generator XML doc comments

  • 作成者: @stephentoub
  • 作成日時: 2026年03月28日 03:56:08(UTC)
  • マージ日時: 2026年03月28日 10:39:02(UTC)
  • ラベル: area-System.Text.RegularExpressions

概要

正規表現ソースジェネレータがXML doc コメント内でU+2028(行区切り文字)とU+2029(段落区切り文字)をリテラルで出力する際に、C#のコンパイラがコメント内の行終了と解釈してXML解析エラー(CS1519/CS1056)を引き起こす問題を修正しました。これらの文字をエスケープシーケンス(\u2028/\u2029)として出力することで問題を解決します。

変更内容

  • RegexGenerator.Emitter.cs: EscapeXmlCommentメソッドの有効文字判定パターンにnot 0x2028 and not 0x2029条件を追加。これにより、U+2028とU+2029はエスケープ済みの状態で出力されます。
  • Regex.Match.Tests.cs: U+2028、U+2029、U+FFFEを含む正規表現パターンのテストケースを追加。ソースジェネレータを含む全エンジンで検証します。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

修正はXML doc コメント生成時のエスケープ処理に限定される内部実装の変更です。公開APIや正規表現のマッチング動作には影響しません。CR、LF、NEL等の他のC#行終止文字は既に処理範囲外となっていました。


#126238 [Wasm RyuJit] Fix another TARGET_64BIT issue

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年03月28日 01:05:50(UTC)
  • マージ日時: 2026年03月28日 13:59:23(UTC)
  • ラベル: area-CodeGen-coreclr

概要

WebAssembly RyuJit構成におけるTARGET_64BITマクロの誤った使用を修正しています。WASM環境ではTARGET_64BITがfalseですが、longが分解されない場合がある点に対応するため、#ifndef TARGET_64BIT#if LOWER_DECOMPOSE_LONGSに置き換え、実際にlong分解を行うターゲット(x86/arm32など)でのみアサーション検証を実施するようにしました。

変更内容

  • src/coreclr/jit/lower.cpp: TryLowerAndNegativeOne関数のop2型アサーション周辺で、#ifndef TARGET_64BIT#if LOWER_DECOMPOSE_LONGSに変更(+2/-2行)

パフォーマンスへの影響

影響なし

関連Issue

#126238

その他

なし


#126227 Bump github/gh-aw-actions from 0.63.1 to 0.64.2

  • 作成者: @dependabot[bot]
  • 作成日時: 2026年03月27日 21:23:44(UTC)
  • マージ日時: 2026年03月28日 01:44:56(UTC)
  • ラベル: area-codeflow

概要

GitHub Actions の依存関係 github/gh-aw-actions を v0.63.1 から v0.64.2 にアップデートします。このアップデートには、sync-actions ワークフローでタグをプッシュした後に GitHub リリースを作成する機能が含まれています。

変更内容

  • .github/workflows/code-review.lock.yml: github/gh-aw-actions の参照を v0.63.1 から v0.64.2 に更新
  • .github/workflows/copilot-echo.lock.yml: github/gh-aw-actions の参照を v0.63.1 から v0.64.2 に更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • Dependabot による自動アップデート PR です
  • マイナーバージョンアップデート(0.64.0 → 0.64.2)を含みます
  • ロックファイルのみの変更であり、ソースコードへの直接的な影響はありません

#126221 Revert "Simplify RegexInterpreter (#124628)"

  • 作成者: @danmoseley
  • 作成日時: 2026年03月27日 19:22:48(UTC)
  • マージ日時: 2026年03月28日 01:42:21(UTC)
  • ラベル: area-System.Text.RegularExpressions

概要

#124628で導入されたRegexInterpreter.MatchStringの簡略化(char-by-charループをStartsWith/EndsWithに置換)をrevertします。この変更により、arm64環境で短い文字列を対象とした正規表現パターン(例:.{0,2}(Tom|Sawyer|Huckleberry|Finn))で7-11%のパフォーマンス低下が発生したため、元の実装に戻します。

変更内容

  • src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexInterpreter.cs
    • MatchStringメソッドを元のchar-by-charループ実装に戻す(+24/-7)
    • 短い文字列マッチで繰り返し呼び出される場合、Slice + StartsWith + SequenceEqualのディスパッチオーバーヘッドが元のタイトループコストを上回るため、元の実装を復元

パフォーマンスへの影響

改善(revert による回復)

  • arm64 (AmpereUbuntu): Perf_Regex_Industry_Leipzigパターンで7-11%の低下を解消
    • .{0,2}(Tom|Sawyer|Huckleberry|Finn): 5.56s → 5.01s(1.11x 改善)
    • .{2,4}(Tom|Sawyer|Huckleberry|Finn): 5.51s → 5.16s(1.07x 改善)
  • x64: 1.03-1.04x の低下も回復予定
  • 短い文字列(3-11文字)に対して数百万回の呼び出しが行われるケースで、SIMD最適化の恩恵が薄い場合に顕著な効果

関連Issue

#126156

その他

元のPR #124628で導入された最適化はx64環境では1.03-1.04xの回帰を示していたが、レビュー時に見落とされていました。短い文字列の頻繁なマッチングが必要な場合、簡潔さよりもパフォーマンスが優先されています。


#126216 Disable FastReducer_AssertFailure_RegressionTest on 32-bit platforms

  • 作成者: @Copilot
  • 作成日時: 2026年03月27日 18:31:19(UTC)
  • マージ日時: 2026年03月28日 01:54:33(UTC)
  • ラベル: area-System.Numerics

概要

32ビットプラットフォームでのFastReducer_AssertFailure_RegressionTestのテスト失敗に対するワークアラウンドです。[ActiveIssue]属性を追加して、32ビットプロセスで実行する際にこのテストをスキップします。

[Theory]
[MemberData(nameof(AssertFailureRegressionTest_InputData))]
[ActiveIssue("https://github.com/dotnet/runtime/issues/126212", typeof(PlatformDetection), nameof(PlatformDetection.Is32BitProcess))]
public static void FastReducer_AssertFailure_RegressionTest(...)

変更内容

  • src/libraries/System.Runtime.Numerics/tests/BigInteger/modpow.cs
    • FastReducer_AssertFailure_RegressionTestメソッドに[ActiveIssue]属性を追加
    • PlatformDetection.Is32BitProcessが真の場合にテストをスキップ

パフォーマンスへの影響

影響なし(テストスキップの条件付け変更のため)

関連Issue

#126212

その他

  • BigInteger模指数演算(modpow)に関する回帰テストが32ビットプラットフォームで失敗/ハングする既知の問題に対する一時的な対応です
  • 32ビット以外のプラットフォームではテストカバレッジは維持されます
  • 本PR説明と関連コード変更はGitHub Copilotにより自動生成されています

#126209 [Wasm RyuJIT] Basic implementation of int to float casts without overflow checks

  • 作成者: @kg
  • 作成日時: 2026年03月27日 16:19:58(UTC)
  • マージ日時: 2026年03月28日 17:39:00(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssembly(Wasm)RyuJIT上でのint/longからfloat/doubleへのキャスト処理の基本的な実装を追加します。オーバーフロー確認が不要な場合に対応し、Wasm命令セット(f32/f64.convert_{s/u}_{i32/i64})を活用した効率的なコード生成を実現します。

変更内容

  • src/coreclr/jit/codegenwasm.cpp: CodeGen::genIntToFloatCastメソッドの実装を追加
    • 整数型から浮動小数点型への変換にWasm命令を利用
    • 符号付き/符号なし整数、32/64ビット整数の各パターンに対応
    • 型チェックとオーバーフロー確認の適切なアサーションを追加
    • 変換結果を出力レジスタ(WasmProduceReg)に格納する処理を実装

パフォーマンスへの影響

影響なし(初期実装であり、ベンチマーク結果の記載なし)

関連Issue

なし

その他

なし


#126201 Avoid intermediate managed string and array allocations for envp and argv in Unix process start

  • 作成者: @Copilot
  • 作成日時: 2026年03月27日 13:51:59(UTC)
  • マージ日時: 2026年03月28日 12:40:12(UTC)
  • ラベル: area-System.Diagnostics.Process

概要

Unix プロセス起動時の argvenvp の構築に関わる中間的なマネージド割り当てを削除し、単一の連続したネイティブメモリブロックに直接エンコードするように最適化したものです。ProcessStartInfo.Environment 辞書を直接渡し、文字列連結や中間配列の割り当てを排除することで、メモリ効率を向上させます。

変更内容

  • CreateEnvp メソッドの削除startInfo.Environment 辞書を直接 ForkAndExecProcess に渡すよう変更し、中間的な KeyValuePair 配列割り当てを排除
  • AllocEnvpArray メソッド(新規) — 辞書を直接受け取り、2パス方式を採用。第1パスでバッファサイズと エントリ数を計算し、単一の NativeMemory.Alloc でポインタ配列とすべての key=value\0 文字列データを含む連続ブロックを作成
  • AllocArgvArray メソッド(リファクタリング) — 同じ単一ブロック割り当てパターンに統一
  • Span ベースの境界チェック — ポインタ部分に Span<nint>、データ部分に Span<byte> を作成し、スレッドセーフな境界チェックを実装
  • チェック済み算術 — バッファサイズ計算全体で checked() を使用し、整数オーバーフロー対策を実施
  • デバッグアサーション — 人口ループ後の検証を追加
  • メモリ解放の簡素化 — N+1 個の個別解放から単一の NativeMemory.Free に変更

パフォーマンスへの影響

メモリ割り当て回数の削減:

  • 改善前key=value 文字列(中間マネージド文字列)、中間配列、各文字列のネイティブ割り当てで複数回の割り当て+解放が発生
  • 改善後argvenvp 各ブロックで単一の割り当て・解放に削減

ヒープフラグメンテーション削減とメモリ確保/解放のオーバーヘッド低減が期待されます。

関連Issue

#115294

その他

内部実装の最適化であり、パブリック API に破壊的変更はありません。シングルスレッド環境でのプロセス起動のパス最適化です。


#126141 Revert "Partially revert PR #125326: revert ComActivator/LicenseInter…

  • 作成者: @AaronRobinsonMSFT
  • 作成日時: 2026年03月26日 01:00:53(UTC)
  • マージ日時: 2026年03月28日 02:08:27(UTC)
  • ラベル: area-Interop-coreclr

概要

COM ライセンス認証の実装をリファクタリングするプルリクエストです。以前の部分的なリバートをリバートし、CoreCLR と管理側のライセンス相互運用グルーを [UnmanagedCallersOnly] 呼び出しパターンと BSTR マーシャリングを使用するように改善します。また、ネイティブテストの所有権バグを修正し、不要なシグネチャを削除します。

変更内容

  • ComActivator.cs: LicenseInteropProxy[UnmanagedCallersOnly] 属性を追加し、BStrStringMarshaller を使用した BSTR 変換に切り替え(+36/-25)
  • holder.h: FEATURE_COMINTEROP 下に新規 BSTRHolder RAII クラスを追加(+52行)
  • runtimecallablewrapper.cpp: ライセンス認証の呼び出しを MethodDescCallSite から UnmanagedCallersOnlyCaller に変更し、BSTRHolder を使用(+10/-31)
  • metasig.h: COM 関連メタシグ定義と重複する RetObj シグネチャを削除(-10行)
  • corelib.h: LICENSE_INTEROP_PROXY バインダーメソッドシグネチャを NoSig に変更
  • utilcode.h: 古い util::BSTRHolder typedef を削除(-6行)
  • LicenseTesting.h: BSTR 所有権バグを修正(デストラクタ実行前に受け取った BSTR をコピー)
  • その他: comex.cpp、interoputil.cpp、Program.cs の関連更新

パフォーマンスへの影響

影響なし

関連Issue

#123864

その他

このプルリクエストは、以前のリバート(#125706)を取り消し、COM ライセンス機能をより堅牢な設計パターン(UnmanagedCallersOnly と BSTR マーシャリング)に移行させるものです。テストサーバーの BSTR 所有権に関する潜在的なバグが修正されています。


#126063 Prefer posix_spawn on OSX

  • 作成者: @Copilot
  • 作成日時: 2026年03月24日 23:42:33(UTC)
  • マージ日時: 2026年03月28日 09:59:02(UTC)
  • ラベル: area-System.Diagnostics.Process tenet-performance

概要

macOS上でプロセス生成時にfork/execの代わりにposix_spawnを使用するよう変更しました。これにより、認証情報の設定が不要な場合のパフォーマンスと安全性が向上します。posix_spawnは認証情報設定に未対応のため、setCredentialsがtrueの場合は既存のfork/execパスにフォールバックします。

変更内容

  • pal_process.c: SystemNative_ForkAndExecProcess関数にmacOS専用のposix_spawn実装を追加

    • TARGET_OSXガード下でposix_spawnコードを配置(macOSのみ、iOS/tvOS等は除外)
    • シグナルマスク・シグナルデフォルト値をfork/execパスと同等に設定
    • 標準入出力とカレントワーキングディレクトリのリダイレクトにposix_spawn_file_actionsを使用
    • エラーハンドリング時にchildPid = -1を設定、成功時のみ実際のPIDで上書き
    • 認証情報設定が必要な場合(setCredentials)は既存のfork/execパスへフォールバック
  • ProcessTests.Unix.cs: 新テストChildProcess_InheritsParentSignalMask_CanReceiveSignalsを追加

    • 親プロセスでシグナルハンドラが登録されている場合、子プロセスがシグナルを正常に受け取ることを検証
    • RemoteExecutorPosixSignalRegistrationを使用
    • Windows上ではスキップ(SIGCONT非対応)

パフォーマンスへの影響

posix_spawnfork/execより軽量で安全(Copy-on-Write不要、シグナルハンドラのスレッドセーフティ向上)ですが、具体的なベンチマーク結果は提供されていません。改善効果は認証情報設定不要なユースケースに限定されます。

関連Issue

#126097

その他

  • posix_spawn_file_actions_addchdir_npは対応macOSバージョンで常に利用可能のため、HAVE_定数による条件分岐なしで直接使用
  • POSIX_SPAWN_CLOEXEC_DEFAULTcreate_suspendedcreate_new_process_groupオプションは将来のPRに予定

#126061 Replace MethodDescCallSite with UnmanagedCallersOnly in clrex.cpp

  • 作成者: @AaronRobinsonMSFT
  • 作成日時: 2026年03月24日 23:03:01(UTC)
  • マージ日時: 2026年03月28日 23:46:37(UTC)
  • ラベル: area-ExceptionHandling-coreclr

概要

clrex.cppにおける例外構築パスをMethodDescCallSite/CallDescrWorkerからUnmanagedCallersOnlyCallerパターンへ移行するもの。ArgumentExceptionTypeLoadExceptionFileLoadExceptionの3つの例外についてVM-to-managed間の呼び出しをReverse P/Invokeパターンに統一し、コール機構の現代化を図る。

変更内容

  • CoreLib例外クラス(3ファイル) - [UnmanagedCallersOnly]ファクトリメソッドを追加(Exception.CreateArgumentExceptionTypeLoadException.CreateFileLoadException.Create
  • clrex.cpp - 3つのCreateThrowableメソッド内でMethodDescCallSiteの使用をUnmanagedCallersOnlyCallerに置換(92行追加、134行削除)
  • corelib.h - 新しい管理メソッドをバインダーに登録(METHOD__EXCEPTION__CREATE_ARGUMENT_EXCEPTION等3つ)
  • metasig.h - 不要になったメタシグエントリ3つを削除
  • wasm/callhelpers-reverse.cpp - WebAssembly向けのReverse P/Invoke実装追加(42行)

パフォーマンスへの影響

影響なし(呼び出し方式の近代化のみ)

関連Issue

#123864

その他

  • 内部実装変更。ランタイムの例外構築メカニズムをモダンなReverse P/Invokeパターンに統一する継続的な改善。
  • WebAssembly対応も含める必要があり、callhelpers-reverse.cppにサポート実装を追加。

#126007 Fix regex test OOM on x86 checked coreclr

  • 作成者: @danmoseley
  • 作成日時: 2026年03月24日 02:33:55(UTC)
  • マージ日時: 2026年03月28日 05:16:24(UTC)
  • ラベル: area-System.Text.RegularExpressions

概要

x86 checked coreclr上でSystem.Text.RegularExpressions.Testsの4つのテストがOutOfMemoryExceptionで失敗する問題を修正します。SourceGenerated正規表現エンジンはテスト時にRoslyn全体コンパイルを実行し、大量のパターン(最大~2,903パターン)が32ビットアドレス空間(~2GB)を枯渇させます。本変更により、32ビットプロセスではRoslyn呼び出しごとに最大200パターンに制限し、メモリ使用量を削減します。

変更内容

  • RegexGeneratorHelper.netcoreapp.cs: !Environment.Is64BitProcess判定時、Rosynコンパイルを1回最大200パターンの小分けバッチで実行。64ビットでは変更なし。
  • Regex.Match.Tests.cs: CharClassSubtraction_DeepNesting_DoesNotStackOverflowテストを32ビットプロセスでスキップ。深さ1000の入れ子文字クラスBDD構築(RegexNodeConverter.CreateBDD経由)がアドレス空間を枯渇させるため。

パフォーマンスへの影響

32ビットプロセスでのテスト実行時間が増加(複数のRoslyn呼び出しが必要)。ただし、OOMによるテスト失敗の回避が目的であり、メモリ使用のピークを削減することで32ビット環境の安定性が向上。

関連Issue

#126003#124995#125021

その他

本修正対象のテストはいずれもテスト専用ヘルパー(RegexGeneratorHelper)と汎用テストコード内での変更で、公開API変更なし。スキップされるテストはwasm環境での先例(#125021)があり、32ビット環境での同種問題対応として一貫性がある。


#125914 Fix flaky MountVolume tests: replace fixed delays with polling loops

  • 作成者: @Copilot
  • 作成日時: 2026年03月22日 04:32:15(UTC)
  • マージ日時: 2026年03月28日 04:59:45(UTC)
  • ラベル: area-System.IO

概要

NTFS マウントポイント操作の伝播に必要な時間を考慮していない固定遅延(300ms)が原因で、Directory_Delete_MountVolume および Directory_ReparsePoints_MountVolume テストが高負荷CI環境で不安定になっていた問題を修正。固定遅延をポーリングループに置き換え、マウントボリュームの削除完了を確実に待機するようにしました。

変更内容

  • Delete_MountVolume.cs

    • WaitForDirectoryGone(string path) ポーリング補助メソッドを追加。Directory.Exists() を100ms間隔で最大60秒間ポーリング(Stopwatch で経過時間追跡)
    • Directory.Delete() 後の固定遅延 Task.Delay(300).Wait() 7箇所すべてを WaitForDirectoryGone() に置き換え
    • DeleteDir リトライループの Task.Delay(300).Wait()Thread.Sleep(300) に変更し、未使用の System.Threading.Tasks インポートを削除
  • ReparsePoints_MountVolume.cs

    • DeleteDir メソッドにリトライロジックを追加。IOException を明示的にキャッチし、最大10回まで200msのバックオフで再試行
    • マウント解放時に生じる一時的な IOException(ボリュームがまだアンマウント中でレパースポイントディレクトリがカーネルによって一時的にロックされる場合)に対応
    • catch (IOException) ブロックに観測された一時的な失敗モードの説明コメント追加
    • using System.Threading を追加

パフォーマンスへの影響

影響なし。テストコードのみの変更で、本体ランタイム・ライブラリのパフォーマンスに影響はありません。テスト実行時間は若干増加する可能性がありますが、タイムアウトを60秒に設定しており、通常環境では固定遅延時代より改善されます。

関連Issue

#125913#125295#125624

その他

  • テストはWindows限定([PlatformSpecific(TestPlatforms.Windows)]、NTFS必須)で、管理者権限環境でのみ実行可能
  • CI環境での フラキネス削減の確認が必要

#125865 Adding R2R cDAC dump tests

  • 作成者: @rcj1
  • 作成日時: 2026年03月20日 21:37:05(UTC)
  • マージ日時: 2026年03月28日 01:48:22(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDAC(Common Data Access Component)ダンプテストに対してR2R(Ready-To-Run)コンパイル検証機能を追加するPRです。ダンプテストがR2Rコンパイル版とJIT版(DOTNET_ReadyToRun=0で強制)の両構成でテストされるようになります。テスト構成はExecutionManagerおよびStackWalkダンプについてR2R vs JITの検証をカバーしています。

変更内容

  • DumpTests基盤の拡張: DumpTestBase.csを修正し、ダンプパス解決にR2RModeを含める。CDAC_R2R_MODES環境変数からモード情報を読み込み
  • ビルド/テスト構成: DumpTests.targetsを拡張してダンプ生成をダンプタイプ × R2Rモードのクロスプロダクトで実行。debuggeeビルドをdotnet publishPublishReadyToRun=true)に切り替え
  • Helixパイプライン統合: cdac-dump-helix.projcdac-dump-xplat-test-helix.projを更新。メタデータ生成・伝播によるCDAC_R2R_MODES設定
  • メタデータ伝播: Microsoft.Diagnostics.DataContractReader.DumpTests.csprojdebuggee-metadata.propsを生成し、R2Rモード情報をテスト実行に引き継ぎ
  • Debuggeeプロジェクト規定: Debuggees/Directory.Build.propsR2RModes=R2Rをデフォルト設定。各debuggeeプロジェクトでPublishReadyToRunプロパティ追加
  • テスト構成クラス更新: TestConfiguration.csR2RModeフィールドを追加
  • ExecutionManager契約更新: インターフェース(IExecutionManager.cs)と実装を調整。ドキュメント(ExecutionManager.md)更新

パフォーマンスへの影響

影響なし(テストカバレッジ拡張のみで、ランタイムのパフォーマンス特性には変更なし)

関連Issue

なし

その他

  • ダンプレイアウトが{dumpType}/{r2rMode}/{debuggee}/...構造に変更
  • パイプラインメタデータ伝播により、x-plat Helix テストレグもR2Rモード情報を取得可能
  • ExecutionManagerおよびStackWalkダンプテストが両構成(R2R・JIT)でカバーされる

#125770 [Wasm RyuJIT] Address block store issues from #125756

  • 作成者: @kg
  • 作成日時: 2026年03月19日 11:58:10(UTC)
  • マージ日時: 2026年03月28日 12:41:03(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssembly RyuJIT のブロックストア(GT_STORE_BLK)のローリング/コード生成に関する問題を修正します。Issue #125756 で報告されたクロスジェン/デバッグビルド時のアサート失敗に対応するため、memory.copy/memory.fill オペコードの operand 表現と containment 処理を改善します。

変更内容

  • src/coreclr/jit/lowerwasm.cpp: LowerBlockStore を修正し、GT_IND ソースを contained として扱い、ローカルソースをアドレス形式に変換することで memory.copy オペコードパスに対応
  • src/coreclr/jit/codegenwasm.cpp: ネイティブバルクメモリオペコード(memory.copy/memory.fill)のコード生成時に、operand の containment 期待値を検証するデバッグアサーションを追加
  • src/coreclr/jit/regallocwasm.cpp: register allocation に関連する変更を追加

パフォーマンスへの影響

影響なし

関連Issue

#125756

その他

本 PR は複数回のレビューと修正を経ており、ブロックストア操作の lowering および codegen パスの一貫性強化を段階的に実施しています。作成者も完全な理解過程にあることが記載されています。


#125406 Enable runtime-async for shared framework source projects in net11.0+ and remove RuntimeAsync config knob

  • 作成者: @Copilot
  • 作成日時: 2026年03月10日 20:57:47(UTC)
  • マージ日時: 2026年03月28日 17:46:01(UTC)
  • ラベル: area-Infrastructure-libraries linkable-framework

概要

runtime-asyncをnet11.0以上の共有フレームワークソースプロジェクトで自動有効化し、設定用のRuntimeAsyncconfig knobを削除する変更です。プラットフォーム除外(browser、wasi、android、Apple mobile、Mono)とOOBパッケージの除外条件を設定し、RISC-VとLoongArchのリロケーションハンドリングを修正します。

変更内容

  • src/libraries/Directory.Build.targetsRuntimeAsyncSupportedプロパティを定義し、IsNETCoreAppSrcプロジェクトでnet11.0+対応プラットフォーム上のruntime-asyncを自動有効化。OOBパッケージ(IsPackable=true)は除外
  • eng/testing/tests.targets — マッチングRuntimeAsyncSupportedプロパティを定義。ライブラリがruntime-asyncで配布されるため、TestReadyToRun特別条件を削除
  • src/coreclr/inc/clrconfigvalues.hUNSUPPORTED_RuntimeAsync設定定義を削除
  • src/coreclr/vm/eeconfig.h/cppruntimeAsyncフィールドとアクセッサメソッドを削除
  • src/coreclr/vm/method.cppg_pConfig->RuntimeAsync()ガード条件を削除
  • src/tests/Interop/COM/RuntimeAsync/RuntimeAsync.csproj — 環境変数参照を削除
  • src/coreclr/tools/Common/Compiler/ObjectWriter/PEObjectWriter.cs — RISC-VとLoongArchでのリロケーション処理を修正。addend非ゼロ時のエラー処理を削除し、targetAddress = symbolImageOffset + addendでaddendを正しく反映

パフォーマンスへの影響

影響なし。runtime-asyncは既に機能として存在し、本変更は有効化条件の自動化とコンフィグ削除のみです。

関連Issue

なし

その他

  • 互換性への影響DOTNET_RuntimeAsync環境変数が削除されるため、この変数でruntime-asyncを制御していた環境では動作変更あり(net11.0+では無条件有効)
  • プレビュー機能削除EnablePreviewFeatures=trueを削除。runtime-asyncはプレビュー機能でなくなります
  • プラットフォーム除外 — browser、wasi、android、Apple mobile(iOS/tvOS/macOS variants)、MonoはRuntimeAsyncSupported=falseのため自動有効化対象外

#124794 Rewrite ConvertToDecimal in XslNumber.cs to use safe code with string.Create and for loop

  • 作成者: @Copilot
  • 作成日時: 2026年02月24日 14:30:59(UTC)
  • マージ日時: 2026年03月28日 14:13:48(UTC)
  • ラベル: area-CodeGen-coreclr reduce-unsafe

概要

XslNumber.csConvertToDecimalメソッドをアンセーフコードからセーフコードに書き直しました。stackallocとポインタ演算を使用したunsafeブロックを、string.Createと境界チェック対応のforループに置き換えています。これにより、中間バッファのコピーを削減し、コード安全性を向上させます。

変更内容

  • XslNumber.cs: ConvertToDecimalメソッドの完全な書き直し

    • string.Createを使用して結果文字列に直接書き込み、中間のstackallocバッファを排除
    • while (true)ループ+ポインタ走査をfor (int newPos = result.Length - 1; newPos >= 0; newPos--)に置き換え
    • グループ化セパレータ挿入ロジックは元のアルゴリズムと同等
    • グループ化なし(groupSize == 0)と非ASCII数字システム(shift != 0)の両パスを正しく処理
    • 高速パスの早期リターン(return strreturn str.PadLeft(...))は保持
  • XslCompilerTests.cs: XslNumberDecimalFormattingという12ケースの[Theory]テストを追加

    • ノーオプ高速パス、パディングのみ高速パス、グループ化セパレータ、パディング+グループ化、非ASCII数字システム(アラビア数字、shift != 0)などすべてのコードパスをカバー

パフォーマンスへの影響

  • 中間stackallocバッファのコピー処理が削減されるため、メモリ効率が向上
  • string.Createによる直接書き込みにより、割り当て操作が最小化
  • 具体的なベンチマーク数値は提供されていませんが、アンセーフコードの排除により予測可能なGC挙動が期待できます

関連Issue

なし

その他

  • これはセーフコード化による保守性・安全性の向上が主目的であり、機能変更はありません
  • 既存のテストケースに加え、包括的なテストカバレッジが追加されています

目次