Pull Request on 2026年02月03日

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

注意点

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


目次

  1. #123947 SVE: Add float/double args for mask APIs
  2. #123945 Don't ping codegen team for codegen label
  3. #123940 Add GetTypeInfo() and TryGetTypeInfo() to JsonSerializerOptions
  4. #123934 Add an ASCII check for edge-case non-ASCII hosts that can't be Punycode encoded
  5. #123916 Convert add-new-jit-ee-api prompt file to skills format
  6. #123915 Update area-owners for libraries
  7. #123911 Fix off-by-one error in TypePreinit switch instruction handling
  8. #123910 FIx supressions that were missed/invalid after issues.targets migration
  9. #123906 Use SequenceEqual instead of SequenceCompareTo in SslStreamPal.SelectApplicationProtocol
  10. #123905 Stackalloc cert handles in SafeDeleteSslContext.SetCertificate on macOS
  11. #123904 Avoid array allocations in GetRequestCertificateAuthorities
  12. #123900 Use Contains in FileSystemName.MatchPattern
  13. #123887 Simplify CultureInfo.CreateSpecificCulture with IndexOf
  14. #123875 Fix certificate disposal in RemoteCertificateValidationCallback causing NRE on reuse
  15. #123856 Remove a few TP-heavy GlobalAP optimizations
  16. #123855 Fix SR.Format argument count mismatches in resource strings
  17. #123836 Avoid unnecessary array allocations in ZipArchive
  18. #123831 [NativeAOT] fix NAOT mappings (follow-up to https://github.com/dotnet/runtime/pull/123333)
  19. #123805 Fix DateOnly/TimeOnly TryParse to throw on invalid DateTimeStyles and format specifiers
  20. #123739 [RyuJIT Wasm] Add Object Writer Imports Section + Constant Exprs to Encode R2R Payload Placement
  21. #123711 Extend timeout for NativeAOT test configurations
  22. #123701 Remove unused fNullOk parameter from GetMethodDescForComInterfaceMethod
  23. #123695 Prep filter for NtQueryDirectoryFile
  24. #123627 Fix crossgen2 nobubble memory leak
  25. #123566 Document ILC generic analysis
  26. #123433 Place async resumption info in read-write section outside Windows for AOT
  27. #123183 Support devirtualizing non-shared GVMs in R2R
  28. #123044 [Wasm RyuJIT] Initial scaffolding for calls and helper calls
  29. #122501 [RISC-V] Fix 64-bit offset handling in emitLoadImmediate
  30. #120201 Fix invalid csharp_space_around_declaration_statements option value

#123947 SVE: Add float/double args for mask APIs

  • 作成者: @a74nh
  • 作成日時: 2026年02月03日 16:06:23(UTC)
  • マージ日時: 2026年02月03日 20:19:19(UTC)
  • ラベル: area-System.Runtime.Intrinsics community-contribution

概要

ARM64 SVE(Scalable Vector Extension)マスクAPI群に対してfloat/double型引数のサポートを追加するPull Requestです。これにより、整数型のみに限定されていたマスク関連のAPIを浮動小数点型にも拡張します。CreateWhile*()の変更は別途対応予定とのことです。

変更内容

  • Sve.cs / Sve.PlatformNotSupported.cs: float/double型パラメータを持つマスクAPI定義を132行追加
  • hwintrinsiclistarm64sve.h: SVE組み込み関数定義の更新(12行追加、10行削除)
  • JIT関連(gentree.cpp, lowerarmarch.cpp, fgdiagnostic.cpp): float/double型マスク操作の処理ロジックを追加
  • ref/System.Runtime.Intrinsics.cs: 22行の参照定義追加
  • Helpers.cs / SveTests.cs: テスト補助関数と新規テストケース(252行追加)

パフォーマンスへの影響

影響なし。本変更は浮動小数点型に対するマスクAPI呼び出し時のコード生成経路を追加するもので、既存のパフォーマンス特性には影響を与えません。

関連Issue

#108233(部分的に修正。CreateWhile*()関連の変更は別途対応予定)

その他

  • CreateWhile*()関連のAPI拡張は本PRの対象外として明示的に除外
  • ARM64 SVE対応プラットフォーム以外ではPlatformNotSupported.csが使用される設計
  • テスト拡張により、既存の整数型テストケースに加えてfloat/double型での動作検証が可能に

#123945 Don't ping codegen team for codegen label

  • 作成者: @EgorBo
  • 作成日時: 2026年02月03日 15:44:41(UTC)
  • マージ日時: 2026年02月03日 19:04:17(UTC)
  • ラベル: area-CodeGen-coreclr

概要

area-CodeGen-coreclr ラベルの自動割り当て機能を削除するための変更です。このラベルは dotnet/runtime で最も使用頻度の高いラベルであり、CodeGen チームへの自動通知が大量のメール混乱を引き起こしていたため、PR #122357 での変更を取り消します。チームは既存の方式で全ての関連 Issue を確認しているため、この自動割り当てが不要と判断されました。

変更内容

  • .github/policies/resourceManagement.yml: area-CodeGen-coreclr ラベルの自動割り当て設定を削除(+1/-1)

パフォーマンスへの影響

影響なし (GitHub ポリシー設定の変更のため、ランタイムパフォーマンスへの直接的な影響はありません)

関連Issue

PR #122357(本変更で取り消された内容の元の変更)

その他

  • この変更により、CodeGen チームのメール受信量が削減され、実際の重要な通知を見落とすリスクが軽減されます
  • area-CodeGen-coreclr は最も人気度の高いラベルであり、手動でのイシュー確認が効率的であると判断されています

#123940 Add GetTypeInfo() and TryGetTypeInfo() to JsonSerializerOptions

  • 作成者: @Copilot
  • 作成日時: 2026年02月03日 14:30:32(UTC)
  • マージ日時: 2026年02月03日 20:36:17(UTC)
  • ラベル: area-System.Text.Json

概要

JsonSerializerOptionsに汎用メソッドGetTypeInfo<T>()TryGetTypeInfo<T>()を追加しました。これにより、型情報取得時の明示的なキャストが不要になり、型安全性が向上します。

// Before
var info = (JsonTypeInfo<string>)options.GetTypeInfo(typeof(string));

// After
var info = options.GetTypeInfo<string>();

変更内容

  • JsonSerializerOptions.Caching.cs: 汎用GetTypeInfo<T>()TryGetTypeInfo<T>()メソッドを追加。非汎用メソッドに委譲する実装
  • System.Text.Json.cs (ref): パブリックAPI表面を更新
  • OptionsTests.cs: 可変/不変オプション、型解決、非汎用メソッドとの等価性をカバーする6つのテストを追加
  • JsonNode.cs、JsonValue.cs: 従来のキャストパターンから新しい汎用メソッドに置き換え
  • テストファイル5つ: キャストパターンの使用箇所を新メソッドに統一

パフォーマンスへの影響

影響なし。汎用メソッドは非汎用メソッドへの委譲であり、パフォーマンス上のオーバーヘッドはありません。

関連Issue

dotnet/runtime#118468

その他

API Reviewで承認された設計に基づく実装です。拡張メソッドではなくインスタンスメソッドとして実装されています。TryGetTypeInfo<T>()も同時に承認・実装されており、[NotNullWhen(true)]属性で戻り値の有効性を示しています。


#123934 Add an ASCII check for edge-case non-ASCII hosts that can't be Punycode encoded

  • 作成者: @MihaZupan
  • 作成日時: 2026年02月03日 07:19:36(UTC)
  • マージ日時: 2026年02月03日 17:44:46(UTC)
  • ラベル: area-System.Net.Http

概要

DNS制限を超過するホスト名(長いラベルを含む場合など)でPunycodeエンコーディングに失敗し、IdnHostが非ASCII値を返すエッジケースに対応しました。このケースでHTTP処理のデバッグアサーション失敗が発生していたため、ASCII検証ロジックを追加して堅牢性を向上させています。

変更内容

ファイル 変更内容
Strings.resx エラーメッセージリソース追加(3行)
HttpAuthority.cs ASCII検証ロジック追加、ホスト名バリデーション強化(+11行)
HttpConnection.cs 関連する検証ロジック更新(±1行)
SocketsHttpHandlerTest.cs エッジケーステスト追加(+10行)

パフォーマンスへの影響

影響なし。変更はバリデーションロジックの追加であり、パフォーマンスクリティカルなパスではありません。ホスト名のASCII検証は軽量な処理です。

関連Issue

#123934

その他

  • 互換性への影響: 不正なホスト名(非ASCII文字を含むが正しくPunycodeエンコードできないもの)に対する処理が厳格になります。
  • セキュリティ考慮: DNS仕様の制限に準拠しない異常なホスト名を適切に処理することで、予期しない動作を防止します。
  • デバッグアサート解決: 開発環境でのアサーション失敗が解消され、本番環境での予測不可能な動作が防止されます。

#123916 Convert add-new-jit-ee-api prompt file to skills format

  • 作成者: @Copilot
  • 作成日時: 2026年02月02日 22:45:11(UTC)
  • マージ日時: 2026年02月03日 15:36:33(UTC)
  • ラベル: 指定なし

概要

Copilotが使用するプロンプトファイルを、オープンスタンダードの Agent Skills 形式に移行しました。VS Code 専用のプロンプトファイル (.github/prompts/add-new-jit-ee-api.prompt.md) を、Copilot Coding Agent や GitHub Copilot CLI でも利用可能な Skills 形式 (.github/skills/add-new-jit-ee-api/SKILL.md) に変換しています。コンテンツは保持され、フロントマターのみ形式を適応させています。

変更内容

  • 作成: .github/skills/add-new-jit-ee-api/SKILL.md (新しい Skills 形式)
  • 削除: .github/prompts/add-new-jit-ee-api.prompt.md (旧プロンプトファイル形式)
  • 修正: add-new-jit-ee-api チェックリストの重複ファイルエントリを修正

形式の変更例:

# 変更前(プロンプトファイル形式)
---
agent: 'agent'
tools: ['web/fetch', 'search/codebase', ...]
description: 'Description'
---

# 変更後(Skills 形式)
---
name: skill-name
description: Description
---

パフォーマンスへの影響

影響なし(ドキュメント・設定ファイルの形式移行のため、ランタイムパフォーマンスへの影響はありません)

関連Issue

なし

その他

  • この変更はビルドやランタイムには影響しません。開発ツール(Copilot Coding Agent)の設定管理に関する改善です。
  • Agent Skills は GitHub が推奨するオープンスタンダード形式であり、VS Code、GitHub Copilot CLI、Copilot Coding Agent など複数のツール間での互換性が向上します。

#123915 Update area-owners for libraries

  • 作成者: @jeffhandley
  • 作成日時: 2026年02月02日 21:47:17(UTC)
  • マージ日時: 2026年02月03日 21:34:42(UTC)
  • ラベル: documentation area-Meta

概要

dotnet/runtime リポジトリのエリアオーナーシップ割り当てを更新するPRです。Extensions関連のエリア(Caching、Configuration、DependencyInjection、FileSystemなど)の所有者を @jeffhandley から @karelz に変更し、System.Reflection関連のエリア(Reflection、Reflection.Emit、Reflection.Metadataなど)を @agocke に、System.Diagnostics.Process を @SamMonoRT に割り当て直しています。

変更内容

変更ファイル:

  • docs/area-owners.md (+12/-12)

主な変更:

  • Extensions関連エリア(Caching、Configuration、DependencyInjection、FileSystem、Hosting、Logging、Options、Primitives)の所有者を @jeffhandley から @karelz に変更し、複数の追加コンサルタントを追加
  • System.Reflection関連エリア(Reflection、Reflection.Emit、Reflection.Metadata)の所有者を @jeffhandley から @agocke に変更し、@ericstj をコンサルタントとして追加
  • System.Diagnostics.Process エリアの所有者を @jeffhandley から @SamMonoRT に変更

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは組織的なメンテナンス変更であり、ドキュメンテーションの更新のみです。実装コードへの変更はありません。


#123911 Fix off-by-one error in TypePreinit switch instruction handling

  • 作成者: @sbomer
  • 作成日時: 2026年02月02日 19:42:12(UTC)
  • マージ日時: 2026年02月03日 20:35:39(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

TypePreinitのswitch IL命令ハンドラーにおけるオフバイワンエラーを修正します。ECMA-335仕様に従い、switch値がケース数以上の場合(value >= count)に次の命令にフォールスルーする必要がありますが、修正前はvalue > countのみをチェックしていました。値がケース数と正確に一致する場合、存在しないジャンプテーブルエントリーを読み込もうとしてILリーダーのオフセットが破損し、NativeAOT コンパイル中にIndexOutOfRangeExceptionが発生していました。

変更内容

  • src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/TypePreinit.cs: switch命令ハンドラーの条件をtarget > countからtarget >= countに修正
  • src/tests/nativeaot/SmokeTests/Preinitialization/Preinitialization.cs: 境界条件(value == case count)のテストケースを追加

パフォーマンスへの影響

影響なし。比較演算子の変更のみで、パフォーマンスクリティカルなパスへの影響はありません。

関連Issue

#123833

その他

  • ECMA-335仕様への準拠性を確保する重要な修正です
  • NativeAOT コンパイラの堅牢性向上につながります
  • 境界値テストが追加されており、同様の問題の再発防止が期待できます

#123910 FIx supressions that were missed/invalid after issues.targets migration

  • 作成者: @jkoritzinsky
  • 作成日時: 2026年02月02日 19:41:40(UTC)
  • マージ日時: 2026年02月03日 22:54:14(UTC)
  • ラベル: area-Infrastructure

概要

issues.targets移行後に無効または見落とされたサプレッション設定を修正するPull Requestです。テストプロジェクトのビルド設定と複数のILテストファイルのサプレッション属性が更新されており、テストの正確な実行と警告管理の一貫性が改善されます。

変更内容

  • finalizertest.csproj: GCテストプロジェクトにサプレッション設定を追加(+3行)
  • ExplicitTailCallNoSUO.il: Tailcall関連テストのサプレッション属性を修正(1行変更)
  • hijacking.il: Methodicalテストのサプレッション属性を修正(1行変更)
  • DevDiv_902271.il: JitBlueリグレッションテストのサプレッション属性を修正(1行変更)
  • TailcallVerifyWithPrefix.il: Tailcallテストのサプレッション属性を修正(1行変更)

パフォーマンスへの影響

影響なし。本変更はテストビルド設定とメタデータの修正であり、ランタイムパフォーマンスには直接的な影響はありません。

関連Issue

  • #123866
  • #123867

その他

このPull Requestはissues.targets移行後の属性管理を改善するメンテナンス作業です。複数のILファイルでのサプレッション属性修正を一括で対応しており、テストビルドパイプラインの健全性確保が目的と考えられます。


#123906 Use SequenceEqual instead of SequenceCompareTo in SslStreamPal.SelectApplicationProtocol

  • 作成者: @stephentoub
  • 作成日時: 2026年02月02日 18:27:31(UTC)
  • マージ日時: 2026年02月03日 02:31:34(UTC)
  • ラベル: area-System.Net.Security

概要

SSL/TLS ALPN(Application-Layer Protocol Negotiation)プロトコル選択処理において、バイトシーケンス比較の実装をより適切で読みやすいパターンに改善しました。SequenceCompareTo<byte>(...) == 0 の比較パターンを SequenceEqual(...) メソッドに置き換えることで、コード意図の明確化とイディオマティックな実装を実現しています。

// 変更前
if (supportedProtocols[i].SequenceCompareTo(protocol) == 0)

// 変更後
if (supportedProtocols[i].SequenceEqual(protocol))

変更内容

  • ファイル: src/libraries/System.Net.Security/src/System/Net/Security/SslStreamPal.OSX.cs
  • 変更内容: SelectApplicationProtocol メソッド内のバイトシーケンス比較処理を SequenceCompareTo から SequenceEqual へ置換(1行変更)

パフォーマンスへの影響

改善の可能性あり。SequenceEqual は等値判定専用に最適化されているため、SequenceCompareTo よりも早期に比較を終了できる可能性があります。特にシーケンスが異なる場合、不要な比較を避けられる効率性の向上が期待できます。

関連Issue

なし

その他

  • macOS(OSX)プラットフォーム固有の実装変更
  • API互換性への影響なし(内部実装の改善)
  • コード可読性とメンテナンス性の向上が主目的

#123905 Stackalloc cert handles in SafeDeleteSslContext.SetCertificate on macOS

  • 作成者: @stephentoub
  • 作成日時: 2026年02月02日 18:27:22(UTC)
  • マージ日時: 2026年02月03日 02:31:18(UTC)
  • ラベル: area-System.Net.Security

概要

macOS の TLS 証明書チェーン設定時のメモリ割り当てを最適化するPRです。SafeDeleteSslContext.SetCertificate において、証明書ハンドルリスト構築時のヒープ割り当てを回避するため、stackalloc/ヒープフォールバック戦略を導入します。

変更内容

  • Interop.Ssl.cs: API定義の最適化(3行追加・3行削除)
  • SafeDeleteSslContext.cs: 証明書ハンドルバッファに stackalloc/ヒープフォールバック機構を実装(6行追加・1行削除)
    • スタック割り当て使用時のしきい値定数を追加

パフォーマンスへの影響

改善点

  • 証明書チェーン数が少ない場合(しきい値以下)、スタック上にバッファを確保することで、ヒープ割り当てのオーバーヘッドを削減
  • メモリ割り当て/解放処理が減少し、GC圧力が軽減される

実装パターン

// stackalloc/ヒープフォールバック戦略の一般的な実装
const int ThresholdSize = 16; // 例
Span<byte> buffer = bufferSize <= ThresholdSize 
    ? stackalloc byte[ThresholdSize]
    : new byte[bufferSize];

関連Issue

#123905

その他

  • レビュワーが bartonjs と copilot-pull-request-reviewer[bot] であり、セキュリティ関連(TLS/cryptography)の変更として十分な検証がされていると考えられます
  • macOS 特有の最適化であり、他プラットフォームへの影響はありません

#123904 Avoid array allocations in GetRequestCertificateAuthorities

  • 作成者: @stephentoub
  • 作成日時: 2026年02月02日 18:25:23(UTC)
  • マージ日時: 2026年02月03日 02:30:42(UTC)
  • ラベル: area-System.Net.Security

概要

GetRequestCertificateAuthoritiesメソッドのパフォーマンスを最適化し、Windows/macOSプラットフォーム上で証明書認証局の識別名処理時における不要な配列割り当てを削減しました。ReadOnlySpan<byte>を直接使用することで、メモリ割り当てのオーバーヘッドを排除しています。

変更内容

ファイル 変更内容
CertificateValidationPal.Windows.cs ToArray()からReadOnlySpan<byte>の直接使用に変更し、配列割り当てを回避
CertificateValidationPal.OSX.cs CFGetData()CFDataDangerousGetSpan()に置き換え、手動参照カウント管理を実装して配列割り当てを回避

パフォーマンスへの影響

改善点:

  • GetRequestCertificateAuthorities呼び出しごとに不要な配列割り当てを削減
  • GCヒープへの圧力を軽減し、ガベージコレクション頻度の低下を期待
  • macOSではCFDataのスタックベースアクセスにより、メモリコピーを回避

スループットと遅延特性の向上が見込まれますが、具体的なベンチマーク数値は公開情報に含まれていません。

関連Issue

なし

その他

  • macOS実装ではCFDataDangerousGetSpan()を使用しており、参照カウントの正確性が重要です。このメソッドは危険性を名称に示しているため、実装の確認が必要です
  • 破壊的変更はなく、既存APIの内部実装最適化のみです
  • TLS/SSL証明書検証パスは頻繁に呼び出される経路であるため、このような細粒度の最適化は有用です

#123900 Use Contains in FileSystemName.MatchPattern

  • 作成者: @stephentoub
  • 作成日時: 2026年02月02日 17:45:07(UTC)
  • マージ日時: 2026年02月03日 02:32:04(UTC)
  • ラベル: area-System.IO

概要

FileSystemName.MatchPatternメソッドにおいて、DOS_STAR ワイルドカード処理中のピリオド検出ロジックを手動ループから組み込みのContainsメソッドに置き換えました。コード可読性と保守性の向上を実現しています。

// 変更前: 手動ループ
for (int i = 0; i < length; i++)
{
    if (span[i] == '.') { /* ... */ }
}

// 変更後: Contains を使用
if (span.Contains('.')) { /* ... */ }

変更内容

  • ファイル: src/libraries/System.Private.CoreLib/src/System/IO/Enumeration/FileSystemName.cs
  • 変更量: +5行/-12行(差分:-7行)
  • 主な変更: DOS_STAR ワイルドカード処理でのピリオド検出時に、ReadOnlySpan<char>.Contains('.')を使用して手動ループを置き換え

パフォーマンスへの影響

改善の可能性あり。ReadOnlySpan<char>.Containsは最適化されたネイティブ実装であり、手動ループより高速に実行される可能性があります。ただし具体的なベンチマーク数値は提供されていません。

関連Issue

なし

その他

  • コード量削減(-7行)により保守性が向上
  • ReadOnlySpan<char>の組み込みメソッド活用による標準化
  • FileSystemNameはI/O列挙処理の基本コンポーネントのため、パフォーマンス改善は広く影響する可能性あり

#123887 Simplify CultureInfo.CreateSpecificCulture with IndexOf

  • 作成者: @stephentoub
  • 作成日時: 2026年02月02日 15:02:54(UTC)
  • マージ日時: 2026年02月03日 02:31:56(UTC)
  • ラベル: area-System.Globalization

概要

CultureInfo.CreateSpecificCultureメソッドの実装を簡潔化しました。IndexOfを活用した文字列処理により、コードの可読性と保守性を向上させています。

変更内容

  • ファイル: src/libraries/System.Private.CoreLib/src/System/Globalization/CultureInfo.cs
    • 行数: +11/-16(ネット削減:5行)
    • CreateSpecificCultureメソッドの内部実装をリファクタリング
    • 文字列検索ロジックをIndexOfメソッドを用いて簡潔化

パフォーマンスへの影響

影響なし

既存ロジックの実装パターンを変更するのみで、アルゴリズムの本質的な計算量は同等と考えられます。

関連Issue

#123887

その他

  • レビュアーが複数名(MihaZupan、tarekgh、vcsjones など)により詳細に検討されています
  • グローバリゼーション関連の標準ライブラリの改善であり、互換性への影響は最小限と推定されます
  • コード削減(5行)によるメンテナンス性の向上が期待できます

#123875 Fix certificate disposal in RemoteCertificateValidationCallback causing NRE on reuse

  • 作成者: @Copilot
  • 作成日時: 2026年02月02日 08:36:33(UTC)
  • マージ日時: 2026年02月03日 14:19:23(UTC)
  • ラベル: area-System.Net.Security

概要

RemoteCertificateValidationCallbackで追加された証明書がSslStreamにより不正に破棄されることで発生するNREバグを修正。ユーザーがX509Chain.ChainPolicy.ExtraStoreに追加した共有証明書が複数のハンドシェイク間で再利用される際、ExtraStoreの破棄ロジックを改善して証明書の所有権を正しく判断するようにしました。

// 修正前:コールバック経由で追加された証明書も常に破棄される
chain.ChainPolicy.ExtraStore.Add(sharedCert);
chain.Reset();
chain.Build(cert); // 次の呼び出しで NRE 発生

// 修正後:RemoteCertificateValidationCallback が存在しない場合のみ破棄

変更内容

ファイル 変更内容
SslStream.Protocol.cs VerifyRemoteCertificateメソッドの証明書クリーンアップロジック(1167-1171行目)を修正。RemoteCertificateValidationCallbackが設定されている場合、ExtraStoreChainElementsの証明書破棄をスキップ
CertificateValidationClientServer.cs 回帰テストを追加。複数ハンドシェイク間でExtraStoreに追加された共有証明書の再利用シナリオを検証

パフォーマンスへの影響

リソース管理の改善

  • 修正前:不正な証明書破棄により、ユーザー所有の証明書がメモリからアンロードされてX509Certificate.Palがnullになる
  • 修正後:証明書の所有権を正しく区別することでリソースリークを防止
  • パフォーマンス数値への直接的な影響なし。769個のSslStreamテストが合格

関連Issue

#123058 - X509Chain.Build fails with NRE when ExtraStore certificates are reused within SslStream RemoteCertificateValidationCallback

その他

  • 破壊的変更:なし。内部実装の修正で、公開APIの変更はなし
  • 互換性:.NET 10以降で導入されたバグの修正であり、既存の動作を改善
  • セキュリティ:CodeQL security checkで問題なし
  • テスト結果:769個のSslStreamテストが合格し、回帰リスクなし

#123856 Remove a few TP-heavy GlobalAP optimizations

  • 作成者: @EgorBo
  • 作成日時: 2026年02月01日 13:34:22(UTC)
  • マージ日時: 2026年02月03日 16:27:11(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT コンパイラのグローバル最適化パス(GlobalAP)から、低効率な複数の最適化ロジックを削除しました。optAssertionVnInvolvesNanoptImpliedByConstAssertionoptImpliedByTypeOfAssertions、およびVnAssertionMappingを廃止することで、最大-0.4%のタイム・フェーズ(TP)改善を実現しながら、削除されたコードを他の有価値な最適化(例:アサーション有効化)に充てることができます。

変更内容

  • src/coreclr/jit/assertionprop.cpp (-283行): 以下の最適化ロジックを削除
    • optAssertionVnInvolvesNan: NaN値の定数アサーションはそもそも生成されないため不要(代わりにアサーション作成時にNaN チェックを追加)
    • optImpliedByConstAssertion: "X == 42"から"X != 100"などの暗黙的アサーションを推測する TP 負荷の高い最適化(現在の明示的アサーションで十分)
    • optImpliedByTypeOfAssertions: 影響なし(差分なし)
  • src/coreclr/jit/compiler.h (-13行): 対応するヘッダー定義の削除
  • src/coreclr/jit/rangecheck.cpp (-4行): 関連ロジックの整理

パフォーマンスへの影響

  • JIT コンパイル時間: -0.4% の TP 改善
  • コードサイズ: benchmarks.runで+35バイト、全体で約+2000バイトの若干の増加(主にテストコレクション由来)
  • 今後の効果: 削減されたTPバジェット(最大-600KB差分)を、より有価値なアサーション機能の有効化に転用可能

関連Issue

なし

その他

削除されたコードの一部(特にVN ベースのアサーションマッピング)は将来的に再実装が検討されています。VNに対するアサーション存在確認の早期終了機能は、他の場所からも利用できるようにより効率的に設計し直す予定とのことです。


#123855 Fix SR.Format argument count mismatches in resource strings

  • 作成者: @Copilot
  • 作成日時: 2026年02月01日 12:55:52(UTC)
  • マージ日時: 2026年02月03日 15:26:45(UTC)
  • ラベル: 指定なし

概要

このPRは、.NETランタイム全体でSR.Formatの引数カウントと対応するリソース文字列のプレースホルダー数の不一致を修正しています。エラーメッセージやリソース文字列の引数ミスマッチを一括で修正し、コード品質を向上させました。

変更内容

リソース文字列の修正

  • Microsoft.Extensions.DependencyInjection: KeyedServiceAnyKeyUsedToResolveService{0}{1}プレースホルダーを追加
  • System.Console: ArgumentOutOfRange_ConsoleWindowSize_Size に最大値のプレースホルダーを追加
  • System.Data.Common/OleDb: 複数のリソース文字列のプレースホルダー数を修正
  • System.Private.Xml: プレースホルダーのインデックス修正({0}, {3}など)
  • 新規追加: System.Private.TypeLoader/Reflection.ExecutionArgument_AddingDuplicateWithKeyリソースを追加

コード側の修正

  • 冗長なSR.Format呼び出しの削除: Arg_RegKeyNotFound(RegistrySecurity.cs)、net_quic_timeout_use_gt_zero(ThrowHelper.cs)など計9箇所
  • 例外処理の改善: CentralDirectoryInvalid で内部例外パターンに変更
  • 標準パターンへの置き換え: CspParameter_invalidArgumentNullException.ThrowIfNullに統一

未使用リソースの削除

  • Serialization_InvalidTypeName(System.Resources.Extensions)
  • CspParameter_invalid(System.Security.Cryptography)

パフォーマンスへの影響

影響なし。このPRはリソース文字列と引数の一貫性確保が主目的で、パフォーマンス特性に変化はありません。

関連Issue

なし

その他

互換性への注意: 破壊的変更はありません。修正対象は内部リソース文字列であり、公開APIには影響しません。修正前に全コールサイトを検証済みです。3つのリソース文字列(ConvertToExceptionXmlGetSchemaMethodReturnTypeCannotLoadMemberType)は呼び出しサイトで引数カウントが異なるため修正対象外となっています。


#123836 Avoid unnecessary array allocations in ZipArchive

  • 作成者: @stephentoub
  • 作成日時: 2026年01月31日 13:04:01(UTC)
  • マージ日時: 2026年02月03日 13:04:37(UTC)
  • ラベル: area-System.IO.Compression

概要

System.IO.CompressionZipArchive処理における不要な配列割り当てを排除し、ArrayPool<byte>からのバッファ再利用とSpan操作の簡素化を実施。Zipセントラルディレクトリの読み取り時に池化されたバッファを使用し、手動ループをSpan.Fill/Span.Clearに置き換えることで、GC圧力を軽減します。

変更内容

  • ZipArchive.cs: セントラルディレクトリ読み取りバッファを新規割り当てからArrayPool<byte>へ変更(同期処理)
  • ZipArchive.Async.cs: 非同期セントラルディレクトリ解析で、範囲演算子による配列割り当てを排除し、池化バッファ上のReadOnlyMemory<byte>スライスを使用
  • ZipBlocks.Async.cs: ZipCentralDirectoryFileHeader.TryReadBlockAsyncで動的ヘッダデータを新しい配列ではなく、池化されたMemory<byte>に整理
  • InflaterManaged.cs: 小規模な書き込みループをSpan.Fill/Span.Clearに置き換え(コード簡素化)

パフォーマンスへの影響

改善点:

  • ArrayPool<byte>の再利用によりGC圧力を軽減。特にZipファイル処理が頻繁な場合、ヒープ割り当て数が削減されます
  • 範囲演算子(array[x..y])による中間配列生成を排除
  • Span操作はforループより最適化されやすく、実行速度向上が期待できます

測定値: 具体的なベンチマーク結果は記載されていませんが、相応のメモリ割り当て削減が期待できます。

関連Issue

なし

その他

  • API変更なし(内部実装の最適化のみ)
  • 破壊的変更なし
  • 同期・非同期の両コードパスをカバー

#123831 [NativeAOT] fix NAOT mappings (follow-up to https://github.com/dotnet/runtime/pull/123333)

  • 作成者: @rcj1
  • 作成日時: 2026年01月31日 02:26:42(UTC)
  • マージ日時: 2026年02月03日 15:11:23(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT(Native Ahead-of-Time)のIL(Intermediate Language)オフセットからネイティブコードの行番号へのマッピング処理における2つのバグを修正しました。前回のPR #123333で発生した問題を解決し、IL オフセットがシーケンスポイントの最高値を超えるケースや、中間値のケースで適切にドキュメント情報を保持し、ネイティブ←→行番号マッピングを生成できるようにしました。

変更内容

  • StackTraceLineNumbersNode.cs:不要な条件分岐を削除(-6行)
  • MethodCodeNode.cs:IL オフセット判定ロジックを修正。最高シーケンスポイントを超える場合の処理と中間値の行番号更新ロジックを追加(+18/-22)
  • CorInfoImpl.RyuJit.cs:関連する初期化処理を追加(+3)

パフォーマンスへの影響

直接的なパフォーマンス変化は想定されませんが、スタックトレースの行番号マッピング生成処理が完全性を失わずに実行される改善により、デバッグ情報の精度が向上します。

関連Issue

  • フォローアップ対象:#123333
  • テスト元:#122722

その他

この修正は NativeAOT コンパイラのデバッグ情報生成に関わる内部実装の改善です。スタックトレース出力時の行番号情報の正確性が向上するため、デバッグやエラーログの可視性が改善されます。


#123805 Fix DateOnly/TimeOnly TryParse to throw on invalid DateTimeStyles and format specifiers

  • 作成者: @Copilot
  • 作成日時: 2026年01月30日 18:21:40(UTC)
  • マージ日時: 2026年02月03日 00:02:30(UTC)
  • ラベル: breaking-change area-System.DateTime

概要

DateOnly.TryParse/TryParseExactTimeOnly.TryParse/TryParseExact メソッドが無効な DateTimeStyles パラメータに対して false を返す代わりに ArgumentException をスローするよう修正しました。これにより、DateTimeDateTimeOffset などの他の .NET API との一貫性が確保されます。

// 修正前:false を返す
DateOnly.TryParseExact("2064-07-01", "yyyy-MM-dd", null, DateTimeStyles.AssumeUniversal, out var result);

// 修正後:ArgumentException をスロー
DateOnly.TryParseExact("2064-07-01", "yyyy-MM-dd", null, DateTimeStyles.AssumeUniversal, out var result);
// → ParamName = "style" の ArgumentException

変更内容

  • DateOnly.cs: TryParse と全 TryParseExact オーバーロードで無効な DateTimeStyles に対する例外スロー処理を追加。TryParseExactInternal メソッドで不正なフォーマット指定子(配列内の null/空文字列)を検出して FormatException をスロー
  • TimeOnly.cs: DateOnly と同様に全メソッドで例外スロー処理を追加
  • DateOnlyTests.cs: 既存テストを例外期待に更新。無効な style やフォーマット指定子に関する包括的なテストケースを追加(60行追加)
  • TimeOnlyTests.cs: DateOnly と同様にテスト更新(56行追加)

パフォーマンスへの影響

影響なし。引数検証はパブリックメソッドで事前に実施されるため、無効な引数による不要な処理が削減され、パフォーマンスは同等またはわずかに向上します。

関連Issue

  • Issue #111969(DateOnly TryParseExact が基本的な ISO-8601 入力の解析に失敗)
  • Issue #123802

その他

破壊的変更: このPRは破壊的変更です。以前 false を返していた無効な引数の組み合わせが例外をスロー するようになります。ただし、影響範囲は成功することのない不正な引数組み合わせに限定されるため、実務上の影響は最小限と考えられます。全 69,639 テストが合格しています。


#123739 [RyuJIT Wasm] Add Object Writer Imports Section + Constant Exprs to Encode R2R Payload Placement

  • 作成者: @adamperlin
  • 作成日時: 2026年01月28日 23:52:53(UTC)
  • マージ日時: 2026年02月03日 22:54:41(UTC)
  • ラベル: arch-wasm area-crossgen2-coreclr

概要

このPRは、WebAssembly(Wasm)のオブジェクトライターにインポートセクションの生成機能を追加します。ランタイムから提供されるenv.memory__stack_pointer__r2r_startをインポートし、定数式拡張を使用してR2Rペイロード配置のアドレス計算を行います。モジュールメモリのエクスポート削除により、ランタイムとのメモリ共有に対応します。

変更内容

  • WasmNative.cs: インポートセクション定義と定数式処理の実装(+104行)
  • WasmInstructions.cs: Wasm命令セット拡張、定数式命令の追加(+174行)
  • WasmObjectWriter.cs: インポートセクション生成ロジック、メモリエクスポート削除(+91/-22行)
  • SectionWriter.cs: セクション書き込み機能の拡張(+6行)
  • ILCompiler.ReadyToRun.csproj: プロジェクト設定の更新(+1行)

パフォーマンスへの影響

記載なし。ただし、以下の構造的な改善が期待されます:

  • ランタイムとのメモリ共有により、メモリコピーオーバーヘッドを削減
  • 定数式による静的なアドレス計算により、実行時の計算コストを排除

関連Issue

なし

その他

  • 互換性への影響: モジュールメモリエクスポート削除により、ランタイムの対応が必須
  • Wasm定数式拡張: インポート値(グローバル)を使用したアドレス計算に対応
  • R2Rペイロード配置: __r2r_start + オフセット形式で複数データセグメントを配置

#123711 Extend timeout for NativeAOT test configurations

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年01月28日 10:51:46(UTC)
  • マージ日時: 2026年02月03日 10:07:11(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT(Native Ahead-of-Time)テスト設定のタイムアウト値を240分から300分に拡張します。最近これらのテスト構成で断続的にタイムアウトが発生しているため、テスト完了に必要なバッファを増やします。

変更内容

ファイル 変更内容
eng/pipelines/coreclr/runtime-nativeaot-outerloop.yml NativeAOT_Checked_Libs_SizeOptとNativeAOT_Checked_Libs_SpeedOptのタイムアウト設定を240分から300分に変更(+2/-2行)

パフォーマンスへの影響

影響なし

  • 本変更はテスト実行時間そのものを短縮するものではなく、CI/CDパイプラインのタイムアウト閾値を調整するものです
  • ビルド・テスト実行の実際の所要時間に変化はありません
  • 懸念点:タイムアウト値の拡張により、実際のパフォーマンス低化を検出するまでに時間がかかる可能性があります

関連Issue

なし

その他

  • NativeAOT(Native Ahead-of-Time)コンパイラ関連の最適化テスト(SizeOpt/SpeedOpt)のみが対象です
  • テスト実行の複雑さまたは環境の問題によりタイムアウトが頻発しているものと考えられます
  • @dotnet/ilc-contrib チームへの通知が含まれています

#123701 Remove unused fNullOk parameter from GetMethodDescForComInterfaceMethod

  • 作成者: @Copilot
  • 作成日時: 2026年01月28日 05:28:43(UTC)
  • マージ日時: 2026年02月03日 19:40:26(UTC)
  • ラベル: area-Interop-coreclr

概要

COM相互運用機能におけるMethodTable::GetMethodDescForComInterfaceMethodメソッドの未使用パラメータfNullOkを削除しました。このパラメータは常にfalseで渡されており、関数が実際にNULLを返すことはないため、死んだコードを削除し、コード品質を向上させています。

変更内容

  • src/coreclr/vm/methodtable.h: 関数シグネチャからbool fNullOkパラメータを削除
  • src/coreclr/vm/methodtable.cpp:
    • 関数定義と呼び出し元からパラメータを削除
    • POSTCONDITIONのNULL_OKフラグを削除し、非NULLの戻り値を強制
    • 到達不可能なNULL戻り値パスを_ASSERTE()で置き換え

変更前後の比較:

// Before
MethodDesc *GetMethodDescForComInterfaceMethod(MethodDesc *pItfMD, bool fNullOk)
{
    // ...可能性のあるNULL返却
}

// After
MethodDesc *GetMethodDescForComInterfaceMethod(MethodDesc *pItfMD)
{
    // ...常に有効なMethodDescを返却
    _ASSERTE(FindDynamicallyAddedInterface(pItfMT));
    RETURN(pItfMD);
}

パフォーマンスへの影響

影響なし。この変更は死んだコードの除去により、わずかなバイナリサイズ削減が期待されますが、ランタイムパフォーマンスへの直接的な影響はありません。

関連Issue

なし

その他

  • COM interop機能内の内部実装の最適化
  • 関数の契約(contract)を明確化し、呼び出し元で常に有効なMethodDescが返されることを保証
  • コード保守性の向上

#123695 Prep filter for NtQueryDirectoryFile

  • 作成者: @JeremyKuhne
  • 作成日時: 2026年01月28日 00:27:19(UTC)
  • マージ日時: 2026年02月03日 00:00:01(UTC)
  • ラベル: area-System.IO

概要

NtQueryDirectoryFileでフィルタリング機能を実装するための準備作業です。適切にエスケープされたフィルタであれば使用できるようにしており、...などの特殊ディレクトリのみブロックされます。Windows ファイルシステム列挙の効率化と柔軟性向上が目的です。

変更内容

  • Interop.NtStatus.cs: NtStatus の新しいステータスコード定義を追加
  • FileSystemEnumerableFactory.cs: フィルタリング関連のロジックを簡潔化(-6行)
  • FileSystemEnumerator.Windows.cs: NtQueryDirectoryFile のフィルタ処理を実装(+8行の純増加)、フィルタの検証とエスケープ処理を強化
  • FileSystemName.cs: フィルタ検証・エスケープ用の新規ユーティリティ実装(+30行)
  • SpecialDirectoryTests.cs: 特殊ディレクトリ(...)のテストケース追加(+47行)

パフォーマンスへの影響

NtQueryDirectoryFileでサーバーサイドフィルタリングを活用することで、クライアント側でのメモリ使用量削減と処理速度向上が期待されます。フィルタが正しくエスケープされていれば、不要なエントリの転送を削減できます。

関連Issue

なし

その他

  • 特殊ディレクトリ(...)の処理は引き続き明示的にブロック
  • フィルタのエスケープ処理が重要であり、不正なフィルタパターンはサーバーに到達しないよう事前チェック
  • 複数のレビュワーによる検討が行われており、特に stephentoub による指摘が複数含まれています

#123627 Fix crossgen2 nobubble memory leak

  • 作成者: @t-mustafin
  • 作成日時: 2026年01月26日 15:49:05(UTC)
  • マージ日時: 2026年02月03日 19:41:54(UTC)
  • ラベル: area-crossgen2-coreclr community-contribution

概要

Crossgen2の--out-near-input--single-file-compilationオプション(inputbubbleなし)使用時のメモリリークを修正。armelアーキテクチャでのピークRSS消費量が825MBから312MBに削減されました。

変更内容

  • ManifestMetadataTableNode.cs: メタデータテーブルノード内でのメモリ管理を改善(+6行/-1行)
  • ReadyToRunCodegenCompilation.cs: ReadyToRunコード生成コンパイル時のメモリ解放処理を追加(+5行/-1行)

パフォーマンスへの影響

改善点: ピークメモリ使用量で大幅な削減を確認

  • armelでの計測:825MB → 312MB(約62%削減)
  • 該当するメモリリークの解放により、大規模なアセンブリコンパイル時のメモリ使用量が顕著に改善

関連Issue

#123627

その他

  • Crossgen2のAOT(Ahead-Of-Time)コンパイラにおけるメモリ管理の改善
  • inputbubbleオプションなしで--out-near-input--single-file-compilationを組み合わせた特定の構成でのみ問題が発生していた点が修正対象

#123566 Document ILC generic analysis

  • 作成者: @sbomer
  • 作成日時: 2026年01月23日 22:42:10(UTC)
  • マージ日時: 2026年02月03日 18:10:46(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

ILC(Intermediate Language Compiler)のジェネリック解析処理に関するドキュメントを追加するPRです。ILC開発の学習に役立つよう、ジェネリック型の解析メカニズムについての知見をまとめています。

変更内容

  • ilc-architecture.md: ILCのジェネリック解析に関する説明文書を新規追加(+54行)
    • ジェネリック型解析プロセスの詳細なドキュメンテーション
    • 今後のILC開発者向けの学習資料として機能

パフォーマンスへの影響

影響なし(ドキュメント追加のため)

関連Issue

関連PR: #122012

その他

  • 本ドキュメントはMichalStrehovsky氏の協力を得て作成されたもので、ILC内部の実装理解に貢献することを目的としています
  • ドキュメント内容が確認されるまで複数回のレビューが実施されています

#123433 Place async resumption info in read-write section outside Windows for AOT

  • 作成者: @jakobbotsch
  • 作成日時: 2026年01月21日 14:05:29(UTC)
  • マージ日時: 2026年02月03日 12:05:44(UTC)
  • ラベル: area-CodeGen-coreclr

概要

ELF/MachO形式では読み取り専用セクション(.rodata)から.textセクションへのリロケーションがサポートされていません。このPRは、async resumption infoを生成する際に、必要に応じてこのデータを読み取り/書き込み可能なセクションに配置するよう、ilc/crossgen2を改善します。これにより、AOT(Ahead-of-Time)コンパイル時のリロケーション問題を解決します。

// MethodReadWriteDataNode.cs に新しく追加されたノード
// async resumption infoを読み取り/書き込み可能セクションに配置

変更内容

  • JIT側の変更(codegenarm64.cpp, emitarm64.cpp): async resumption infoの生成ロジックを修正し、リロケーション情報の配置方法を改善
  • CorInfo側の変更(CorInfoImpl.cs): JITがデータの配置先を決定する際に参照するAPI拡張(約93行追加)
  • 依存性分析の拡張:
    • MethodReadOnlyDataNode.cs: 既存のread-onlyデータノードを調整
    • MethodReadWriteDataNode.cs: 新たに読み取り/書き込み可能セクション用のノードを追加(63行)
  • プロジェクト設定: ILCompiler.Compiler/ReadyToRunプロジェクトに参照追加
  • テスト整理: async関連テストの設定を簡略化

パフォーマンスへの影響

影響なし。本変更はメモリレイアウトの最適化に関するもので、実行時パフォーマンスには直接的な影響はありません。ただし、読み取り専用セクションの利点を一部のデータで放棄するため、キャッシュ効率に微細な影響の可能性があります。

関連Issue

#121871(修正対象)、#123378(前提となる関連PR)

その他

  • 互換性: 破壊的変更なし。AOT/ReadyToRunコンパイルのリロケーション生成ロジックの内部実装改善です。
  • プラットフォーム対象: Windows以外のELF/MachOベースのプラットフォーム(Linux、macOS等)に特に影響します。

#123183 Support devirtualizing non-shared GVMs in R2R

  • 作成者: @hez2010
  • 作成日時: 2026年01月14日 17:22:36(UTC)
  • マージ日時: 2026年02月03日 00:23:32(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution

概要

このPRは、Ready2Run (R2R) コンパイル時に非共有汎用仮想メソッド (GVM) の仮想化解除(devirtualization)をサポートするためのもので、マネージ型システムに実装されています。共有GVMの仮想化解除はまだ汎用コンテキストの不足により実装されていません。NativeAOTでは、JITが太いポインタのヘルパーコール処理を改善する必要があるため、今回は非共有ケースが優先されています。

変更内容

  • DevirtualizationManager.cs: GVM仮想化解除のロジック追加(+29行)
  • corinfo.h: API定義の調整(-1行)
  • jitinterface.cpp: ランタイムのJIT インターフェース実装に対応コード追加(+14行)
  • gentree.h: コンパイラのIR構造体定義を更新(+7行)
  • compiler.cpp: コンパイラロジック調整(-2行)
  • CorInfoImpl.cs: JIT-EEインターフェースの不要な処理削除(-7行)
  • CorInfoTypes.cs: 型定義の微調整
  • jiteeversionguid.h: バージョンGUID更新

パフォーマンスへの影響

R2R構成での仮想呼び出しのdevirtualization実現により、実行時の仮想メソッド解決オーバーヘッドを削減し、コール パフォーマンスが向上します。特に非共有GVMの場合、直接呼び出しへの最適化が可能になります。ただし、共有GVMは本変更の対象外のため、その部分のパフォーマンス改善は別途対応が必要です。

関連Issue

  • #112596 (貢献)
  • #122023 (共有GVM devirtualizationの課題について参照)

その他

  • NativeAOT環境でのサポートはまだ実装されていません。JITが太いポインタのヘルパーコール処理を改善する必要があります。
  • 共有GVMの仮想化解除は、適切な汎用コンテキスト情報の不足により、今後の課題として残されています。

#123044 [Wasm RyuJIT] Initial scaffolding for calls and helper calls

  • 作成者: @kg
  • 作成日時: 2026年01月09日 20:37:12(UTC)
  • マージ日時: 2026年02月03日 16:57:41(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssembly用RyuJIT コンパイラにおいて、関数呼び出し(calls)とヘルパー呼び出し(helper calls)の基盤実装を開始するPRです。呼び出し規約、パラメータの受け渡し、戻り値処理などのスカフォルディングコードを追加し、Wasm環境での関数呼び出しメカニズムの実装基盤を構築します。

変更内容

  • emitwasm.cpp/h: Wasm特有の命令エミット処理を追加実装(85行追加)
  • codegenwasm.cpp: 呼び出し処理の全体的なスカフォルディング(203行追加)
  • instrswasm.h: Wasm命令セット定義の拡張(20行追加)
  • emitfmtswasm.h: 命令フォーマット定義の調整
  • codegencommon.cpp、emit.cpp、lower.cpp: 共通コード生成ロジックの軽微な調整

パフォーマンスへの影響

現段階ではスカフォルディング実装のため、パフォーマンスへの直接的な影響なし。将来的に呼び出し規約の最適化が段階的に実装される予定ですが、本PRではその基盤整備に留まります。

関連Issue

PR #123021に依存しています。

その他

  • 複数のレビュワー(AndyAyersMS、EgorBo、SingleAccretion、adamperlin等)により段階的にレビューされ、反復的な改善が加えられています。
  • WebAssemblyのJIT対応は段階的なロードマップに基づいており、本PRはその初期段階です。
  • Copilotにより7件のコメントが生成され、コード品質向上が図られています。

#122501 [RISC-V] Fix 64-bit offset handling in emitLoadImmediate

  • 作成者: @credo-quia-absurdum
  • 作成日時: 2025年12月12日 18:06:05(UTC)
  • マージ日時: 2026年02月03日 12:28:57(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution arch-riscv

概要

RISC-V JIT コンパイラの emitLoadImmediate 関数における64ビットオフセット処理の修正です。32ビット表現でのオフセット計算が32ビットを超える場合に未定義動作を引き起こし、冗長な命令生成につながる問題を解決しました。現在の実装は正確性を損なっていませんが、将来の拡張時にも堅牢であることを確保します。

変更内容

  • src/coreclr/jit/emitriscv64.cpp: オフセット計算ロジックを32ビットから64ビットに変更
    • uint32_t から uint64_t への型変更
    • 新たに BitMask64 ヘルパー関数を導入
    • リーディングゼロ数計算を64ビット幅で実行

パフォーマンスへの影響

改善: コード生成の効率化により、特定の定数(例:0xFFFF'F7FF'FFFF'FFFF)で冗長な命令が削減

  • テスト対象: 8バイト削減(-15.38%)、PerfScore -9.30%
  • System.*.dll全体: 87,783コンテキスト中で大きな影響なし(0 bytes)
  • FullOpts最適化レベルで PerfScore -0.12% 改善

懸念なし: System ライブラリ分析では該当パターンが稀で、実運用への影響は最小限

関連Issue

部分的に #84834 に関連(Samsung チーム内でのRISC-V対応作業)

その他

  • C++ の未定義動作回避: シフト演算のシフト量がビット幅以上の場合の動作を適切に処理
  • BitMask64 と既存の WordMask の命名不統一は、スコープ最小化のため今後の別PR で対応予定
  • コード削減例: slli a0, a0, 21 + mv a0, a0 + slli a0, a0, 22slli a0, a0, 43 に統合

#120201 Fix invalid csharp_space_around_declaration_statements option value

  • 作成者: @xtqqczze
  • 作成日時: 2025年09月29日 15:13:02(UTC)
  • マージ日時: 2026年02月03日 02:46:32(UTC)
  • ラベル: area-Infrastructure community-contribution

概要

.editorconfig ファイルで無効な csharp_space_around_declaration_statements オプション値を修正します。有効な値は ignorefalse のみですが、無効な値 do_not_ignore が使用されていました。デフォルト値は false のため、この無効な値は暗黙的に false として機能していました。

変更内容

  • .editorconfig: 無効なオプション値 do_not_ignore を有効な値に修正(1行追加、1行削除)

パフォーマンスへの影響

影響なし。これはコード解析オプションの設定ファイル修正であり、ランタイム動作には影響しません。

関連Issue

#120201

その他


目次