Pull Request on 2026年01月28日

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

注意点

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


目次

  1. #123724 Install .NET 9.0 in OneFuzz deployment pipeline
  2. #123720 [release/10.0] Fixed codegen for IEnumerable binding (#123422)
  3. #123715 [release/11.0-preview1] Revert "Bring a few jithelpers to new unwind plan (#123307)"
  4. #123710 [browser][wbt] Remove wasm platform from test app slnx
  5. #123707 SPMI: Fix aligned allocation size computation
  6. #123696 Revert "Bring a few jithelpers to new unwind plan"
  7. #123692 Revert "Reduce unsafe usage in TextInfo.cs"
  8. #123688 Use GCPROTECT_BEGININTERIOR to protect pointers into arrays during array marshalling
  9. #123685 Fix the bindhandle tests to use the correct interop description for calling CreateFile
  10. #123664 Fix JIT assertion for AsyncContinuation in GDV compatibility check
  11. #123663 Fixed codegen for IEnumerable binding (#123422)
  12. #123617 DriveInfo: also use /proc on Android to determine DriveFormat.
  13. #123597 Use local dotnet SDK for fuzzing code coverage
  14. #123581 Remove some Apple handling from OpenSSL native shim
  15. #123568 Reduce file existence checks when servicing directory exists
  16. #123564 Fix EH profiler notifications
  17. #123553 Fix NativeAOT tracing tests crash and mark as incompatible
  18. #123548 [browser][MonoAOT] use response file for llvm-size
  19. #123540 Speed up Guid.NewGuid() on Linux
  20. #123489 JIT: Remove tailcall "has GC safe point" assert
  21. #123358 Use unoptimized array sort helper on iOS
  22. #123287 Convert BlazorWebWasm solution file to new format
  23. #123276 Migrate ExtendedLayout test types from IL to C#
  24. #123225 [interp][coreclr] Fix calls to IL helpers from tailcalls
  25. #123002 Implement label validation and typedef resolution in C# ilasm
  26. #122386 Replace deprecated wmic with MSBuild parallelism properties
  27. #122373 [release/10.0] Update OpenSUSE container references to 16.0 and add test compatibility fixes
  28. #122088 [RISC-V] Enhance the utilization of sh1/2/3add(.uw) instructions

#123724 Install .NET 9.0 in OneFuzz deployment pipeline

  • 作成者: @MihaZupan
  • 作成日時: 2026年01月28日 18:46:37(UTC)
  • マージ日時: 2026年01月28日 19:06:04(UTC)
  • ラベル: area-Meta

概要

OneFuzz デプロイメントパイプラインに .NET 9.0 SDK のインストールステップを追加しました。vs2026preview イメージへの更新後、デプロイメントが失敗していた問題を解決します。winget を使用して .NET 9.0 をインストールする処理を追加しています。

変更内容

  • eng/pipelines/libraries/fuzzing/deploy-to-onefuzz.yml (+5/-0)
    • OneFuzz デプロイメントパイプラインに .NET 9.0 SDK インストールステップを追加
    • winget を使用したインストール処理を実装

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このパイプラインは内部ミラー上でのみ実行されます
  • vs2026preview イメージ更新後の数日間、デプロイメントが断続的に失敗していた状況が改善されます
  • 変更内容は限定的で、必要な依存関係(.NET 9.0 SDK)をビルド環境に事前インストールするためのものです

#123720 [release/10.0] Fixed codegen for IEnumerable binding (#123422)

  • 作成者: @github-actions[bot]
  • 作成日時: 2026年01月28日 16:57:51(UTC)
  • マージ日時: 2026年01月28日 23:52:53(UTC)
  • ラベル: Servicing-approved area-System.Configuration source-generator

概要

Configuration Source Generatorで、プライマリコンストラクタを持つクラス/レコードに対して、コンストラクタパラメータがIEnumerable<T>型の場合、バインディング時にSystem.InvalidOperationExceptionが発生していた回帰バグを修正。.NET 10.0.1での回帰で、PR #121325の修正漏れが原因。

変更内容

  • CoreBindingHelpers.cs: IEnumerable<T>型バインディングの特定ケース処理を修正(3行追加/2行削除)
  • ConfigurationBinderTests.TestClasses.cs: 回帰テストケース用のテストクラス追加(6行追加)
  • ConfigurationBinderTests.cs: IEnumerable<T>パラメータを持つプライマリコンストラクタ向けテストケース追加(24行追加)

パフォーマンスへの影響

影響なし。ローカライズされた特定ケースの修正であり、パフォーマンス関連の変更はなし。

関連Issue

関連Issue: #123422 関連PR: #123663(元のPR)、#121325(回帰を招いたPR)

その他

  • リスク評価: Low - 修正は特定の型と特定ケースに限定
  • テスト: 手動検証済み、回帰テスト追加、全テストスイート合格
  • 対象バージョン: release/10.0へのバックポート
  • 顧客報告: あり - 実際のカスタマーレポートに基づく修正

#123715 [release/11.0-preview1] Revert "Bring a few jithelpers to new unwind plan (#123307)"

  • 作成者: @jkotas
  • 作成日時: 2026年01月28日 14:08:25(UTC)
  • マージ日時: 2026年01月28日 21:49:32(UTC)
  • ラベル: Servicing-approved area-VM-coreclr

概要

PR #123307で導入された回帰バグを修正するために、JIT ヘルパーのアンワインド計画に関する変更をリバートします。複数のアーキテクチャ(ARM64、LoongArch64、RISC-V64)で CPU コンテキスト操作の不具合によるランタイムクラッシュが頻発していた問題を解決します。リバートにより、OSR パッチポイント遷移をTransitionBlockベースの構築から、キャプチャ/アンワンドされたコンテキストを使用する方式に戻します。

変更内容

  • src/coreclr/vm/threads.cpp: ClrRestoreNonvolatileContextWorkerの使用をAMD64のみに制限、その他のアーキテクチャではRtlRestoreContextにフォールバック
  • ARM64/LoongArch64/RISC-V64: ClrRestoreNonvolatileContextWorker実装とCONTEXTオフセット/フラグ定数を削除
  • src/coreclr/vm/jithelpers.cpp: OSRパッチポイント遷移をTransitionBlockベース構築からコンテキストキャプチャ/アンワインド方式に変更
  • src/coreclr/vm/excep.cpp: マークされたJITヘルパー識別ロジックとアンワインドパスをリファクタリング、UnwindAndContinueResumeAfterCatch実装を追加
  • src/coreclr/vm/frames.h: SoftwareExceptionFrame::UpdateContextForOSRTransition宣言を削除
  • AMD64アセンブリマクロ: プロローグ/エピローグ関連マクロを簡潔化し、PROLOG_WITH_TRANSITION_BLOCK/EPILOG_WITH_TRANSITION_BLOCK_RETURNに統一

パフォーマンスへの影響

回帰修正による安定性向上: 回帰により発生していたランタイムクラッシュが完全に解決されます。CPU コンテキスト操作の信頼性が復元され、システムの安定性が大幅に改善されます。マルチアーキテクチャ間でのコンテキスト処理の一貫性が向上し、OSR(On-Stack Replacement)パッチポイント遷移時のメモリ安全性が強化されます。

関連Issue

#123307(2025年1月22日にマージされた回帰の原因PR) #123696(メインブランチへの修正PR)

その他

  • リスク評価: - 不具合のあるPRの単純かつクリーンなリバートであるため、導入リスクは最小限です
  • 見つけ方: 内部で検出された重大な問題
  • 適用対象: release/11.0-preview1ブランチへのバックポート
  • デフォルトCI実行で検証済み

#123710 [browser][wbt] Remove wasm platform from test app slnx

  • 作成者: @maraf
  • 作成日時: 2026年01月28日 10:32:13(UTC)
  • マージ日時: 2026年01月28日 13:06:07(UTC)
  • ラベル: arch-wasm test-enhancement area-Infrastructure-mono os-browser

概要

Blazor WebAssemblyのテストアセットソリューション定義から、誤って追加されたwasmプラットフォーム設定を削除するPull Request です。この変更により、ソリューションは標準的なCPUプラットフォームのみに統一されます。

変更内容

ファイル 変更内容
src/mono/wasm/testassets/BlazorWebWasm/BlazorWebWasm.slnx <Platform Name="wasm" /> エントリを削除(-1行)

パフォーマンスへの影響

影響なし

関連Issue

PR #123287 の誤った追加を修正するもの

その他

  • これは意図しない変更のロールバックであり、修正性質のPull Request です
  • ソリューション構成の簡潔性が改善されます

#123707 SPMI: Fix aligned allocation size computation

  • 作成者: @jakobbotsch
  • 作成日時: 2026年01月28日 09:01:44(UTC)
  • マージ日時: 2026年01月28日 11:27:43(UTC)
  • ラベル: area-CodeGen-coreclr

概要

SuperPMI の allocMem 関数で、ポインタのアライメント調整後に十分なメモリ空間を確保するための修正です。従来の単純なサイズ切り上げでは、アライメント調整時にメモリ不足が発生する可能性がありました。ホットコードバッファと読み取り専用データバッファの割り当て時に、アライメント前に追加パディングを確保することで、この問題を解決しています。

// 修正前:サイズを切り上げるだけ
size = ALIGN_UP(size, alignment);
// ポインタのアライメント調整時にメモリ不足の可能性

// 修正後:アライメント調整に必要な余裕を追加
size = ALIGN_UP(size, alignment) + (alignment - 1);
// アライメント後も十分なスペースを確保

変更内容

  • ファイル: src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp
    • ホットコードバッファ割り当て処理の修正
    • 読み取り専用データバッファ割り当て処理の修正
    • 変更行数: +4/-4(計8行)

パフォーマンスへの影響

メモリ割り当てサイズが最大 (alignment - 1) バイト増加します。SuperPMI はテストツールであり、本番環境での実行ではないため、実際のパフォーマンスへの影響は軽微と考えられます。むしろ、アライメント調整時のメモリ不足によるクラッシュやデバッグセッション失敗を防止する点で、テスト信頼性が向上します。

関連Issue

なし

その他

この修正は SuperPMI(Super Performance Measuring Infrastructure)というコンパイラテスト基盤のメモリ管理に関するものです。ICorJitInfo インターフェースの実装部分で、JIT コンパイラのテスト時にメモリ割り当てが正確に行われることを保証する修正です。


#123696 Revert "Bring a few jithelpers to new unwind plan"

  • 作成者: @jkotas
  • 作成日時: 2026年01月28日 01:41:47(UTC)
  • マージ日時: 2026年01月28日 04:09:18(UTC)
  • ラベル: area-VM-coreclr

概要

PR #123307で導入された「新しいアンワインド計画」のJITヘルパー関連の変更をリバートするPRです。複数のアーキテクチャ(ARM64、LoongArch64、RISC-V64)のClrRestoreNonvolatileContextWorker実装を削除し、AMD64のみに制限。JITパッチポイントのコンテキストキャプチャをRtlCaptureContext経由の仮想アンワインドに変更し、プロローグ/エピローグメカニズムの簡素化を実施します。

変更内容

  • マルチアーキテクチャのClrRestoreNonvolatileContextWorker削除:ARM64/LoongArch64/RISC-V64の実装と関連するアセンブリ定数を削除。AMD64のみに制限(threads.cpp)
  • JIT_Patchpointの再実装TransitionBlockからのコンテキスト構築からRtlCaptureContext/仮想アンワインド方式へ変更(jithelpers.cpp)
  • 例外処理ロジック簡素化:マークされたJITヘルパー検出ロジックの整理、インタープリタ専用のUnwindAndContinueResumeAfterCatchエントリポイント追加(excep.cpp、exceptmacros.h)
  • アセンブリマクロの整理:複数プラットフォームでPOP_COOP_PINVOKE_FRAME_WITH_FLOATS_RETURNマクロを削除。AMD64のPUSH_COOP_PINVOKE_FRAME_WITH_FLOATSレイアウト変更
  • 宣言の削除:OSRのTransitionBlock-to-CONTEXTヘルパー宣言を削除(frames.h)

パフォーマンスへの影響

具体的なベンチマーク結果は提供されていません。変更内容から予想される影響:

  • 複雑性の軽減:非AMD64プラットフォームでの不要な実装削除により、保守性向上
  • アンワインド処理RtlCaptureContextへの統一化は、システムAPId経由となるため若干のオーバーヘッド増加の可能性
  • スタック操作の変更:AMD64のプロローグ/エピローグレイアウト変更が、関数呼び出し効率に軽微な影響を与える可能性

関連Issue

  • dotnet/runtime#123307(本PRでリバートされた元のPR)

その他

  • リバートの理由詳細:PR概要では「新しいアンワインド計画」の問題点は明記されていません。詳細はIssue #123307を参照推奨
  • 互換性:内部実装の変更(マークされたJITヘルパー検出ロジック)のため、公開APIへの破壊的変更なし
  • マルチプラットフォーム対応:AMD64とARM64/LoongArch64/RISC-V64での異なるアプローチが確立される

#123692 Revert "Reduce unsafe usage in TextInfo.cs"

  • 作成者: @jkotas
  • 作成日時: 2026年01月27日 23:07:33(UTC)
  • マージ日時: 2026年01月28日 04:09:50(UTC)
  • ラベル: area-System.Globalization reduce-unsafe

概要

PR #122116で行われたTextInfo.cs内のunsafe使用量削減を改めて元に戻すリバートです。NativeAOT(Native Ahead-of-Time)バイナリサイズが回帰(~1.5MB → 1.551MB)し、サイズテストが失敗しているため、この問題(#123667)を調査するために実施されました。

変更内容

  • ファイル: src/libraries/System.Private.CoreLib/src/System/Globalization/TextInfo.cs
    • ToLowerAsciiInvariant(string)メソッドの実装を変更
    • 安全なstring.Createを使用したspan基盤の実装から、fixedステートメントとポインタ演算を使用した unsafe ポインタベースの実装に戻す
    • 変更行数: +17/-11(合計28行)
// unsafe ポインタベースの実装に戻される
// 例: fixed (char* pBuffer = ...) で直接メモリにアクセス

パフォーマンスへの影響

NativeAOT バイナリサイズの回帰が報告されており、以下の懸念があります:

  • サイズ増加: 約 51KB のバイナリサイズ増加(1.5MB → 1.551MB)
  • 詳細不明: 具体的なサイズ増加の原因はこのPRには明記されていませんが、issue #123667 での調査が必要
  • 改善点:リバートにより、元のunsafeベース実装の特性が復元される

関連Issue

  • #123667: NativeAOT バイナリサイズ回帰(osx-x64)
  • #122116: 元の「Reduce unsafe usage in TextInfo.cs」PR

その他

このリバートは一時的な調査用です。バイナリサイズ回帰の根本原因が特定されれば、より最適な解決策が検討される可能性があります。


#123688 Use GCPROTECT_BEGININTERIOR to protect pointers into arrays during array marshalling

  • 作成者: @jkoritzinsky
  • 作成日時: 2026年01月27日 21:26:03(UTC)
  • マージ日時: 2026年01月28日 18:27:16(UTC)
  • ラベル: area-Interop-coreclr

概要

COM相互運用のCOMバリアント配列マーシャリング処理で、GC実行中のメモリ移動によるクラッシュを修正しました。PR #121362でBSTR配列マーシャリングがマネージドコードを呼び出すように変更されたことで、予期しないGC遷移が発生し、内部ポインタが無効化される問題が生じていました。GCPROTECT_BEGININTERIORを使用して配列内部ポインタを保護することで、GCによる配列の移動時にポインタを自動更新できるようになりました。

// 使用例:GCPROTECT_BEGININTERIOR でマネージド配列への内部ポインタを保護
GCPROTECT_BEGININTERIOR(pData);  // GC保護開始
// GCトリガーの可能性がある処理
ManagedCall();  // マネージドコード呼び出し可
GCPROTECT_ENDINTERIOR();  // GC保護終了

変更内容

  • src/coreclr/vm/olevariant.cpp: 配列マーシャリング関数の実装を刷新
    • 10個の配列マーシャリング関数でGCPROTECT_BEGININTERIORを導入
    • 手動のポインタ再計算ロジックを削除(GC後のオフセット調整が不要に)
    • 配列移動をチェックする冗長なコードを削除
    • +155/-212行の差分で、より安全で簡潔な実装に

パフォーマンスへの影響

マイナスの影響(最小限)GCPROTECT_BEGININTERIORの保護領域設定・解除のオーバーヘッドが追加 改善点:手動でのオフセット再計算が削除され、ループ内のコンピュテーションが削減

関連Issue

  • #123271(修正)
  • #123269(修正)
  • #121690(修正)
  • PR #121362(問題の原因)

その他

  • セキュリティ/信頼性: この修正は、GC実行時の配列ポインタが無効化されるメモリセーフティ問題の解決です。BSTR配列マーシャリング時のクラッシュを防止します
  • 範囲: olevariant.cpp のみの修正で、COM相互運用性に関わるコアコンポーネント

#123685 Fix the bindhandle tests to use the correct interop description for calling CreateFile

  • 作成者: @davidwrighton
  • 作成日時: 2026年01月27日 19:44:28(UTC)
  • マージ日時: 2026年01月28日 20:55:03(UTC)
  • ラベル: area-System.Threading

概要

Windows API CreateFile の P/Invoke 宣言における型定義の誤りを修正しました。セキュリティ属性(Atts)とテンプレートファイルハンドル(Template)パラメータは、ネイティブ側ではポインタ型ですが、マネージドコード側で int として宣言されていました。これを nint(ポインタサイズの整数型)に修正することで、64ビットシステムでの正しい相互運用を実現します。

// 修正前:ポインタを32ビット整数で宣言
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, 
    uint dwShareMode, int lpSecurityAttributes, uint dwCreationDisposition, 
    uint dwFlagsAndAttributes, int hTemplateFile);

// 修正後:ポインタをnintで宣言
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, 
    uint dwShareMode, nint lpSecurityAttributes, uint dwCreationDisposition, 
    uint dwFlagsAndAttributes, nint hTemplateFile);

変更内容

3つのバインドハンドルテストファイルで CreateFile P/Invoke 署名を修正:

  • src/tests/baseservices/threading/threadpool/bindhandle/bindhandle1.cs
  • src/tests/baseservices/threading/threadpool/bindhandle/bindhandleinvalid3.cs
  • src/tests/baseservices/threading/threadpool/bindhandle/bindhandleinvalid6.cs

各ファイルで、第4パラメータ(lpSecurityAttributes)と第7パラメータ(hTemplateFile)を int から nint に変更。

パフォーマンスへの影響

影響なし。テストコードの修正のため、パフォーマンスの変化はありません。

関連Issue

なし

その他

これはテストコードの修正であり、ランタイム実装部分への変更ではありません。P/Invoke の正確性向上により、特に64ビット環境での相互運用の信頼性が向上します。


#123664 Fix JIT assertion for AsyncContinuation in GDV compatibility check

  • 作成者: @Copilot
  • 作成日時: 2026年01月27日 11:25:06(UTC)
  • マージ日時: 2026年01月28日 22:38:25(UTC)
  • ラベル: area-CodeGen-coreclr runtime-async

概要

JIT の Guarded Devirtualization (GDV) で AsyncContinuation 引数を含むメソッドが Tiered PGO + Delegate/VTable プロファイリング有効時にアサーション失敗する問題を修正しました。isCompatibleMethodGDV の互換性チェックに WellKnownArg::AsyncContinuation を追加し、コンパイラが挿入する引数として IL シグネチャに含まれない引数として扱うようにしています。

// 修正前: AsyncContinuation がスイッチケースに未対応
// 修正後: RetBuffer, ThisPointer と同様に扱う
case WellKnownArg::AsyncContinuation:
    // Not part of signature but we still expect to see it here
    continue;

変更内容

  • ファイル: src/coreclr/jit/importercalls.cpp
  • 変更内容: Compiler::isCompatibleMethodGDV() メソッド内のスイッチケースに WellKnownArg::AsyncContinuation ケースを追加
    • コンパイラ挿入引数として RetBufferThisPointer と同様に処理
    • シグネチャ互換性チェック時にスキップ対象として適切に扱われるように修正

パフォーマンスへの影響

影響なし。本修正はアサーション失敗を防ぐ互換性チェックの修正であり、パフォーマンス特性に変化なし。

関連Issue

  • Issue #123653

その他

  • fginline.cppimporter.cpp で既存の AsyncContinuation 処理と整合性を取ることで、GDV における処理の一貫性を確保
  • Tiered PGO + Delegate/VTable プロファイリング有効時のテスト環境において報告されていた複数のアサーション失敗を解決

#123663 Fixed codegen for IEnumerable binding (#123422)

  • 作成者: @dmitry-kandiner
  • 作成日時: 2026年01月27日 10:39:53(UTC)
  • マージ日時: 2026年01月28日 16:50:06(UTC)
  • ラベル: area-Extensions-Configuration community-contribution

概要

Configuration Binder の source generator において、ネストされた positional record 内で IEnumerable<T> をバインドする際に InvalidOperationException が誤って発生していた問題を修正しました。コード生成ロジックが ArraySpec 型のみをチェックしていたため、IEnumerable<T> 型には対応していませんでした。

// 修正対象: ネストされた positional record with IEnumerable<T>
public record NestedWithIEnumerable(IEnumerable<string> Items);
public record ContainingIEnumerable(NestedWithIEnumerable Nested);

変更内容

  • CoreBindingHelpers.cs : null チェックと例外生成コードの条件を修正。ArraySpecIsExactIEnumerableOfT プロパティの両方に対応するよう更新(+3/-2)
  • ConfigurationBinderTests.TestClasses.cs : テスト用クラス ContainingIEnumerableNestedWithIEnumerable を追加(+6/-0)
  • ConfigurationBinderTests.cs : TestBindingNestedIEnumerable テストケースを追加し、修正の動作確認(+24/-0)

パフォーマンスへの影響

影響なし。本修正は source generator の条件判定ロジックの修正であり、生成されるコードの実行時パフォーマンスおよびメモリ使用量に変化はありません。

関連Issue

#123422(修正対象のissue)

その他

この修正は Configuration Binder の source generator による code generation の regression を解決するもので、IEnumerable<T> バインディングの互換性を復帰させます。既存の API に破壊的変更はありません。


#123617 DriveInfo: also use /proc on Android to determine DriveFormat.

  • 作成者: @tmds
  • 作成日時: 2026年01月26日 08:20:20(UTC)
  • マージ日時: 2026年01月28日 14:18:01(UTC)
  • ラベル: area-System.IO community-contribution

概要

Android上でDriveInfo/procを使用してドライブフォーマット情報を取得するように対応しました。これにより、Android環境でのドライブ情報取得の完全性が向上します。

// DriveInfo のドライブフォーマット取得時に /proc を参照
// Android 環境でも正常に動作するように改善

変更内容

  • src/libraries/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs
    • 1行追加、1行削除(合計2行変更)
    • Android上で/procファイルシステムを用いたドライブフォーマット情報取得に対応

パフォーマンスへの影響

影響なし

関連Issue

  • #123549(修正対象のIssue)
  • #122964(先行するPull Request。本PRはこちらで漏れていた対応を補完)

その他

  • 本変更はAndroid固有の修正です
  • 先行PR #122964の実装が不完全だった部分の補完です

#123597 Use local dotnet SDK for fuzzing code coverage

  • 作成者: @MihaZupan
  • 作成日時: 2026年01月25日 16:18:20(UTC)
  • マージ日時: 2026年01月28日 18:59:30(UTC)
  • ラベル: area-Meta

概要

ファジング用コードカバレッジ収集スクリプトを改善し、グローバルな dotnet SDK の代わりにローカル SDK を使用するように変更しました。これにより、特殊なセットアップ環境(Helix キュー等)でもファジング機能が正常に動作します。また、ビルド時に既にローカルツールがインストールされているため、グローバルツールの使用を削除しました。

// 変更例: グローバルツールの参照をローカルツールに変更
// Before: dotnet tool run <tool-name>
// After: ./bin/dotnet tool run <tool-name>

変更内容

  • src/libraries/Fuzzing/DotnetFuzzing/collect-coverage.ps1
    • dotnet SDK のパス参照をローカル SDK に変更
    • グローバルツール呼び出しをローカルツール呼び出しに変更
    • 6行削除、6行追加(実質的な変更)

パフォーマンスへの影響

影響なし。この変更は環境構成に関するもので、ファジング処理自体のパフォーマンスには影響しません。

関連Issue

#123079(前のPull Request の後続対応)

その他

MihuBot のファジング機能を Helix キューで動作させるために必要な調整です。特殊なセットアップ環境での互換性向上を目的としています。


#123581 Remove some Apple handling from OpenSSL native shim

  • 作成者: @vcsjones
  • 作成日時: 2026年01月24日 21:27:43(UTC)
  • マージ日時: 2026年01月28日 14:17:13(UTC)
  • ラベル: area-System.Security

概要

macOS が System.Security.Cryptography.Native.OpenSSL のビルドを廃止し、Apple 固有の実装(System.Security.Cryptography.Native.Apple)に移行したため、opensslshim.c から Apple 関連の条件付きコンパイルコードを削除するクリーンアップです。これにより、コードベースから不要な Apple 固有の処理(DYLIBNAME_PREFIX/DYLIBNAME_SUFFIX など)が除去されます。

変更内容

  • src/native/libs/System.Security.Cryptography.Native/opensslshim.c
    • __APPLE__ プリプロセッサ条件式の削除
    • Apple 固有のライブラリ命名処理(DYLIBNAME_PREFIX/DYLIBNAME_SUFFIX)の削除
    • Linux スタイルのライブラリ命名(libssl.so.*)のみをサポートするよう簡略化
    • 差分:+1行/-17行

パフォーマンスへの影響

影響なし。本変更はネイティブシムレイヤーの条件付きコンパイルコード削除のため、ランタイムパフォーマンスに直接的な影響はありません。

関連Issue

なし

その他

この変更は 破壊的変更ではなく、macOS プラットフォームの実装戦略の変更に伴うコード整理です。macOS ユーザーは既に Apple ネイティブ実装を使用しているため、このコード削除は既存の機能に影響しません。ただし、従来通り OpenSSL ベースの実装が必要な場合は、Linux など他のプラットフォームで引き続き利用可能です。


#123568 Reduce file existence checks when servicing directory exists

  • 作成者: @elinor-fung
  • 作成日時: 2026年01月23日 23:27:09(UTC)
  • マージ日時: 2026年01月28日 22:04:57(UTC)
  • ラベル: area-Host

概要

.NET ランタイムのホストポリシーにおいて、サービング ディレクトリ(deps.json追加ファイルの配置先)が存在する場合の不要なファイル存在チェックを削減するパフォーマンス最適化です。これまでサービング ディレクトリの存在だけで全ファイルのグローバルチェックが有効化されていましたが、サービング ディレクトリのプローブ時のみに限定することで、起動時のI/O操作を大幅に削減します。

変更内容

  • ファイル: src/native/corehost/hostpolicy/deps_resolver.cpp
    • グローバル フラグ m_needs_file_existence_checks がサービング ディレクトリの存在のみで設定されるのを廃止
    • サービング config のプローブ時のみ、明示的に is_servicing + file_existence 検索オプションを有効化するよう変更

パフォーマンスへの影響

大幅な改善を確認:

Windows環境でstaticconsoleteplate起動テスト実施時(空のサービング ディレクトリ存在下)

  • 平均実行時間: 69.812 ms → 58.895 ms(-15.6%削減、-10.92 ms)
  • 最小値: 69.392 ms → 58.467 ms
  • 最大値: 70.772 ms → 59.327 ms
  • 標準偏差: 0.393 ms → 0.290 ms(26% 改善、安定性向上)
  • レンジ: 1.38 ms → 0.86 ms(38% 縮小

この最適化により、サービング ディレクトリが存在しアドプローブパスや共有ストアを使用していないアプリケーションの起動時I/O操作が顕著に削減されます。

関連Issue

なし

その他

本変更はホストポリシー層の内部実装であり、公開APIの変更なし。互換性への影響はありません。


#123564 Fix EH profiler notifications

  • 作成者: @janvorli
  • 作成日時: 2026年01月23日 21:03:17(UTC)
  • マージ日時: 2026年01月28日 21:38:25(UTC)
  • ラベル: area-ExceptionHandling-coreclr

概要

新しい例外処理(EH)実装において、funclet(finally/catch ブロックなど)を含むメソッドのプロファイラー通知が重複して報告されていた問題を修正しました。修正前は親メソッドとその各funcletに対して重複した enter/leave 通知が送信されていましたが、修正後は旧EH動作と同様に各メソッドごとに1回のみ報告されるようになります。

変更内容

  • exceptionhandling.cpp: funclet間の遷移時に重複するプロファイラー通知をスキップするチェック処理を追加(+9行)
  • exinfo.cpp/exinfo.h: 通知状態を追跡するためのフラグまたはメカニズムを追加(+3行)
  • テストコード追加:
    • ExceptionTest.cs: C#側のテストケース(+81行)
    • exceptionprofiler.cpp/h: ネイティブプロファイラーテスト実装(+167行, +33行)
    • CMakeLists.txt: テスト設定更新(+1行)

パフォーマンスへの影響

影響なし。この修正はプロファイラー通知ロジックの正確性に関するもので、パフォーマンスの向上も低下も見込まれません。重複通知の削減により、プロファイラー処理側の負荷は軽減される可能性があります。

関連Issue

  • #123351(クローズ)

その他

  • 破壊的変更なし(旧EH動作への互換性回復)
  • 既存アプリケーションに対する影響はなく、プロファイラーツール開発者向けの修正
  • funclet を含むメソッド(try-catch-finally など)でプロファイリングを行う場合に正確な通知が得られるようになります

#123553 Fix NativeAOT tracing tests crash and mark as incompatible

  • 作成者: @Copilot
  • 作成日時: 2026年01月23日 17:34:14(UTC)
  • マージ日時: 2026年01月28日 21:25:40(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT ビルドで Assembly.Location が空文字列を返すため、tracing/userevents テストが ArgumentNullException でクラッシュしていた問題を修正。AppContext.BaseDirectory を使用したディレクトリベースの NativeAOT 検出に切り替え、API を簡素化。修正後、テストは record-trace の NativeAOT 制限により期待通り失敗するため、NativeAotIncompatible としてマーク。

変更内容

  • UserEventsTestRunner.cs: Assembly.Location 依存を削除し、AppContext.BaseDirectory 末尾の native ディレクトリ検出で NativeAOT を判定。両ランタイムで Environment.ProcessPath を使用して tracee を実行。ArgumentList を使用してパスのスペース対応。
  • basic/activity/custommetadata/multithread/managedevent.cs: UserEventsTestRunner.Run() の呼び出しから Assembly.Location パラメータを削除。
  • Directory.Build.props: テストを NativeAotIncompatible としてマーク(追跡 Issue #123697)。

パフォーマンスへの影響

影響なし

関連Issue

#123552(NativeAOT でのテスト失敗)、#123697(record-trace の NativeAOT プロセス検出制限)

その他

NativeAOT ディレクトリ検出の実装例:

string baseDir = AppContext.BaseDirectory;
bool isNativeAot = Path.GetFileName(baseDir.TrimEnd(Path.DirectorySeparatorChar)) == "native";
string userEventsScenarioDir = isNativeAot 
    ? Path.GetFullPath(Path.Combine(baseDir, ".."))
    : baseDir;

// ディレクトリ名がシナリオ名と一致するか検証
if (Path.GetFileName(userEventsScenarioDir.TrimEnd(Path.DirectorySeparatorChar)) != scenarioName)
{
    Console.Error.WriteLine("Could not resolve the userevents test scenario directory.");
    return -1;
}

#123548 [browser][MonoAOT] use response file for llvm-size

  • 作成者: @pavelsavara
  • 作成日時: 2026年01月23日 15:01:22(UTC)
  • マージ日時: 2026年01月28日 10:30:28(UTC)
  • ラベル: arch-wasm area-Build-mono os-browser

概要

WebAssembly AOT ビルド時の llvm-size コマンドのコマンドラインの長さ制限(Windows Server 2016 以前では 8191 文字)を回避するため、オブジェクトファイル引数をレスポンスファイルに移行した変更です。オブジェクトファイルリストを別ファイルに書き出し、@ファイルパス 構文で llvm-size に渡すことで、長いコマンドラインの問題を解決します。

変更内容

  • src/mono/wasm/build/WasmApp.Common.targets: WriteLinesToFile タスクを導入してレスポンスファイル(_WasmLlvmSizeRsp)を生成し、llvm-size コマンドを修正(+11/-1)
  • src/mono/browser/build/BrowserWasmApp.targets: ブラウザ WebAssembly ビルド用に _WasmLlvmSizeRsp プロパティを定義(+1)
  • src/mono/wasi/build/WasiApp.targets: WASI ビルド用に _WasmLlvmSizeRsp プロパティを定義(+1)

パフォーマンスへの影響

直接的なパフォーマンス改善はありませんが、ビルドプロセスの信頼性向上につながります。レスポンスファイルの使用により、多数のオブジェクトファイルを含むビルドが Windows Server 2016 以前の環境でも安定して動作するようになります。

関連Issue

#123257、#123538

その他

この変更は MonoAOT での WebAssembly ビルド(browser-wasm および wasi-wasm)に限定されます。レスポンスファイルは MSBuild の標準的な手法であり、既存のビルドシステムとの互換性を保ちます。


#123540 Speed up Guid.NewGuid() on Linux

  • 作成者: @reedz
  • 作成日時: 2026年01月23日 11:52:09(UTC)
  • マージ日時: 2026年01月28日 14:15:37(UTC)
  • ラベル: community-contribution needs-area-label

概要

Guid.NewGuid()のLinuxでのパフォーマンスを約10倍高速化する最適化を実施しました。getrandom()syscallの活用(14%高速化)と、スレッドローカルストレージでのGUID一括キャッシング(Random.Sharedと同様の手法)により、614.2nsから61.16nsへ改善しています。

// 従来: 1回のGuid生成ごとに1回のsyscall
var guid = Guid.NewGuid(); // 614.2 ns

// 最適化後: 64個のGUIDを一括キャッシュして使用
// 内部的にキャッシュから取得するため大幅高速化
var guid = Guid.NewGuid(); // 61.16 ns (~10x faster)

変更内容

  • src/native/minipal/random.c: HAVE_GETRANDOMガード配下でgetrandom()syscallを使用するminipal_get_cryptographically_secure_random_bytes実装を追加。EINTR処理を含み、/dev/urandom読み込みより高速
  • src/native/minipal/minipalconfig.h.in: CMake設定用HAVE_GETRANDOMマクロ追加
  • src/native/minipal/configure.cmake: sys/random.hgetrandom()検出ロジック追加。サポート環境でHAVE_GETRANDOM定義
  • src/libraries/System.Private.CoreLib/src/System/Guid.Unix.cs: [ThreadStatic]で64個のGUID一括キャッシュを実装。単一のInterop.GetCryptographicallySecureRandomBytes呼び出しで埋充し、RFC 4122 version/variant bitを各GUIDに設定

パフォーマンスへの影響

大幅改善:Linux環境で約10倍の高速化(614.2ns → 61.16ns)を達成。改善要因は以下の通り:

  1. getrandom()の活用による単一syscall化(従来の/dev/urandom読み込みより14%高速)
  2. スレッドローカル64個GUIDキャッシングにより、ほとんどの呼び出しはキャッシュヒットで追加syscallなし

暗号強度の乱数を維持したまま実現される改善点。

関連Issue

  • Fixes #13628
  • Fixes #107989

その他

  • WASI環境向けに非キャッシング版フォールバック実装あり
  • 複数プラットフォームレビュアー(jkotas、vcsjones、stephentoub)による検証済み

#123489 JIT: Remove tailcall "has GC safe point" assert

  • 作成者: @jakobbotsch
  • 作成日時: 2026年01月22日 12:52:21(UTC)
  • マージ日時: 2026年01月28日 22:34:17(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITのテールコール時に使用されていたBBF_GC_SAFE_POINTフラグの検証アサーションを削除する変更です。このフラグは最新状態に保たれていないため、信頼できないアサーションを削除しました。特にテールマージ最適化がGC安全点を持たない新しいブロックを作成する場合に偽の失敗が発生していました。

変更内容

  • src/coreclr/jit/lower.h: デバッグアサート用のGC安全点到達可能性検証ヘルパー関数を宣言
  • src/coreclr/jit/lower.cpp:
    • テールコール経由ヘルパーのアサーションを到達可能性ベースのチェックに置き換え
    • 高速テールコールに同じ到達可能性ベースのアサーションを適用
    • DEBUG専用のCFGウォークヘルパー(IsBlockReachableWithoutGCSafePoint)を追加
    • 古いアサーション20行を削除

パフォーマンスへの影響

影響なし。この変更はデバッグビルド時のアサーションロジックのみを更新するもので、リリースビルドのパフォーマンスには影響しません。

関連Issue

#122481(テールマージ後の偽のアサーション失敗に関連)

その他

  • この変更はバグ修正であり、破壊的変更ではありません
  • テールマージ最適化とテールコール最適化の相互作用による問題を解決します
  • デバッグビルドの信頼性が向上し、偽の失敗によるノイズが低減します

#123358 Use unoptimized array sort helper on iOS

  • 作成者: @BrzVlad
  • 作成日時: 2026年01月19日 17:38:42(UTC)
  • マージ日時: 2026年01月28日 06:43:14(UTC)
  • ラベル: area-CodeGen-Interpreter-coreclr

概要

iOS等の動的コード生成が利用できない環境で、配列ソート性能を最適化するPull Requestです。GenericArraySortHelper<T>がリフレクションで動的にインスタンス化される際にR2Rコンパイル対象外となっていた問題を修正し、IsDynamicCodeCompiledフラグをチェックして非最適化バージョンにフォールバックさせることで、List.Sort()の性能を60倍改善しています。

// 修正例:IsDynamicCodeCompiled チェックを追加
if (RuntimeFeature.IsDynamicCodeCompiled)
{
    // リフレクションベースの特化したヘルパーを使用
    return RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter(...);
}
else
{
    // AOT環境では非最適化版を使用
    return new ArraySortHelper<T>();
}

変更内容

  • ファイル: src/coreclr/System.Private.CoreLib/src/System/Collections/Generic/ArraySortHelper.CoreCLR.cs
    • GenericArraySortHelper<T>生成時にRuntimeFeature.IsDynamicCodeCompiledガード条件を追加
    • GenericArraySortHelper<TKey, TValue>生成時にも同様のチェック追加
    • 動的コード生成が不可の場合は非最適化のArraySortHelperにフォールバック

パフォーマンスへの影響

  • 改善: CompositeR2R + JIT無効環境でList<int>.Sort()60倍高速化
  • 背景: 従来はGenericArraySortHelper<T>がR2R対象外で全メソッドが解釈実行されていた
  • 機構: AOT環境ではリフレクションベースの動的型生成を回避し、AoT友好的なパターンを採用

関連Issue

NativeAoT実装(System.Private.CoreLib/src/System/Collections/Generic/ArraySortHelper.NativeAot.cs)と同一アプローチを採用

その他

  • iOS等のIsDynamicCodeCompiled == false環境が対象
  • 破壊的変更なし(フォールバック先は機能的に同等)
  • NativeAoT/CompositeR2Rの最適化パターンとの一貫性確保

#123287 Convert BlazorWebWasm solution file to new format

  • 作成者: @kasperk81
  • 作成日時: 2026年01月16日 20:57:00(UTC)
  • マージ日時: 2026年01月28日 04:46:51(UTC)
  • ラベル: arch-wasm area-Build-mono community-contribution os-browser

概要

BlazorWebWasm ソリューションファイルを旧形式から新形式(.slnx)に変換しました。この変更は PR #115818 の後続として実施されたもので、Visual Studio のモダンなソリューションファイル形式への移行を目的としています。

変更内容

ファイル 変更内容
BlazorWebWasm.sln 削除(50行) - 旧形式のソリューションファイル
BlazorWebWasm.slnx 追加(10行) - 新形式のソリューションファイル

パフォーマンスへの影響

影響なし

関連Issue

  • PR #115818(先行する変更)

その他

  • このリファクタリングは testassets 内のテストアセットを対象としているため、本体のランタイムコードには直接影響しません
  • 新しい .slnx 形式はより簡潔で保守性の向上が期待されます
  • 既存のプロジェクト参照や依存関係は保持されています

#123276 Migrate ExtendedLayout test types from IL to C#

  • 作成者: @Copilot
  • 作成日時: 2026年01月16日 19:42:49(UTC)
  • マージ日時: 2026年01月28日 22:59:52(UTC)
  • ラベル: 指定なし

概要

ExtendedLayout テストスイートを IL から C# へ移行するPRです。C# コンパイラが ExtendedLayoutAttribute をサポートするようになったため、CStruct と CUnion の型定義を C# で定義できるようになりました。可能な限り C# へ移行し、StructLayoutExtendedLayout の両方の属性が必要な型や無効な型テストのみ IL に残しました。

[ExtendedLayout(ExtendedLayoutKind.CUnion)]
public struct CUnionMixedSizes
{
    public byte byteField;
    public long longField;
}

変更内容

CStruct.cs (+77行)

  • 9個の CStruct 型定義を追加:[ExtendedLayout(ExtendedLayoutKind.CStruct)] 属性を使用
  • プリミティブ型フィールド、参照型フィールド、ネストされた型、空の構造体、byref-like 構造体を含む
  • 共有ヘルパー型 NestedSequentialTypeNestedAutoLayoutType を追加

CUnion.cs (+82行)

  • 9個の CUnion 型定義を追加:[ExtendedLayout(ExtendedLayoutKind.CUnion)] 属性を使用
  • プリミティブ型フィールド、参照型フィールド、ネストされた Union、空の Union を含む

ExtendedLayoutTypes.il (-223行)

  • 9個の IL 定義型を削除(C# へ移行)
  • 9個の型を IL に保持:3個の無効型テスト(属性なし、無効な属性組み合わせ、無効な列挙値)と 6個の双属性型(StructLayoutFieldOffset 併用)

パフォーマンスへの影響

影響なし。この変更はテスト型定義の言語移行であり、ランタイム動作やパフォーマンスに影響しません。

関連Issue

なし

その他

  • 既存テストは変更されず、型名参照は引き続き機能(C# または IL から定義されるように変更)
  • 破壊的変更なし:すべて公開 API の変更ではなく、テストコード内部の定義の移行です
  • IL に残された型は C# では表現できない特殊な属性組み合わせやテストシナリオに必要です

#123225 [interp][coreclr] Fix calls to IL helpers from tailcalls

  • 作成者: @radekdoulik
  • 作成日時: 2026年01月15日 18:09:06(UTC)
  • マージ日時: 2026年01月28日 18:34:42(UTC)
  • ラベル: area-CodeGen-Interpreter-coreclr

概要

CoreCLR インタプリタにおいて、tailcall コンテキスト内で呼び出される IL ヘルパーメソッドが誤って tailcall として扱われるバグを修正しました。ヘルパー IL メソッド呼び出し時に isTailcall フラグを false にリセットすることで、ヘルパー呼び出しが不正に tailcall 最適化されるのを防ぎます。WASM 上の複数のランタイムテストを修正します。

変更内容

  • src/coreclr/vm/interpexec.cpp
    • ヘルパー IL メソッド呼び出しの際に CALL_INTERP_METHOD ラベルへジャンプする前に isTailcall = false; を追加
    • 複数の helper call パターン(例:INTOP_CALL_INTERP_METHOD など)でこの修正を適用
    • tailcall オプコード (INTOP_CALLI_TAIL, INTOP_CALLDELEGATE_TAIL) からの正当な tailcall パスは isTailcall を保持

パフォーマンスへの影響

影響なし。本修正はバグ修正であり、不正な tailcall 最適化の適用を防ぐことで正しい動作を保証します。パフォーマンスへの悪影響はありません。

関連Issue

なし

その他

  • WASM プラットフォーム上で JIT/Methodical/Methodical_d2/Methodical_d2 を含む複数のランタイムテストが修正されました
  • Copilot による分析では、INTOP_SETUP_CONTEXTS_ON_SUSPENDINTOP_RESTORE_CONTEXTS_ON_SUSPENDINTOP_CHECK_FOR_CONTINUATION の 3 つのオプコードパスで同様の問題が未修正である可能性が指摘されています

#123002 Implement label validation and typedef resolution in C# ilasm

  • 作成者: @am11
  • 作成日時: 2026年01月08日 08:07:00(UTC)
  • マージ日時: 2026年01月28日 21:21:07(UTC)
  • ラベル: area-ILTools-coreclr community-contribution

概要

C# ilasm(IL アセンブラ)にラベル検証typedef 解決機能を実装しました。命令トークンを文法に統合してレキサー優先度を確立し、ラベルの未定義参照を検出してエラー報告します。メソッド本体の回復可能なエラーでもアセンブリ生成を継続できるよう改善しました。

// ラベル検証の例
// 未定義ラベルへのジャンプはエラーとして報告
br undefined_label  // Error: Label 'undefined_label' is not defined

変更内容

  • CIL.g4: 命令トークンをメイン文法に統合(+265行)、メソッド宣言の代替案を再順序化
  • GrammarVisitor.cs: デバッグ/シンボル指示の visitor スタブ実装(VisitLanguageDecl, VisitEsHead など)、typedef 解決処理追加、ラベル検証ロジック実装(+534行)
  • EntityRegistry.cs: typedef 解決機能の追加(+76行)
  • Diagnostic.cs: 診断エラー型の追加(+20行)
  • DocumentCompilerTests.cs: ラベル検証、typedef 解決、エラー処理のテスト追加(+510行)

パフォーマンスへの影響

影響なし。今回の変更はコンパイル時の正確性向上に注力しており、ランタイムパフォーマンスへの影響はありません。メソッド終了時のラベル追跡はメモリ効率的に実装されています。

関連Issue

なし(PR説明に記載なし)

その他

  • 互換性への注意: ラベル検証により、従来未検出だった未定義ラベル参照がエラーとして報告されるようになります。既存の IL コードで未定義ラベル参照がある場合は修正が必要です。
  • エラー回復: メソッド本体内の回復可能なエラーでもアセンブリ生成を継続する仕様により、複数エラーを一度に検出できます。

#122386 Replace deprecated wmic with MSBuild parallelism properties

  • 作成者: @Copilot
  • 作成日時: 2025年12月10日 13:40:02(UTC)
  • マージ日時: 2026年01月28日 13:18:27(UTC)
  • ラベル: 指定なし

概要

非推奨となったwmicコマンドを廃止し、MSBuildのネイティブなパラレリズムプロパティに置き換えるビルドスクリプト修正です。新しいWindowsビルドでの互換性問題を解決します。

// 変更前(wmic使用)
for /f %%A in ('wmic cpu get NumberOfCores ^| findstr [0-9]') do set NumberOfCores=%%A
set CL_MPCount=%NumberOfCores%

// 変更後(MSBuildプロパティ使用)
set UseMultiToolTask=true
set EnforceProcessCountAcrossBuilds=true
set EnableClServerMode=true

変更内容

  • src/coreclr/build-runtime.cmd: wmic cpu get NumberOfCores検出ロジック(12行)を削除
  • src/tests/build.cmd: wmic cpu get NumberOfCores検出ロジック(12行)を削除
  • src/coreclr/Directory.Build.props: CL_MPCountプロパティ(1行)を削除
  • Directory.Build.props: MSBuildパラレリズムプロパティ3つ(8行)を追加
    • UseMultiToolTask=true
    • EnforceProcessCountAcrossBuilds=true
    • EnableClServerMode=true

パフォーマンスへの影響

パフォーマンス改善が期待されます。Microsoftの推奨アプローチに従うことで、モダンなマルチコアシステムでのC++ビルド並列化が最適化されます。ただし、具体的なベンチマーク数値は提供されていません。

関連Issue

#118223 - wmic deprecated/missing on newer builds of windows

その他

  • Arcade SDKインポート直後のPropertyGroupに設定されているため、リポジトリ全体のプロジェクトに適用される
  • Microsoft公式ブログの推奨手法に準拠
  • 破壊的変更なし(内部ビルドシステムの改善)

#122373 [release/10.0] Update OpenSUSE container references to 16.0 and add test compatibility fixes

  • 作成者: @Copilot
  • 作成日時: 2025年12月10日 00:35:49(UTC)
  • マージ日時: 2026年01月28日 21:07:01(UTC)
  • ラベル: Servicing-approved area-Infrastructure

概要

OpenSUSE コンテナ参照を 15.6 から 16.0 に更新し、Helix パイプライン設定を新しい OpenSUSE リリースに対応させるインフラストラクチャ変更です。また OpenSUSE 16.0 との互換性を確保するために、プラットフォーム検出とテストのスキップ処理、IDNA テストデータの更新を含みます。

変更内容

ファイル 内容
eng/pipelines/libraries/helix-queues-setup.yml Helix キュー名とコンテナイメージを openSUSE.15.6 から openSUSE.16.0 に更新
PlatformDetection.Unix.cs IsOpenSUSE16 プロパティを追加して OpenSUSE 16.0 および OpenSUSE Leap 16.0 を検出
NegotiateAuthenticationTests.cs Package_Unsupported_NTLM テストに ActiveIssue 属性を追加し OpenSUSE 16 でスキップ(gss-ntlmssp 1.2 のバグに対応)
CalendarTestBase.cs Unicode 17.0 IDNA テストデータと ICU 78+ 互換性テストインフラを追加
IdnMapping/Data/Factory.cs ICU バージョンに基づいて適切な Unicode バージョンを使用するようテスト データファクトリを更新
Unicode_17_0/ Unicode 17.0 IDNA テストデータを新規追加

パフォーマンスへの影響

影響なし。本変更はインフラストラクチャ関連の更新と CI/CD パイプライン用のテスト互換性修正のみであり、ランタイムのパフォーマンスに影響しません。

関連Issue

main PR: https://github.com/dotnet/runtime/pull/122371

その他

  • 日本語カレンダーの変更は意図的に除外。既存の commit ff082da09 からのテスト修正が OpenSUSE 16.0 互換性に十分
  • すべての変更はテストのみの修正で、本番コードの動作は変更されない
  • 低リスク変更:単一行のパイプライン参照更新とプラットフォーム固有のテストスキップ・データ更新のみ

#122088 [RISC-V] Enhance the utilization of sh1/2/3add(.uw) instructions

  • 作成者: @namu-lee
  • 作成日時: 2025年12月02日 01:33:52(UTC)
  • マージ日時: 2026年01月28日 13:53:59(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution arch-riscv

概要

RISC-V JITコンパイラにおいて、Common Subexpression Elimination(CSE)による最適化がアドレッシングモードノードを変換してしまい、Zba拡張のsh1/2/3add(.uw)命令の生成を妨げていた問題を修正しました。CSEの対象外フラグを設定することで、効率的なシングル命令での実装が可能になりました。

改善例:

// 修正前: slli.uw + add (2命令)
// slli.uw a2, a1, 3
// add a3, s2, a2

// 修正後: sh3add.uw (1命令)
// sh3add.uw a2, a1, s2

変更内容

  • src/coreclr/jit/gentree.cpp: RISC-V64対象時にアドレッシングモード内のGT_CASTノードにGTF_DONT_CSEフラグを設定し、CSE最適化を防止
  • src/coreclr/jit/gentree.h: 関連するヘッダ調整
  • src/coreclr/jit/optcse.cpp: CSE処理の微調整
  • src/coreclr/jit/emitriscv64.cpp: コメント内のタイプ修正("sccale" → "scale")

パフォーマンスへの影響

改善: 命令数削減により実行速度が向上します。

  • 従来: slli.uw + add = 2命令サイクル
  • 改善後: sh1/2/3add(.uw) = 1命令サイクル

特に配列アクセスなどのインダイレクション処理が多い場合、命令キャッシュ効率とスループットの向上が期待できます。

関連Issue

  • Issue #84834(Samsung関連)

その他

  • Zba拡張対応のRISC-V64でのコード生成品質向上
  • 破壊的変更なし(内部JITロジックの改善)

目次