Pull Request on 2026年04月07日

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

注意点

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



#126601 [wasm][coreclr] Fix Regressions test crash by increasing Node.js stack size

  • 作成者: @radekdoulik
  • 作成日時: 2026年04月07日 11:25:45(UTC)
  • マージ日時: 2026年04月07日 15:20:03(UTC)
  • ラベル: arch-wasm area-Infrastructure-coreclr

概要

WebAssembly(WASM)上でNode.jsを経由してCoreC LRテストを実行する際、多数のアセンブリロードと深い再帰的例外処理(フィルタ関数)により、V8 JavaScriptコールスタックがオーバーフローしてテストがクラッシュする問題を修正します。Node.jsスタックサイズをデフォルト(約1MB)から8MBに増やすことで解決します。

変更内容

  • CLRTest.Execute.Bash.targets: Node.js実行時に--stack-size=8192フラグを追加してスタックサイズを8MBに拡大(Linux/macOS対応)
  • CLRTest.Execute.Batch.targets: Node.js実行時に--stack-size=8192フラグを追加してスタックサイズを8MBに拡大(Windows対応)
  • test100536.cs: ネイティブテストアセット(P/Invoke)がないプラットフォームでこのテストを無効化

パフォーマンスへの影響

影響なし。本変更はテストインフラの修正であり、実行時パフォーマンスには影響しません。ただしNode.jsメモリ使用量はスタックサイズ増加により若干増加します。

関連Issue

#100536 #104820

その他

  • Regressionテストスイート実行時、87個のテストアセンブリが単一プロセスにロードされます。アセンブリロード、xunitインフラ、test104820の100レベルの再帰的フィルタ関数処理(100,000回のフィルタ関数実行)により、V8のデフォルトスタック制限を超過してサイレントクラッシュ(exit 0)が発生していました。個別実行ではV8スタック消費が少なく発生しない問題です。

#126578 Add Utf8JsonWriter.Reset overloads accepting JsonWriterOptions

  • 作成者: @eiriktsarpalis
  • 作成日時: 2026年04月06日 16:08:55(UTC)
  • マージ日時: 2026年04月07日 10:17:21(UTC)
  • ラベル: area-System.Text.Json

概要

Utf8JsonWriter.ResetメソッドにJsonWriterOptionsパラメータを受け入れるオーバーロードを追加します。StreamIBufferWriter<byte>の両方の出力に対応し、リセット時にWriterオプションを再構成可能にします。既存のDisposeCheckNotDisposed、内部シリアライザキャッシュの動作は変更されません。

変更内容

  • System.Text.Json.cs: 公開API定義にResetオーバーロード2つを追加(StreamおよびIBufferWriter<byte>用)
  • Utf8JsonWriter.cs:
    • Reset(Stream, JsonWriterOptions)オーバーロード実装
    • Reset(IBufferWriter<byte>, JsonWriterOptions)オーバーロード実装
    • 内部メソッドConfigureForCacheReuseを新規追加(キャッシュ再利用時の初期化用)
  • Utf8JsonWriterCache.cs: キャッシュ再利用ロジックをConfigureForCacheReuseで呼び出すよう修正
  • Utf8JsonWriterTests.cs: 新規オーバーロードとオプションリセット動作の包括的なテスト追加(176行)

パフォーマンスへの影響

影響なし

関連Issue

#123221

その他

Copilotによる指摘として、ConfigureForCacheReuseメソッド内のbufferWriterパラメータに対してArgumentNullException.ThrowIfNull()またはアサーション追加を検討する価値がありますが、現状では実装されていません。


#126475 Reset frameNeedsTailcallUpdate when we don't call interp code

  • 作成者: @BrzVlad
  • 作成日時: 2026年04月02日 15:57:31(UTC)
  • マージ日時: 2026年04月07日 18:22:53(UTC)
  • ラベル: area-CodeGen-Interpreter-coreclr

概要

インタープリタの末尾呼び出し(tailcall)状態管理のバグ修正です。frameNeedsTailcallUpdateフラグがコンパイル済みコードやアンマネージドコード呼び出し後にリセットされずに残ったため、その後の末尾呼び出しでない操作コード(例:INTOP_NEWOBJ)が誤って末尾呼び出しのフレーム更新を実行してしまう問題を修正しました。

変更内容

src/coreclr/vm/interpexec.cpp

  • P/Invoke(アンマネージドコード)のcalliパス実行前にframeNeedsTailcallUpdateをクリア
  • InvokeCalliStubによるコンパイル済みマネージドcalli実行前にクリア
  • コンパイル済みデリゲート呼び出し実行前にクリア
  • コンパイル済みマネージドメソッドのフォールバックパス実行前にクリア

パフォーマンスへの影響

影響なし

関連Issue

#72845(このPRで修正)

その他

  • インタープリタモード(DOTNET_InterpMode=1)での動作に関連する修正です
  • #123225の後退バグの修正です

#126437 Make target OS/arch in Bundler and TargetInfo non-optional

  • 作成者: @Copilot
  • 作成日時: 2026年04月01日 23:24:49(UTC)
  • マージ日時: 2026年04月07日 17:07:08(UTC)
  • ラベル: area-HostModel

概要

ホストモデルのバンドリングAPI(BundlerTargetInfo)をリファクタリングし、ターゲットOSとアーキテクチャを必須パラメータに変更しました。これまでのホスト環境からのフォールバック推論ロジックを削除し、より明示的で予測可能な動作を実現します。テストユーティリティも対応する変更が加えられています。

変更内容

  • Bundler.cs: コンストラクタのシグネチャを変更し、明示的なターゲットOS/アーキテクチャ/フレームワークバージョンを必須に
  • TargetInfo.cs: nullableなOS/アーキテクチャ入力とホストOS推論ロジックを削除;NETFRAMEWORK対応時のArchitecture.RiscV64を追加
  • Binaries.cs: テストが明示的なターゲットOSをバンドリングAPIに渡すためのCurrentOSPlatformヘルパープロパティを追加
  • SingleFileTestApp.cs: バンドリングヘルパーを更新し、明示的なOS/アーキテクチャ/バージョンをBundlerに渡すよう対応
  • BundlerConsistencyTests.cs: バンドラー構築時に明示的なOS/アーキテクチャ/バージョンを提供するよう更新

パフォーマンスへの影響

影響なし

関連Issue

#101548

その他

  • 変更対象は内部APIおよびテストコードであり、公開APIへの直接的な影響はありません
  • この変更により、バンドリング処理がより明示的になり、クロスプラットフォームシナリオでの予測可能性が向上します

#126434 Fix for arm64 outerloop jitstress failures in FMA

  • 作成者: @dhartglassMSFT
  • 作成日時: 2026年04月01日 22:36:02(UTC)
  • マージ日時: 2026年04月07日 01:34:14(UTC)
  • ラベル: area-CodeGen-coreclr

概要

ARM64 JITコンプレッシュで、RMW(Read-Modify-Write)セマンティクスを持つHWIntrinsics(非定数イミディエート使用)のコード生成時に、ジャンプテーブルのエントリサイズ計算が実際に出力される命令数と一致していなかった問題を修正しました。RMW操作のmov命令が各ジャンプテーブルの分岐に重複出力されるようになったため、HWIntrinsicImmOpHelperに明示的な命令数を指定する必要がありました。

変更内容

  • src/coreclr/jit/hwintrinsiccodegenarm64.cpp:
    • 4オペランドSIMDByIndexedElement(RMW)および RMWシフト命令に対し、HWIntrinsicImmOpHelperに明示的なnumInstrsパラメータを追加
    • 2オペランド・3オペランドSIMDByIndexedElementがRMWとして扱われないことを保証するデバッグアサーション追加

パフォーマンスへの影響

非定数イミディエートを使用する場合、ジャンプテーブルの各分岐にmov命令が重複出力されるため、コードサイズがわずかに増加します。ただし、この非定数オペランドケースは稀であり、全体的なコードサイズへの影響は最小限と予想されます。

関連Issue

#126379

その他

修正前は、ジャンプテーブルビルダーが各ケースに1命令のみが含まれると想定していたため、実際に出力された2命令(mov+fmlaなど)との不一致によるjitstressテスト失敗が発生していました。


#126412 Update Mono.Linker.Tests to MSTest

  • 作成者: @Youssef1313
  • 作成日時: 2026年04月01日 15:12:45(UTC)
  • マージ日時: 2026年04月07日 11:05:52(UTC)
  • ラベル: linkable-framework area-Tools-ILLink

概要

Mono.Linker.Tests プロジェクトのテストフレームワークを NUnit から MSTest に移行しました。テスト属性、テストケースデータの供給方法、プロジェクト設定、アセンブリレベルの並列化設定を更新し、MSTest ランナーを採用しています。

変更内容

  • テスト属性の変換: [TestFixture]/[Test][TestClass]/[TestMethod] に、[NonParallelizable] を MSTest の相当機能に変更
  • パラメータ化テストの変換: [TestCaseSource]/[TestCaseData][DynamicData]/[DataRow] に変更
  • using ステートメント: NUnit の using を MSTest の using に置き換え(複数のテストランナーおよび補助ファイルで実施)
  • プロジェクト設定: Mono.Linker.Tests.csproj で TestRunnerName を NUnit から MSTest に変更
  • アセンブリ並列化: AssemblyInfo.cs で NUnit の並列化設定を [assembly: Parallelize] に変更
  • テストデータ生成: TestDatabase.csTestSuites.csMemberAssertionsCollector.cs でテストケース列挙ロジックを MSTest データ行パターンに更新

パフォーマンスへの影響

影響なし

関連Issue

dotnet/arcade#16428

その他

懸念事項: Copilot による分析で、PreserveActionComparisonTests.cs が NUnit 制約アサーション (Assert.That(..., Is.EqualTo(...))) を依然として使用していることが指摘されました。これらは MSTest で コンパイルされないため、Assert.AreEqual() などの MSTest アサーション API に置き換える必要があります。同様に、DocumentationSignatureParserTests.csAssert.NotNull() は MSTest では Assert.IsNotNull() に置き換える必要があります。また TestSuites.csAssert.Ignore() は MSTest で非サポートのため、代替手段(Assert.Inconclusive() など)の検討が必要です。


#126388 Add logic to load webcil as r2r

  • 作成者: @davidwrighton
  • 作成日時: 2026年04月01日 00:15:00(UTC)
  • マージ日時: 2026年04月07日 23:18:42(UTC)
  • ラベル: arch-wasm area-crossgen2-coreclr

概要

WebcilファイルをReadyToRun(R2R)として読み込むためのサポートを追加するPRです。Webcil v1ヘッダーにTableBaseフィールドを追加し、WASM実行環境のインポート方法を変更("env"から"webcil"へ)、cDACのWebcil解析をスペック定義の固定オフセットに基づく実装に更新しました。

変更内容

  • Webcil v1ヘッダーサポート: ヘッダーにTableBaseフィールド(オフセット28)を追加、バージョン対応の可変ヘッダーサイズ実装
  • WASM object writer更新: "webcil"からstackPointerimageBasetableBasetableをインポート、受動要素セグメント生成、ペイロードコピー時のTableBase設定
  • WASM命令エンコーダ拡張: ref.nulltable.growtable.init命令追加
  • cDAC Loaderコントラクト更新: Webcilヘッダー/セクションの読み込みをスペック定義の固定オフセットに変更(ターゲット型情報から独立)
  • Webcilデコーダ更新: v1ヘッダー対応、セクションヘッダベースポインタ追跡、バージョン対応のセクションテーブルベース処理
  • corerun host更新: ペイロードサイズをwasmバイト直接読み込み、テーブル成長有効化、スタックポインタグローバルエクスポート
  • ドキュメント更新: Webcil仕様にv1ヘッダーのTableBase意味論を記載

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

Copilotレビューで複数の低信度指摘あり:WebcilEncoder.EmitHeaderがv1ヘッダーのTableBaseフィールド(4バイト)を初期化なしで出力しており、非決定的なバイナリ出力やスタックデータリークの可能性が指摘されています。この問題は修正待ちの状態です。


#126204 Intrinsify default Comparer<T> and EqualityComparer<T> creation in R2R

  • 作成者: @BrzVlad
  • 作成日時: 2026年03月27日 14:34:47(UTC)
  • マージ日時: 2026年04月07日 15:01:59(UTC)
  • ラベル: area-crossgen2-coreclr

概要

R2R(Ready-to-Run)コンパイル時にComparer<T>.DefaultEqualityComparer<T>.Defaultの初期化をIntrinsic化し、リフレクションベースのコンパラー構築を排除する変更です。これにより、R2Rコンパイラが各ジェネリック型の特殊化されたヘルパーを認識し、実行時の解釈を防ぐことができます。

変更内容

  • Comparer.CoreCLR.cs: [Intrinsic]属性を持つCreate()プライベートメソッドを追加し、Default初期化時に呼び出すよう変更
  • EqualityComparer.CoreCLR.cs: 同様に[Intrinsic]属性のCreate()メソッドを追加
  • ReadyToRunILProvider.cs: R2R IL プロバイダーにおいて、Comparer<T>.Create()およびEqualityComparer<T>.Create()インスタンスの認識と置換ロジックを追加

パフォーマンスへの影響

  • 大幅な改善: ベンチマーク例としてSystem.Collections.ContainsFalse_Int32_.ImmutableList20倍高速化
  • バイナリサイズへの影響: ローカルテストケースで0.5%の増加(比較的小さい)
  • 改善ポイント: GenericEqualityComparer<T>.ctor()GenericEqualityComparer<T>.Equals()などのメソッド解釈が不要になることで、ジェネリック型のcctor実行時のオーバーヘッドが削減

関連Issue

なし

その他

  • NativeAOTで既に採用されているアプローチをCoreCLRに適用した形式
  • 互換性への影響なし(内部実装の最適化)
  • リフレクションベースから特殊化されたヘルパー経由の初期化へ移行することで、R2Rイメージが正確に必要なコンパラー型を根付ける

#125943 Fix Mono-style whitespace in UnsafeMethodMissingRequiresUnsafeAnalyze…

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年03月23日 04:40:30(UTC)
  • マージ日時: 2026年04月07日 23:57:48(UTC)
  • ラベル: linkable-framework area-Tools-ILLink

概要

UnsafeMethodMissingRequiresUnsafeAnalyzer.csのコード形式を ILLink.RoslynAnalyzer プロジェクトのコーディング規約に統一する変更です。メソッド呼び出し/宣言前の空白を削除し、K&R形式の波括弧をAllman形式に統一して、プロジェクト全体のコードスタイルの一貫性を改善します。

変更内容

  • UnsafeMethodMissingRequiresUnsafeAnalyzer.cs: メソッド呼び出しとメソッド宣言の括弧前の空白を削除し、ラムダ式とループのブレーススタイルをK&R形式からAllman形式に変更

パフォーマンスへの影響

影響なし(コード形式の統一のみ)

関連Issue

なし

その他

  • 変更対象はILLink.RoslynAnalyzerツール(IL Linkerのコード削除のための静的解析ツール)の内部実装
  • 公開APIの変更やランタイム動作への影響なし
  • コードスタイルの統一によるメンテナンス性の向上

#121999 Add GroupJoin overload returning IGrouping

  • 作成者: @Copilot
  • 作成日時: 2025年11月26日 19:38:52(UTC)
  • マージ日時: 2026年04月07日 07:37:28(UTC)
  • ラベル: area-System.Linq

概要

LINQ の GroupJoin メソッドに新しいオーバーロードを追加します。従来のオーバーロードで必須だった結果セレクターを廃止し、IGrouping<TOuter, TInner> を直接返すシンプルな API を提供します。EnumerableQueryableAsyncEnumerable の3つのクラスに対応します。

// 新しいオーバーロード(結果セレクター不要)
var groupedResults = outer.GroupJoin(
    inner,
    o => o.Id,
    i => i.OuterId,
    comparer: null);  // optional

// 従来のオーバーロード(結果セレクターが必須)
var groupedResults = outer.GroupJoin(
    inner,
    o => o.Id,
    i => i.OuterId,
    (o, g) => new { o, Items = g }); // 結果セレクター指定が必要

変更内容

  • System.Linq: Enumerable.GroupJoin<TOuter, TInner, TKey> オーバーロド追加(オプション引数 IEqualityComparer<TKey>?)。内部クラス GroupJoinGrouping<TKey, TElement> でグループ化結果をラップします。
  • System.Linq.Queryable: Queryable.GroupJoin<TOuter, TInner, TKey> オーバーロード追加。式木生成に対応し、[DynamicDependency]Enumerable.GroupJoin を参照。
  • System.Linq.AsyncEnumerable: AsyncEnumerable.GroupJoin<TOuter, TInner, TKey> のオーバーロード2つ追加(同期キーセレクター、非同期キーセレクター対応)。内部クラス AsyncGroupJoinGrouping<TKey, TElement> でラップします。
  • 各プロジェクトの参照アセンブリ(ref assembly)を更新。
  • 3つのプロジェクト全体で包括的なテストを追加(.NET Framework 4.8.1 互換性のため #if NET ガードを使用)。

パフォーマンスへの影響

影響なし

関連Issue

#120587

その他

  • この変更は既存の GroupJoin オーバーロードに破壊的な影響はありません(新しいオーバーロードの追加のみ)。
  • 内部実装では IGrouping<TOuter, TInner> インターフェース実装クラスを提供し、キーがグループの外側要素、グループコンテンツが関連内側要素となります。
  • XML ドキュメントコメントがすべてのパブリック API に追加されています。

目次