Pull Request on 2026年07月03日

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

注意点

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



#130186 JIT: initialize emitCurIG at declaration

概要

RISC-V エミッタにおいて、コード生成前の段階で emitLoadImmediate がコスト推定目的で gtSetEvalOrder から呼び出される際、emitter::Init() 実行前の初期化されていない emitCurIG ポインタを参照して SIGSEGV クラッシュが発生する問題を修正します。emitCurIG をデフォルト初期化(= nullptr)することで、JIT初期段階での安全なクエリ動作を保証します。

変更内容

  • src/coreclr/jit/emit.h: emitter::emitCurIG メンバー変数を宣言時に nullptr で初期化(+1/-1)
  • emitGeneratingPrologOrFuncletProlog() などの早期呼び出し時に、未初期化のポインタを参照する代わりに安全に false を返すようになります

パフォーマンスへの影響

影響なし

関連Issue

#130145

その他

  • クラッシュの確認手段: x64ホスト向けRISC-V クロスJIT上で ilc @ilc.ilc.rsp を実行。修正前は終了コード 139(コアダンプ)で emitIGisInProlog(0xdddd...) スタックトレースが発生。修正後は終了コード 0 で正常に RISC-V ilc.o を生成
  • GitHub Copilot CLI によって生成された PR

#130181 JIT: Enable tail await optimization in async versions in tier 0

概要

Tier 0 JITコンパイル中にtail await最適化を有効化し、Tier 1にティアアップされるまで待たずにメモリアロケーションを削減する変更。TechEmworksベンチマークにおいて、最大アロケーション率が約110MB/secから8MB/secへと大幅に低下しました。

変更内容

  • src/coreclr/jit/importercalls.cpp: impSetupAsyncCall内の条件をoptimizationEnabled()からTier0OptimizationEnabled()`に変更し、async-versionコールに対してTier 0段階でtail-await適格性ロジックを適用可能に

パフォーマンスへの影響

大幅な改善:TechEmpower platform-jsonベンチマークにおいて、最大アロケーション率を約98%削減

  • 修正前:110,580,952 B/sec
  • 修正後:8,030,616 B/sec

この改善により、Tier 1へのティアアップ完了前のコールドパスでのアロケーションオーバーヘッドを削減。

関連Issue

なし

その他

  • 内部実装変更(JITのインポーター段階)で、公開APIに影響なし
  • 破壊的変更なし
  • canTailCallのチェックを通じて、実際にtail callが可能なケースのみ最適化が適用されるため、安全性は保証される

#130167 [mobile] Restore iOS device legs for Apple library tests in runtime.yml

概要

iOS デバイスキューのインフラストラクチャ問題が解決されたため、iOS ライブラリテストレグをシミュレーターから物理デバイスへ戻すCIパイプラインの変更です。NativeAOT と CoreCLR のライブラリテストジョブを iossimulator_arm64 から ios_arm64 に戻し、一時的なワークアラウンドノートを削除します。

変更内容

  • eng/pipelines/runtime.yml: NativeAOT ライブラリテストレグを iossimulator_arm64 から ios_arm64 に変更
  • eng/pipelines/runtime.yml: CoreCLR ライブラリテストレグを iossimulator_arm64 から ios_arm64 に変更
  • デバイスキューインフラ障害に関する一時的なコメント削除
  • セクションヘッディングを "iOS simulators" から "iOS devices" に更新

パフォーマンスへの影響

影響なし

関連Issue

#130167

その他

この変更は CI/CD パイプラインの設定変更であり、ランタイムやコンパイラ、ライブラリ自体の機能変更ではありません。テスト実行環境が物理デバイスに戻ることで、シミュレーター環境では検出できなかった iOS デバイス固有の問題がテストされるようになります。


#130153 [Wasm/RyuJit] treat all try side-entries as try entries for throw helpers

概要

Wasm JITコンパイラのDFS(深さ優先探索)グラフ走査において、try領域へのside entry(非同期やcatch再開地点など)からのエントリーを正式なtryエントリーとして扱うように改善しました。これにより、throw helperブロック(ACD)がDFS内で確実に優先的に訪問され、RPO(逆事後順序)内で最後に配置されるようになり、領域内のどのエントリーからでも前方分岐でアクセス可能になります。

変更内容

  • src/coreclr/jit/fgwasm.h: Wasm固有のDFS後継者列挙ロジックを調整
    • 「汎化try entry」(try headerまたはside-entry)を分類するローカル述語を導入
    • ACD throw-helper後継者をWasm後継者列挙に注入する際、この述語を使用して判定処理を実装

パフォーマンスへの影響

影響なし(コード生成の正確性を向上させるロジック改善)

関連Issue

#130153

その他

  • ランタイムコンパイラ(RyuJit)の内部実装変更
  • Wasm環境における非同期/例外処理時のコード生成の信頼性向上が目的
  • 変更量が小さく(+28行)、既存機能を拡張するもので破壊的変更なし

#130152 Revert "Make MemoryCache thread-safety tests deterministic"

概要

PR #129897で実装されたMemoryCacheスレッドセーフティテストの決定論的変更をリバートします。CI失敗(Issue #130139)に対応するため、時間ベース/同時実行ループ形式のテストを復元し、失敗シナリオに対してActiveIssueスキップを追加します。

変更内容

  • MemoryCacheSetAndRemoveTests.cs: バリア+固定反復ループから、キャンセル/時間ベースループへのテスト変更を実施
  • ActiveIssue(72890)アノテーションを複数のテストに追加し、Issue調査中のテストを無効化
  • テストファイル内の軽微なフォーマット変更を含む

パフォーマンスへの影響

影響なし

関連Issue

  • #130139
  • #129897(リバート対象のPR)
  • #72890(ActiveIssueで参照される調査中のIssue)

その他

このリバートは、決定論的テスト実装が予期しないCI失敗を引き起こしたため、テストアプローチを以前の時間ベース方式に戻す対応です。Issue #72890の根本原因がまだ調査中であるため、該当するテストは一時的にスキップされています。


#130146 Update OutOfMemoryException test

概要

OutOfMemoryException テストが GC Stress 環境で不安定な動作をするため、テスト設定を更新して GC Stress での実行を除外しました。GC Stress 中の追加メモリ割り当てにより、期待されるタイミングより早くテストループが完了してしまい、OOMException が正しく発生しない問題を解決します。

変更内容

  • src/tests/baseservices/exceptions/OutOfMemoryException/OutOfMemoryException.csproj
    • プロジェクトファイルに GCStressIncompatible=true を追加して GC Stress 環境での実行を無効化
    • GC Stress がテストの信頼性を低下させる理由を説明するコメントを追加

パフォーマンスへの影響

影響なし(テスト実行環境の設定変更のみ)

関連Issue

#129159

その他

この変更はテストの信頼性向上を目的とした設定修正です。GC Stress 環境では GC 自体が行うメモリ割り当てがテストロジックと干渉し、意図した OutOfMemoryException シナリオが再現されないため、このテストを除外対象にしています。


#130132 Enable trim/AOT analyzers on System.Text.Json source generator tests

概要

System.Text.Json ソースジェネレータテストプロジェクトの trim/AOT アナライザーを有効化し、PR ビルド時に AOT/trim 回帰をキャッチできるようにします。テストコードを更新して反射ベースのシリアライズパスを避け、JsonTypeInfo ベースの API を優先する、または反射使用を明示的に注釈付けします。これにより、Native AOT outerloop 実行時のみでなく通常の PR でも検出が可能になります。

変更内容

  • プロジェクト設定: System.Text.Json.SourceGeneration.Roslyn テストプロジェクトの EnableTrimAnalyzer/EnableAotAnalyzer=false オプトアウトを削除してアナライザーを再有効化
  • API 使用パターン: テストを JsonTypeInfo ベース API(GetTypeInfo<T>()など)に移行し、反射ベース GetTypeInfo(Type) パターンを削除
  • 注釈追加: DynamicallyAccessedMembers、RequiresUnreferencedCode、RequiresDynamicCode 属性を、意図的な反射/動的コード使用箇所に追加
  • 属性ソース: .NET Framework ビルド向けに欠落していた CodeAnalysis/CompilerServices 属性ソースを追加
  • 共有テストコード: 42 ファイルのテストコードを更新(DomTests、SerializerTests、PolymorphicTests など)して、反射に依存しない構成と互換性を確保

パフォーマンスへの影響

影響なし

関連Issue

#129965

その他

この変更は内部実装(テストコード)の改善であり、公開 API への破壊的変更はありません。AOT/trim 対応性の強化は NativeAOT デプロイメント シナリオでの互換性向上に貢献します。


#130116 Re-add a Mono iOS simulator smoke leg

概要

Mono iOS シミュレータ(arm64)CI ジョブを runtime-extra-platforms-ioslikesimulator.yml パイプラインに再追加します。このジョブは Mono(AOT + forced interpreter)でプロダクトをビルドし、Helix でライブラリスモークテストを実行することで、Mono が iOS シミュレータ上で継続的に正常にビルド・動作することを検証します。

変更内容

  • eng/pipelines/extra-platforms/runtime-extra-platforms-ioslikesimulator.yml
    • AllSubsets_Mono ジョブを iossimulator_arm64 プラットフォーム向けに追加
    • runtimeFlavor: mono を設定
    • /p:RunAOTCompilation=true と /p:MonoForceInterpreter=true でビルド
    • /eng/pipelines/libraries/helix.yml 経由でテスト実行を構成

パフォーマンスへの影響

影響なし(CI/CD パイプライン設定変更のため)

関連Issue

なし

その他

本変更はパイプライン・CI 設定のみの修正であり、プロダクトコードの変更はありません。iOS シミュレータ上での Mono の継続的な検証体制の復旧を目的としています。


#130103 Make String.ThrowSubstringArgumentOutOfRange static

  • 作成者: @Copilot
  • 作成日時: 2026年07月01日 23:11:20(UTC)
  • マージ日時: 2026年07月03日 21:04:39(UTC)
  • ラベル: area-System.Runtime

概要

String.Substringメソッドの引数チェックで使用されるThrowSubstringArgumentOutOfRangeヘルパーメソッドをstaticに変更し、thisの参照を渡さないようにリファクタリングしました。これにより、JIT のエスケープ分析がより効果的に動作し、パフォーマンスが向上する可能性があります。例外の動作は変わりません。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/String.Manipulation.cs
    • ThrowSubstringArgumentOutOfRangeメソッドをインスタンスメソッドからstaticメソッドに変更
    • Substring(int startIndex)およびSubstring(int startIndex, int length)で、文字列のLengthを明示的に引数として渡すように修正
    • throw ヘルパーが文字列オブジェクト自体を受け取らず、長さの値のみを受け取るように調整

パフォーマンスへの影響

潜在的な改善:JIT エスケープ分析がthis参照の追跡を不要とするため、スタック割り当て最適化の対象が広がる可能性があります。メモリ割り当ての削減が期待できます。

関連Issue

なし

その他

  • このPRは GitHub Copilot の支援により生成されました
  • 例外発生時の動作は変わらず、内部実装の最適化のみです

#130098 Gate ILCompiler pack version update to explicit references

  • 作成者: @sbomer
  • 作成日時: 2026年07月01日 20:43:06(UTC)
  • マージ日時: 2026年07月03日 16:12:46(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT構築時のILCompilerパックバージョン管理を改善するPR。Microsoft.DotNet.ILCompilerパッケージがインポートする.targetsファイルで、KnownILCompilerPackの更新を明示的なPackageReference参照に限定し、SDK生成の暗黙的参照がSDK同梱版を上書きするのを防止します。

変更内容

  • src/coreclr/nativeaot/BuildIntegration/Microsoft.DotNet.ILCompiler.SingleEntry.targets
    • KnownILCompilerPack更新の条件判定を追加し、明示的なMicrosoft.DotNet.ILCompiler PackageReferenceが存在する場合のみ実行するよう制御
    • 評価時のItemGroup更新からProcessFrameworkReferencesターゲット前実行のターゲットに変更
    • 暗黙的参照(SDK生成)の場合はSDK同梱バージョンを保持

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

検証内容:

  • 暗黙的PackageReferenceがSDK同梱ILCompilerバージョンを保持することを確認
  • 明示的PackageReferenceがKnownILCompilerPackをパッケージバージョンに更新することを確認
  • SDK 10.0.100→10.0.103アップグレード後、CollectPackageReferencesが古い10.0.0ではなく10.0.3を報告することで、stale-assetsシナリオの修正を検証

互換性: 明示的なMicrosoft.DotNet.ILCompiler PackageReferenceを使用するカスタム/日次ビルドシナリオは既存の動作を保持


#130025 [ios-clr] Throw descriptive error when a stripped IL body is needed at runtime

  • 作成者: @kotlarmilos
  • 作成日時: 2026年06月30日 09:13:14(UTC)
  • マージ日時: 2026年07月03日 06:20:53(UTC)
  • ラベル: area-VM-coreclr

概要

crossgen2の--strip-il-bodiesオプションで生成されたReadyToRun イメージにおいて、実行時に予期せず必要とされるストリップされたIL本体を検出し、不透明なNullReferenceExceptionの代わりに説明的なBadImageFormatExceptionをスロー するようにしました。これにより、デバッグ時に実際の問題(ストリップされたIL本体)を特定しやすくなります。

変更内容

  • src/coreclr/vm/prestub.cpp: メソッドコンパイルパスにおいて、ストリップされたILスタブ(ldnull; throwパターン)を検出し、COR_E_BADIMAGEFORMAT例外をスロー
  • src/coreclr/tools/aot/ILCompiler.ReadyToRun.Tests/TestCasesRunner/R2RResultChecker.cs: テストケースのチェック条件を更新
  • src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/CopiedMethodILNode.cs: IL処理ロジックの調整

パフォーマンスへの影響

影響なし

関連Issue

#129813

その他

この変更はJITフォールバックのないランタイム環境(iOSなど)でのデバッグエクスペリエンスを改善します。既存のイメージレベルのガード(readytoruninfo.cppのロード時チェック、ceeload.cppの即座フェイルファスト)を補完し、ReadyToRunがアクティブな状態で遅延コンパイルされる単一メソッドのケースに対応しています。


#129854 Align RV64's cordbregisterset with LA64 and arm64

概要

RV64(RISC-V 64-bit)のデバッガレジスタセット実装をLA64(LoongArch 64-bit)およびARM64と整列させる変更。前回のPR #129671のフォローアップで、複数のアーキテクチャ間でデバッガレジスタ処理の一貫性を向上させています。

変更内容

  • src/coreclr/debug/di/riscv64/cordbregisterset.cpp: RV64のレジスタセット実装を大幅に拡張(165行追加)し、他のアーキテクチャとの整列を実施
  • src/coreclr/debug/di/rspriv.h: デバッガプライベートヘッダーの定義を微調整(1行の変更)
  • src/coreclr/debug/di/rsthread.cpp: スレッド関連のレジスタ処理ロジックを整合化(14行追加、12行削除)
  • src/coreclr/debug/inc/riscv64/primitives.h: RV64プリミティブ定義に新規エントリを追加(4行追加)
  • src/coreclr/debug/inc/loongarch64/primitives.h: LA64プリミティブ定義を調整(5行追加)
  • src/coreclr/debug/di/loongarch64/floatconversion.S: LA64浮動小数点変換アセンブリの軽微な修正(3行変更)

パフォーマンスへの影響

影響なし(デバッガコンポーネント内の構造的整列であり、実行時パフォーマンスへの直接的な影響はありません)

関連Issue

#129671(このPRのフォローアップ対象)

その他

内部デバッグサブシステム(cordbg/CoreDebugger)の変更であり、公開APIへの影響はありません。マルチアーキテクチャ対応の一貫性向上に関する保守性改善です。


#129812 Add 10 new pipelines to CI pipeline monitor and match Pipeline Details order in Cached table

概要

CI パイプラインモニタードキュメントに9つの欠落パイプラインを追加し、Pipeline Details テーブルと Cached Definition ID Mapping テーブルの順序を統一しました。GC関連パイプライン(gc-simulator、gc-standalone)とアウターループ関連パイプライン(r2r、interpreter、nativeaot-outerloop、diagnostics など)を論理グループで整理し、キャッシュテーブルを定義ID昇順に並べ替えています。

変更内容

  • .github/skills/ci-pipeline-monitor/pipelines.md
    • Pipeline Details テーブルに9つの新規パイプラインを追加:
      • GC関連:runtime-coreclr gc-simulator(Def ID: 123)、gc-standalone(Def ID: 146)
      • R2R/Interpreter/OuterLoop関連:runtime-coreclr r2r(120)、runtime-coreclr r2r-extra(114)、runtime-interpreter(316)、runtime-libraries-interpreter(330)、runtime-nativeaot-outerloop(265)、runtime-diagnostics(309)、runtime-coreclr outerloop(108)
    • Cached Definition ID Mapping テーブルに同じ9パイプラインを追加(定義IDマッピング付き)
    • キャッシュテーブルを定義IDの昇順に並べ替え(Private — skip 行はテーブル末尾に保持)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

一部パイプライン(gc-standalone、runtime-interpreter、runtime-libraries-interpreter)はADO名が表示名と異なることが記載されています。ドキュメント更新のみのため、実装コードへの影響はありません。


#129762 Enable ICF on Linux

概要

Linux プラットフォームで Identical Code Folding (ICF) を有効化する変更です。ICF はリンカーの最適化機能で、機械的に同一のコード セグメントを統合してバイナリ サイズを削減します。平均で約 2% のサイズ削減が見込まれます。

変更内容

  • eng/native/configurecompiler.cmake: Linux での C++ コンパイラ設定に ICF フラグを追加(3行追加)
  • src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Unix.targets: NativeAOT の Linux ビルドに ICF フラグを追加(1行追加)

パフォーマンスへの影響

バイナリ サイズが平均 2% 削減されます。実行速度への影響は記載なし。

関連Issue

なし

その他

CI テストをクリアしています。この変更はリンカー レベルの最適化で、ランタイムの内部実装に影響します。


#129624 Added async overload of ChangeToken.OnChange

概要

Microsoft.Extensions.Primitives.ChangeToken.OnChangeに非同期オーバーロードを追加し、change tokenの発火時にasync voidを使用せずに非同期ロジックを実行できるようにしました。既存の同期実装はChangeTokenRegistration<TState>を抽象基底クラスに再構成し、SyncChangeTokenRegistrationとAsyncChangeTokenRegistrationのサブクラスに分割しています。

新しいオーバーロード:

public static IDisposable OnChange(
    Func<IChangeToken?> changeTokenProducer, 
    Func<Task> changeTokenConsumer);

public static IDisposable OnChange<TState>(
    Func<IChangeToken?> changeTokenProducer, 
    Func<TState, Task> changeTokenConsumer, 
    TState state);

変更内容

  • ChangeToken.cs: 既存の同期実装を抽象基底クラスに再構成。新しい非同期オーバーロードを追加。非同期実装では、consumerのTask完了までchange tokenの再登録を遅延させ、その間の変更を単一の呼び出しに統合します。
  • Microsoft.Extensions.Primitives.ref: 新しい公開オーバーロードをref assemblyに追加。
  • ChangeTokenTest.cs: オーバーロード解決の変更に対応した既存テストの調整と、非同期動作・disposal・変更の統合に関する新規テストを追加。
  • ThrowHelper.cs、Strings.resx: 引数検証用のエラーメッセージ追加。

パフォーマンスへの影響

  • 非同期consumerが同期的に完了する場合、async state machineの割り当てを回避できます。
  • 処理中に発生した変更を統合することで、不要な再登録を削減できます。
  • 同期オーバーロードの動作は変わりません。

関連Issue

#69099

その他

ソース破壊的変更: asyncラムダを既存のOnChangeに渡す既存コードは、従来はActionオーバーロード(async voidにコンパイル)にバインドしていましたが、新しいオーバーロードが存在するとFunc<Task>オーバーロードにバインドするようになります。新しい動作は一般に正しいですが、既存コードに影響を与える可能性があります。同期的な例外は即座に伝播されますが、非同期の例外はTaskScheduler.UnobservedTaskExceptionを通じてのみ観測可能で、documentationに記載されています。


#129474 Reenable compiling runtime-async versions of synchronous task-returning methods in crossgen2

  • 作成者: @jtschuster
  • 作成日時: 2026年06月16日 17:18:54(UTC)
  • マージ日時: 2026年07月03日 16:18:56(UTC)
  • ラベル: area-ReadyToRun

概要

このPRは、同期的なTask/ValueTask戻り値メソッドの「runtime async版」コンパイルをcrossgen2/ReadyToRunおよびNativeAOTシナリオに対応させるもの。新しいJIT/EEインターフェースメソッドgetAwaitReturnCallとCORINFO_ASYNC_VERSIONオプションを導入し、非非同期ILを再利用しながらawait/unwrapping呼び出しを合成することで、async版メソッドが元のILの動作と一致するシグネチャを持つようにします。

変更内容

  • JIT/EEインターフェース: getAwaitReturnCallメソッド追加、CORINFO_ASYNC_VERSIONオプションビット追加(corinfo.h、jiteeversionguid.h更新)
  • JITコンパイラ: async版認識、tail-await フラグ設定、戻り値のawait ラッピング機能をインポーターに追加(importer.cpp、compiler.h)
  • インタープリタ: async版戻り値ラッピングと関連するpeephole認識実装(interpreter/compiler.h、compiler.cpp)
  • ツールチェーン(R2R/NativeAOT):
    • CorInfoImpl.csでgetAwaitReturnCall実装とasync版コンパイル時のCORINFO_ASYNC_VERSION設定
    • AsyncMethodVariant.csで依存関係報告用ヘルパー追加
    • ReadyToRunCodegenCompilation.csでTransparentAwaitWithResult*オーバーロード用のトークンシード処理
  • テスト: R2RテストスイートのAsync devirt テストケース更新

パフォーマンスへの影響

影響なし

関連Issue

#128384(先行作業)

その他

  • 従来の非同期サンク生成パスは削除済み(戻り値削除サンク生成は継続)
  • CoreLibAsyncHelpers.TransparentAwaitWithResult*ヘルパーオーバーロードが新たに合成されるawait戻り呼び出しで使用される
  • PR作成者は現在CI検証を実施中

#129442 Add AsyncVariantLookup::ReturnDroppingThunk for parallel RDT lookup in FindOrCreateAssociatedMethodDesc

概要

ジェネリック仮想メソッドと共変戻り値型の組み合わせで、ReturnDroppingThunk (RDT) メソッドのルックアップ時にアサーションが発生する問題を修正しました。AsyncVariantLookup 列挙型に ReturnDroppingThunk 値を追加し、通常の非同期変種との区別を可能にすることで、FindOrCreateAssociatedMethodDesc での並列ルックアップを正式にサポートしました。

変更内容

  • method.hpp — AsyncVariantLookup 列挙型に ReturnDroppingThunk 値を追加。MethodDesc::GetAsyncVariantLookup() ヘルパーメソッドを追加してメソッドの非同期種別を返すように実装。MatchesAsyncVariantLookup() マッチング ロジックを改善。
  • instmethhash.h/instmethhash.cpp — InstMethodHashTable::FindMethodDesc のシグネチャを bool isAsyncVariant から AsyncVariantLookup に変更し、ハッシュテーブルの 3 種別キー(Ordinary/Async/ReturnDroppingThunk)の区別を正確化。
  • genmeth.cpp — 9 つのコールサイトで AsyncVariantLookup の値をプレーニング。RDT に対する 3 方向の分岐ロジックを実装。
  • method.cpp — GetAsyncVariantLookup() 実装。
  • methodtable.cpp — 呼び出しサイト 1 箇所を更新。
  • covariant-returns.cs — TestGenericVirtualMethod の ActiveIssue スキップアノテーションを削除し、テストを再有効化。

パフォーマンスへの影響

影響なし

関連Issue

#127197

その他

この変更はランタイムの内部実装(CoreCLR の VM レイヤー)の修正であり、公開APIには影響しません。共変戻り値型とジェネリック仮想メソッドを併用するコードが正常に動作するようになります。


#129325 More cleanups in rangecheck/assertionprop

  • 作成者: @EgorBo
  • 作成日時: 2026年06月12日 13:32:48(UTC)
  • マージ日時: 2026年07月03日 16:22:21(UTC)
  • ラベル: area-CodeGen-coreclr

概要

RyuJIT のレンジチェック処理を簡素化するクリーンアップPR。未使用の GTF_CHK_INDEX_INBND フラグと FEATURE_ENABLE_NO_RANGE_CHECKS 機能フラグを削除し、アサーション伝播での境界チェック除去ロジックを直接実装に置き換え、オペランドの副作用を正しく保持する改善を実施しました。

変更内容

  • FEATURE_ENABLE_NO_RANGE_CHECKS および DOTNET_JitNoRngChks 設定の削除(src/coreclr/inc/switches.h、src/coreclr/jit/jitconfigvalues.h)
  • GTF_CHK_INDEX_INBND フラグ定義の削除(src/coreclr/jit/gentree.h)
  • optRemoveStandaloneRangeCheck ラッパーメソッドと optAssertionProp_Comma の削除(src/coreclr/jit/optimizer.cpp、src/coreclr/jit/compiler.h)
  • assertionprop.cpp での冗長な GT_BOUNDS_CHECK 除去ロジックの簡素化。遅延削除(GT_COMMA経由)から直接置換に変更し、副作用を保持する仕様に統一

パフォーマンスへの影響

影響なし(コード生成の最終結果は変わらず、処理フローの簡素化による内部的な効率化のみ)

関連Issue

#129325

その他

正確性向上:以前の実装で潜在的に存在した、GT_COMMEノード経由での副作用抽出の問題を排除し、冗長な境界チェック削除時に副作用を常に確実に保持するように改善されました。これは JIT のコンパイラ最適化部(内部実装)への変更であり、公開APIへの影響なし。


#129281 Solve symlinks destination

概要

System.Formats.TarのTar抽出処理においてシンボリックリンク解決後の抽出先がディレクトリトラバーサル攻撃によって意図したディレクトリの外に出ないことを検証するセキュリティ強化です。シンボリックリンク対応の脱出チェック機能を追加し、チェーンされたシンボリックリンクを含む複数のトラバーサル攻撃シナリオに対するテストを追加しています。

変更内容

  • TarEntry.cs: シンボリックリンク認識した脱出検証ロジック(FilePathEscapesDirectory)を追加。抽出先パスおよびリンク先パスの検証時に、解決後の宛先がディレクトリ外に出ないことを確認。
  • TarFile.ExtractToDirectory.File.Tests.cs: シンボリックリンクを使用したディレクトリトラバーサル攻撃の検証テストを新規追加。チェーンされたシンボリックリンクなど複数のシナリオに対応。

パフォーマンスへの影響

抽出処理時に追加の脱出チェック処理が実行されるため、シンボリックリンク解決に伴う若干のオーバーヘッドが発生する可能性があります。ただし具体的なベンチマーク結果の記載はありません。

関連Issue

#129281

その他

本変更はSystem.Formats.Tar(公開API)のセキュリティ強化です。Tar展開時にシンボリックリンク経由のディレクトリトラバーサル攻撃を防止する目的の修正となります。


#127746 JIT: bail on flipping post-layout JTRUE when reversal needs new IR

  • 作成者: @Copilot
  • 作成日時: 2026年05月04日 12:52:34(UTC)
  • マージ日時: 2026年07月03日 10:18:17(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT の optOptimizePostLayout で JTRUE ノードの条件反転時に、LSRA が挿入した GT_COPY/GT_RELOAD の上に新しい IR ノードを作成してしまい、LIR に未挿入のノードが発生してクラッシュする問題を修正。新たに gtTryReverseCond() を導入し、インプレース反転が可能な場合のみ実行し、不可能な場合はブロック反転をスキップするようにしました。

変更内容

  • compiler.h — gtTryReverseCond(GenTree*) -> bool メソッドの宣言を追加
  • gentree.cpp — gtTryReverseCond() を実装。比較演算子、JCC/SETCC、JCMP/JTEST、整数定数をインプレースで反転。既存の gtReverseCond() を薄いラッパーに変更し、インプレース反転が不可能な場合のみ GT_EQ(tree, 0) フォールバックを追加
  • optimizer.cpp — optOptimizePostLayout で JTRUE オペランドから gtSkipReloadOrCopy() で GT_COPY/GT_RELOAD を除去してから gtTryReverseCond() を呼び出し。反転に失敗した場合(false 戻り値時)はブロック反転をスキップ

パフォーマンスへの影響

影響なし

関連Issue

#127746(Fuzzlyn による linux-arm32 での検出)

その他

  • 互換性 — 公開APIには影響せず、内部 JIT 実装の修正
  • 修正の背景 — checked builds での「found use of a node that is not in the LIR sequence」アサーション失敗を解決。LSRA 後処理時に LIR 構造を保つため、新規ノード生成ではなくインプレース反転可能な場合のみ実行する設計に変更

#100729 Add Decimal32, Decimal64, Decimal128

概要

IEEE 754-2019仕様に準拠したDecimal32、Decimal64、Decimal128の3つの10進浮動小数点型を.NETランタイムに追加します。これらは金融計算や科学計算など精度が重要なアプリケーション向けの新しい数値型です。

変更内容

  • 新規型定義: System.Numerics名前空間にDecimal32(32ビット)、Decimal64(64ビット)、Decimal128(128ビット)を追加
  • IEEE 754サポート: System/Number.DecimalIeee754.csを新規作成し、IEEE 754-2019準拠の10進浮動小数点数の処理ロジックを実装
  • パース・フォーマッティング機能: Number.Parsing.csとNumber.Formatting.csを拡張して、新しい型のパース機能とToString()のフォーマット処理を実装
  • 参照アセンブリ: System.Runtime.csに公開APIシグネチャを追加(計124行)
  • テスト: 各型に対する単体テスト(Decimal32Tests、Decimal64Tests、Decimal128Tests)を追加(各500行程度)
  • 国際化対応: リソース文字列を追加

パフォーマンスへの影響

影響なし

関連Issue

#81376

その他

互換性への注意点: 以下の点についてレビューでの指摘あり(実装済みか未確認)

  • Equals()とGetHashCode()のオーバーライドが参照アセンブリのシグネチャと一致していない可能性
  • IFormattableインターフェースの実装が必要な可能性(複合フォーマット使用時のサポートのため)
  • StructLayout属性が参照アセンブリで欠落している可能性

新しい公開API追加であり、既存の互換性には影響なし(非破壊的変更)。


目次