注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #130629 Remove invalid live-target assert in cDAC DacEnumerableHash
- #130625 [cDAC] Remove GetClassPointer from the public IRuntimeTypeSystem surface
- #130608 Fix DNS_ADDR_ARRAY.MaxCount: use byte size instead of element count
- #130605 Make browser StopwatchTests robust to coarse clock resolution
- #130597 [WIP] Revert last commit to address feedback on Delegate.GetHashCode fix PR
- #130583 Ensure float to BFloat16 conversion keeps NaN as NaN
- #130575 Add integer to Half and BFloat16 conversion rounding tests
- #130566 Fix decimal to/from floating-point conversions to round correctly
- #130565 Fix rounding of BigInteger conversions to floating-point types
- #130563 Improve integer CopySign with branchless bit-twiddling
- #130558 Fix extra negative sign when a value rounds to zero in a two-section custom format
- #130554 Simplify StringBuilder indexer to reuse FindChunkForIndex
- #130549 Use string.ToUpperOrdinal in SearchValues<string> construction
- #130547 Replace strcpy with safe string copy
- #130546 [LoongArch64] Fix the risk of sign-extension in CodeGen::genIntCastOverflowCheck() with
CHECK_SMALL_INT_RANGE signed to signed castcase. - #130539 Pass down DJI and MethodDesc to avoid unnecessary PtrHashMap lookup
- #130536 Use impInlineRoot()->compIsAsync() in fgGetStaticsCCtorHelper
- #130535 JIT: Coalesce stores from struct copies
- #130532 cDAC review instructions: require doc updates for contract/data-descriptor changes
- #130508 Implement Decimal32/64/128 arithmetic and comparison operators
- #130504 [System.Net.NameResolution] Fall back to localhost when
localhost.resolution fails - #130503 Select STJ member accessor based on IsDynamicCodeCompiled
- #130477 Remove stale arcade#7585 comments in System.Net.Http
- #130469 Increase vectorized Tan test tolerance
- #130468 [clr-ios] Disable R2R IL-body stripping for more library tests that need IL at run time
- #130462 Skip host tests in s390x and ppc64le cross-builds
- #130422 JIT: Fold insertps chains that source a scalar extracted from another vector
- #130394 [wasm] Emit webcil-in-wasm component stubs for composite R2R
- #130381 Suppress DOTNET_GCHeapAffinitizeRanges during crossgen2 execution
- #130356 [release/8.0-staging] [QUIC] Update MsQuic to the latest 2.5 version
- #130355 [release/9.0-staging] [QUIC] Update MsQuic to the latest 2.5 version
- #130269 Improve Certificate Policy tests
- #130238 Fix marshaller signature parameter index handling
- #130234 [main] Update dependencies from dotnet/xharness
- #130122 [wasm] Bump chrome for testing - linux: 150.0.7871.46, windows: 149.0.7827.201, mac: 149.0.7827.201
- #130087 [ci-scan] Add evaluation infrastructure for the CI failure agentic workflows
- #130012 Fix NativeAOT assembly name mangling collisions
- #129866 Use no-op MD Importer for DIA-backed stacktraces
- #129852 Remove 128-bit limit on Vector<T> size for ARM64
- #128449 JIT: Misc if-conversion
#130629 Remove invalid live-target assert in cDAC DacEnumerableHash
- 作成者: @max-charlamb
- 作成日時: 2026年07月13日 14:40:49(UTC)
- マージ日時: 2026年07月13日 20:32:43(UTC)
- ラベル: area-Diagnostics-cdac
概要
cDAC(Compact DAC)のDacEnumerableHashリーダーにおける無効なデバッグアサーション(Debug.Assert(Count == entries.Count))を削除し、コメントに置き換えます。ライブプロセスからの読み込み時に、ハッシュテーブルのCountと実際の要素数が一致しないことがあるため、アサーションは不正です。この修正はGC stress-testの堅牢性向上の一環です。
変更内容
- src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Data/DacEnumerableHash.cs
Debug.Assert(Count == entries.Count)を削除(-3行)- ライブプロセス読み込み時に
Countと実際の要素数が乖離する理由を説明するコメントを追加(+2行) - 不要な
System.Diagnostics依存を削除
パフォーマンスへの影響
影響なし。デバッグビルド時にアサーション処理が削除されるため、若干の負荷軽減。
関連Issue
#130447(関連するcDAC GC stress-test堅牢性修正のクラスタからの分割)
その他
- この修正はDebug/Checked cDAC構築時のみ適用(stress harness自体はRelease cDAC)
- ネイティブ
DacEnumerableHashTableはテーブルの同時成長とSLOT_NEXT経由のエントリ移行をサポート設計のため、ライブプロセス読み込み時に整合性が保証されない
#130625 [cDAC] Remove GetClassPointer from the public IRuntimeTypeSystem surface
- 作成者: @max-charlamb
- 作成日時: 2026年07月13日 13:58:07(UTC)
- マージ日時: 2026年07月13日 23:32:18(UTC)
- ラベル: area-Diagnostics-cdac
概要
cDAC(CoreCLR Diagnostic Access Component)の IRuntimeTypeSystem インターフェースから、ランタイム内部構造である EEClass* を返す GetClassPointer メソッドを削除し、セマンティックな診断用API TryGetSystemVAmd64EightByteClassification で置き換えるリファクタリング。これにより、公開契約は診断コンシューマーが必要とする情報に絞られ、ランタイム内部詳細の露出を排除します。
変更内容
IRuntimeTypeSystem(公開契約):
GetClassPointerを削除し、TryGetSystemVAmd64EightByteClassification(TypeHandle, out SystemVAmd64EightByteClassification)を追加。新規追加の型:SystemVAmd64Classificationenum(ABI分類を表現)SystemVAmd64EightByte { Classification, Size }SystemVAmd64EightByteClassification { First, Second? }(オプショナルな第2バイトで無効状態を回避)
RuntimeTypeSystem_1:
GetClassPointerをinternalヘルパーに降格DacDbiImpl.IsValidObject:
GetTypeHandleの成功で妥当性判定を行うように簡略化(従来のMethodTable → EEClass → MethodTable自己一貫性チェックの重複実装を排除)CdacTypeHandle: 新規APIを利用し、cDAC分類enum から共有JIT型
SystemVClassificationTypeへの明示的なマッピングを追加ドキュメント・テスト: RuntimeTypeSystem.md を更新、
MethodTableTestsからGetClassPointer依存のアサーションを削除
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- ビルド成功(警告・エラー: 0)
- cDAC単体テスト: 2693パス、0失敗、16スキップ
- 公開API変更(破壊的):
GetClassPointerの削除(ただし診断消費側の実装には影響なし、2つのコンシューマーとも置換完了) - 設計思想: 公開契約はランタイム内部構造ではなく、診断目的で必要なセマンティック情報のみを露出する
#130608 Fix DNS_ADDR_ARRAY.MaxCount: use byte size instead of element count
- 作成者: @Copilot
- 作成日時: 2026年07月13日 09:01:15(UTC)
- マージ日時: 2026年07月13日 13:20:23(UTC)
- ラベル: area-System.Net
概要
Windows DNS相互運用での DNS_ADDR_ARRAY.MaxCount の計算が誤っていた問題を修正しました。仕様では MaxCount はバイト単位のサイズであるのに対し、実装では要素数を設定していました。BuildAddrArray メソッドで、MaxCount を要素数 (count) ではなく、ヘッダ + 全ての DNS_ADDR エントリの合計バイトサイズ (totalSize) に修正しました。
// Before
arr.MaxCount = (uint)count;
// After
arr.MaxCount = (uint)totalSize;
変更内容
- src/libraries/System.Net.NameResolution/src/System/Net/DnsResolverPal.Windows.cs:
BuildAddrArrayメソッドでDNS_ADDR_ARRAY.MaxCountの割り当てを修正(要素数からバイトサイズに変更)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
この修正は Windows API DnsQueryEx のカスタムサーバリスト機能との互換性に関わる修正です。DNS_ADDR_ARRAY の MaxCount フィールドは Win32 API 仕様に従いバイト単位のサイズを要求するため、正確なメモリ割り当てサイズの設定が必要です。
#130605 Make browser StopwatchTests robust to coarse clock resolution
- 作成者: @Copilot
- 作成日時: 2026年07月13日 08:24:19(UTC)
- マージ日時: 2026年07月13日 15:15:11(UTC)
- ラベル: area-System.Runtime os-browser
概要
ブラウザ/WASM環境でのStopwatchTestsの間欠的な失敗を修正します。ブラウザのセキュリティによる時間精度の制限により、固定時間のスリープが時間解像度の境界を越えることが保証されない問題に対応しています。テスト用のSleepヘルパーを改修し、ブラウザ環境でのみStopwatch.GetTimestamp()が実際に進むまでスピンウェイトするようにしました。
private static void Sleep(int milliseconds)
{
if (PlatformDetection.IsBrowser)
{
long start = Stopwatch.GetTimestamp();
long minTicks = Math.Max(1, Stopwatch.Frequency / TimeSpan.TicksPerSecond);
do
{
s_sleepEvent.WaitOne(milliseconds);
}
while (Stopwatch.GetTimestamp() - start < minTicks);
return;
}
s_sleepEvent.WaitOne(milliseconds);
}
変更内容
- src/libraries/System.Runtime/tests/System.Runtime.Extensions.Tests/System/Diagnostics/Stopwatch.cs:
Sleepヘルパーメソッドにブラウザ固有のロジックを追加。ブラウザ環境では、タイムスタンプが最低1チック以上進むまでWaitOneを再発行するスピンループを実行します。非ブラウザプラットフォームは変更なし。影響を受けるテスト:GetTimestamp、StartNewAndReset、ConstructStartAndStop、OverridesToString。
パフォーマンスへの影響
テスト実行時間に対する影響のみ。ブラウザ環境でのテスト実行が若干長くなる可能性がありますが、これは信頼性を確保するための必要なトレードオフです。本番コードは変更されていません。
関連Issue
その他
- テストの無効化はなく、すべてのテストが実行される
- ブラウザプラットフォーム(WASM)の
performance.now()はセキュリティ上の理由でクランプされた粗い解像度を持つため、より高解像度の時間ソースへの切り替えは不可能 - この変更はテストのロバスト性向上に限定され、公開API変更はなし
#130597 [WIP] Revert last commit to address feedback on Delegate.GetHashCode fix PR
- 作成者: @Copilot
- 作成日時: 2026年07月13日 04:39:41(UTC)
- マージ日時: 2026年07月13日 04:44:52(UTC)
- ラベル: 指定なし
概要
PR #130542のDelegate.GetHashCode修正に対するレビューフィードバックに対応するため、最後のコミットをリバートするWIPプルリクエストです。元のPR #130542で実装された変更の一部を取り消し、関連する問題はフォローアップPR(#99200)で別途対応される予定です。
変更内容
- src/coreclr/System.Private.CoreLib/src/System/Delegate.CoreCLR.cs: 前のコミットをリバート(+5行/-12行、合計17行)
パフォーマンスへの影響
影響なし
関連Issue
その他
- WIP(Work In Progress)状態のプルリクエストです
- PR #130542にマージされる予定です
- レビュアーはまだアサインされていません
#130583 Ensure float to BFloat16 conversion keeps NaN as NaN
- 作成者: @tannergooding
- 作成日時: 2026年07月12日 18:41:36(UTC)
- マージ日時: 2026年07月13日 00:51:07(UTC)
- ラベル: area-System.Numerics
概要
floatからBFloat16への狭義変換でNaN値がInfinityに変わる問題を修正します。IEEE 754標準では狭義変換時にNaNはNaNのままでなければなりませんが、シグナリングNaN(ペイロードビットが下位16ビットのみの場合)が仮数部ゼロになり、結果的に無限大になっていました。修正は仮数部のquiet bit(0x0040)を強制的に設定することで、NaNを保持しながら符号とペイロードビットを保存します。
変更内容
BFloat16.cs:explicit operator BFloat16(float)のNaNパスで、仮数部のquiet bitを強制設定(bits |= 0x0040相当)BFloat16Tests.cs:ExplicitConversion_FromSingleテスト理論に3つのテストケースを追加0x7F800001(下位16ビットのペイロード) →0x7FC00xFF800001(負のバリアント) →0xFFC00x7FA00000(上位ペイロードビット + quiet bit) →0x7FE0
パフォーマンスへの影響
影響なし(狭義変換のNaNパスのみの修正、実行速度に変化なし)
関連Issue
その他
- この修正は既存の
double→BFloat16変換およびHalf型のexplicit operator Half(float)の実装と一貫性を保ちます - WASM/Mono環境のNaN正規化動作に対応する既存テストゲート機構に準拠しています
- テスト検証済み(Windows x64での全1542テスト合格確認)
#130575 Add integer to Half and BFloat16 conversion rounding tests
- 作成者: @tannergooding
- 作成日時: 2026年07月12日 02:29:39(UTC)
- マージ日時: 2026年07月13日 13:24:42(UTC)
- ラベル: area-System.Numerics
概要
HalfとBFloat16の整数型からの明示的変換に関するテストカバレッジを追加します。これらの変換が正しく丸め処理を行い、floatを経由した二重丸めが発生していないことを検証します。本PR (#112474の一部)により、HalfTestsは初めて整数変換テストを、BFloat16Testsは64ビット・128ビット整数のテストを獲得します。
変更内容
- HalfTests.cs:
Int32/UInt32/Int64/UInt64の整数変換テストを追加。11ビット四捨五入境界(2048/2049/2050/2051)、有限値/オーバーフロー境界(65504/65519/65520 → inf)、大きな64ビット値のテストケースを含む。 - BFloat16Tests.cs:
Int64/UInt64/Int128/UInt128の整数変換テストを追加。二重丸め判定ケース(0x101_0000/0x101_0001/0x100_FFFF)と高値域の四捨五入境界付近のテストケースを含む。
すべての期待値はHalf.Parse/BFloat16.Parseオラクル(正確な十進文字列)と照合済み。テスト実行結果: Half 1605件、BFloat16 1571件、失敗0件。
パフォーマンスへの影響
テストのみの変更のため、実行時パフォーマンスへの影響なし。
関連Issue
その他
二重丸め検証が重要な判定ケース: (BFloat16)0x101_0001は直接変換で0x4B81(正確)だが、(BFloat16)(float)0x101_0001を経由すると0x4B80(二重丸め)になるため、このテストは実装が決してfloatを経由しないことを保証します。
#130566 Fix decimal to/from floating-point conversions to round correctly
- 作成者: @tannergooding
- 作成日時: 2026年07月11日 23:46:20(UTC)
- マージ日時: 2026年07月13日 13:55:23(UTC)
- ラベル: area-System.Numerics
概要
decimal ↔ 浮動小数点数(double/float/Half/BFloat16)の相互変換アルゴリズムを、中間ステップでの複数回の丸めによる精度喪失を排除し、完全に正確に丸められた整数ベースアルゴリズムに再実装しました。これにより、ラウンドトリップ変換が decimal.Parse(value.ToString("G99")) と一致するようになります。
修正例:
10000000000000.099609375mを double に変換する際の誤った結果を解決(decimal)1.23が1.2299999999999999822364316060として正確に表現されるように改善
変更内容
コア実装変更(System.Private.CoreLib):
Decimal.DecCalc.cs: decimal→float/double変換を Clinger と Eisel-Lemire の高速パスを再利用した正確に丸められた整数アルゴリズムに変更;float/double→decimal変換を符号付き仮数と指数への分解と単一丸めで実装Number.NumberToFloatingPointBits.cs:Pow10DoubleTableをinternalに変更し、decimal変換から再利用可能にHalf.cs、BFloat16.cs: decimal変換を float経由から double経由に変更し、ダブルラウンディングを排除
テスト更新:
- DecimalTests.cs: ビットパターン期待値、ラウンドトリップテスト、オーバーフローテストを追加
- DecimalTests.GenericMath.cs: 浮動小数点型からの変換期待値を更新
- HalfTests.cs、BFloat16Tests.cs: 正確に丸められたダブルラウンディングケース、非正規化数、オーバーフロー対応のテストを新規追加
- その他複数ファイル: 古い誤った丸め結果を反映していたテスト(SqlDecimalTest、StringWriterTests等)を更新
パフォーマンスへの影響
ベンチマーク結果(16要素バッチあたり、InProcessEmitToolchain):
| 方向 | 修正前 | 修正後 | 変化 |
|---|---|---|---|
| decimal→double | 28.4 ns | 64.0 ns | +125% |
| decimal→float | 32.0 ns | 80.5 ns | +152% |
| double→decimal | 127.8 ns | 177.8 ns | +39% |
| float→decimal | 181.5 ns | 123.6 ns | -32% |
decimal→浮動小数点数の一般的なケースは Clinger/Eisel-Lemire 高速パスで以前の速度を維持;64ビット超の仮数では正確な除算が必要(旧コードが誤って丸めていた入力)。double→decimal は ~3 ns/op の正当な回帰ですが、float→decimal の大幅高速化でオフセット。
関連Issue
その他
- 破壊的変更: なし。変換結果がより正確になるため、以前より正確な値が返されます。古いテストで期待値の更新が必要でした。
- テスト結果: System.Runtime.Tests
#130565 Fix rounding of BigInteger conversions to floating-point types
- 作成者: @tannergooding
- 作成日時: 2026年07月11日 22:23:31(UTC)
- マージ日時: 2026年07月13日 13:25:20(UTC)
- ラベル: area-System.Numerics
概要
BigIntegerから浮動小数点型への変換操作において、丸めの不正確さを修正します。(double)BigIntegerは切り詰めではなくIEEE 754のround-to-nearest, ties-to-evenを実装し、(float)/(Half)/(BFloat16)はround-to-oddを経由した共有パスを使用することで、二重丸めエラーを防止します。
変更内容
- BigInteger.cs:
(double)BigInteger変換をIEEE 754準拠に刷新。64ビット有効数字ウィンドウとスティッキービット走査により正しく丸める。(float)/(Half)/(BFloat16)を共有のConvertToDouble(value, roundToOdd: true)パスに統一。 - NumericsHelpers.cs: 廃止された
GetDoubleFromPartsヘルパーを削除(64行)。 - cast_from.cs: 丸めのタイ・ブレーキング、深いリムでのスティッキービット、オーバーフロー、float/BFloat16の二重丸めシナリオをカバーするテストを追加(91行)。
パフォーマンスへの影響
直接的なパフォーマンス測定結果は記載されていませんが、変換ロジックの再実装により若干のオーバーヘッドが予想されます。ただし正確性の向上が優先されています。
関連Issue
#49611 #125837 #112474(部分的な解決)
その他
- 修正前:
(double)(BigInteger)(long.MaxValue / 2)は4611686018427387392を返す(誤り)。直接(double)(long)(long.MaxValue / 2)は4611686018427387904(正しい)。 - 修正後:
double変換はIEEE丸めを採用。float変換で数百のULP誤差が解消される。 BigIntegerがbit配列で裏付けられている場合、常に正規の倍精度浮動小数点数の大きさになるため、非正規数/ゼロ処理は不要。Halfはこの改善の恩恵を受けませんが、統一性のため共有パスを使用。
#130563 Improve integer CopySign with branchless bit-twiddling
- 作成者: @tannergooding
- 作成日時: 2026年07月11日 21:36:52(UTC)
- マージ日時: 2026年07月13日 19:10:44(UTC)
- ラベル: area-System.Numerics
概要
符号付き整数型(sbyte、short、int、long、nint、Int128)のCopySign実装をデータ依存分岐のない条件付き否定パターンに置き換え、パフォーマンスを大幅に向上させました。オーバーフロー例外の発生条件(CopySign(MinValue, 非負値))は保持されています。
実装パターン(ブランチレス版):
signMask = (value ^ sign) >> (width - 1); // 符号が異なる場合はall-ones
result = (value ^ signMask) - signMask; // 条件付き否定を実現
変更内容
- System.Private.CoreLib内の符号付き整数型:
CopySignメソッドをブランチレスな条件付き否定アルゴリズムで再実装。MinValueと非負値の組み合わせでのオーバーフロー例外発生は予測不可能な分岐1つで保持 - Int128の特殊化: 中間
Int128演算を減らすためハーフリムベースの実装を採用 - テストカバレッジ: 各符号付き整数型(
sbyte、short、int、long、nint、Int128)のGenericMathテストにCopySignTestを追加。8ビット領域の全探索検証とInt128の境界値・ランダム入力による検証を実施
パフォーマンスへの影響
改善率(新実装/旧実装の比率、低いほど高速):
| 型 | arm64 (Apple M4) | x64 |
|---|---|---|
int |
~2.0x高速化 | ~1.1x高速化 |
long |
~2.0x高速化 | ~1.3x高速化 |
Int128 |
~1.7x高速化 | ほぼ中立(マイクロアーキテクチャ依存) |
スカラー型はすべてのプラットフォームで改善。Int128はarm64で大幅改善、x64ではほぼ同等(Intel Emerald Rapidsで小幅改善、AMD EPYC Turinで小幅低下)。x64での分岐予測効果とInt128のハードウェア非加速を考慮するとこの結果は妥当。
関連Issue
その他
- 公開API(
CopySignメソッド)の動作は完全に互換性を保持 - 内部実装の最適化であり、破壊的変更なし
- 浮動小数点型と
decimal型のCopySignは既にビット操作を使用しているため変更なし
#130558 Fix extra negative sign when a value rounds to zero in a two-section custom format
- 作成者: @tannergooding
- 作成日時: 2026年07月11日 21:11:04(UTC)
- マージ日時: 2026年07月13日 13:25:36(UTC)
- ラベル: area-System.Numerics
概要
負の値がゼロに丸められる場合(または負のゼロの場合)に、2セクション形式のカスタム数値フォーマット(例:+0.00;-0.00)で余分な負の符号が付加される不具合を修正しました。
(-0.001).ToString("+0.00;-0.00"); // 修正前: "-+0.00", 修正後: "+0.00"
変更内容
- src/libraries/Common/src/System/Number.Formatting.Common.cs:
NumberToStringFormatの2つの符号追加サイトを修正し、2セクション形式のカスタムフォーマットがフォールバック時に余分な負の符号を追加しないようにゲート処理を実施。フォーマットが専用の負のセクション(最初の;の後の部分)を定義している場合、そのセクションが符号を管理するため、自動符号の注入を抑制します。 - src/libraries/System.Runtime/tests/System.Runtime.Tests/System/DoubleTests.cs: 1セクション・2セクション・3セクションのカスタムフォーマット全体にわたり、値がゼロに丸められるときと負のゼロの場合のセクション選択と符号の動作をカバーする回帰テストを追加。
パフォーマンスへの影響
影響なし
関連Issue
その他
- この修正は
.NET Core 3.0以降の回帰で、.NET Frameworkと.NET Core 2.1では正しく動作していました。 - シングルセクション形式は
#32237による仕様通りの-0.00動作を保持します。 Number.Formatting.Common.csは共有コンポーネントであるため、すべての数値型(Double、Decimal、Single、Half)に影響します。
#130554 Simplify StringBuilder indexer to reuse FindChunkForIndex
- 作成者: @tannergooding
- 作成日時: 2026年07月11日 18:42:53(UTC)
- マージ日時: 2026年07月13日 13:26:00(UTC)
- ラベル: area-System.Runtime
概要
StringBuilderのインデクサ(char this[int index])を簡潔化し、単一の事前境界チェック(uint)index >= (uint)Lengthを追加して負のインデックスと範囲外インデックスの両方をカバーし、既存のFindChunkForIndexヘルパーメソッドを再利用することで、ホップごとの処理を削減しました。例外生成はThrowHelper経由で処理され、インライン化を妨げる大規模な例外構築をインライナー外に追い出しています。
変更内容
- src/libraries/System.Private.CoreLib/src/System/Text/StringBuilder.cs
- インデクサのgetter/setterを簡潔化
- 境界チェックを
(uint)index >= (uint)Lengthによる単一の事前チェックに統一(負のインデックス・範囲外インデックスの両方をカバー) - チャンク走査の重複コードを排除し、既存の
FindChunkForIndexヘルパーを再利用 - 例外生成を
ThrowHelperに集約(getterはIndexOutOfRangeException、setterはArgumentOutOfRangeExceptionでindexパラメータとSR.ArgumentOutOfRange_IndexMustBeLessリソースを使用) - ホップごとの比較を2回から1回に削減
パフォーマンスへの影響
大幅な改善を実現(ベンチマーク:.NET 10.0.9 X64 RyuJIT AVX2):
| シナリオ | 1チャンク | 4チャンク | 16チャンク | 64チャンク |
|---|---|---|---|---|
| Get終端付近 | −14% | −15% | −14% | −12% |
| Get中央付近 | −14% | −27% | −5% | −3% |
| Get開始付近 | −88% | −14% | +1% | −24% |
| Set開始付近 | −36% | −9% | +2% | 無視できる |
主な改善点:
- 共通パス(1チャンク/ヘッドチャンク)で最大14%高速化:
FindChunkForIndexがモダンRyuJITにインライン化されるため - 多チャンク走査で24%改善(64チャンク)、分散が劇的に縮小(StdDev 3.37ns → 0.03ns)
- setterの共通ケースで36%改善(1チャンク):throw例外の外部化によりインライン化が可能に
- メモリ割り当ては発生しない
関連Issue
その他
- 動作変更なし:getterは引き続き
IndexOutOfRangeExceptionをスロー、setterはArgumentOutOfRangeException(同じパラメータ名・リソース)をスロー - PR説明はGitHub Copilotが作成者の代わりに作成
#130549 Use string.ToUpperOrdinal in SearchValues<string> construction
- 作成者: @MihaZupan
- 作成日時: 2026年07月11日 14:49:49(UTC)
- マージ日時: 2026年07月13日 09:05:51(UTC)
- ラベル: area-System.Memory
概要
SearchValues<string> の構築時に、ローカル実装の ASCII 文字セット操作を削除し、新しい string.ToUpperOrdinal() API を使用してケース非依存の文字列を正規化するように簡略化しました。
変更内容
- src/libraries/System.Private.CoreLib/src/System/SearchValues/Strings/StringSearchValues.cs
- ローカルの
s_allAsciiExceptLowercaseSearchValues<char>を削除 - 手動の大文字化実装(
NormalizeIfNeeded)をvalue.ToUpperOrdinal()への呼び出しに置換(ignoreCaseがtrueの場合) - 不要になった
using System.Globalization;を削除
- ローカルの
パフォーマンスへの影響
影響なし(ロジック自体の変更ではなく、既存の string.ToUpperOrdinal() API への委譲)
関連Issue
なし
その他
内部実装の簡略化。公開 API への影響はありません。string.ToUpperOrdinal() は既に利用可能な API です。
#130547 Replace strcpy with safe string copy
- 作成者: @am11
- 作成日時: 2026年07月11日 11:25:41(UTC)
- マージ日時: 2026年07月13日 02:43:38(UTC)
- ラベル: community-contribution area-NativeAOT-coreclr os-openbsd
概要
NativeAOT ランタイムで strcpy() の非安全な使用をより安全な文字列コピー処理に置き換えました。OpenBSD の lld リンカーがコンパイル時に警告を出していたため、セキュリティベストプラクティスに準拠するための改善です。
変更内容
- src/coreclr/nativeaot/Runtime/gcenv.ee.cpp:
strcpy()の呼び出しを安全な文字列コピー処理に置き換え(+5/-1)- 対象:
GCToEEInterface::CreateThread()メソッド内の文字列コピー処理
- 対象:
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- この変更は内部実装(NativeAOT ランタイムの C++ コード)に対するもので、公開 API には影響しません
- OpenBSD の lld リンカーが警告する
strcpy()使用法を改善しており、他のプラットフォームでもセキュリティの向上につながります - 提供されたサンプルでは、警告が発生していた環境での publish 成功を確認しています
#130546 [LoongArch64] Fix the risk of sign-extension in CodeGen::genIntCastOverflowCheck() with CHECK_SMALL_INT_RANGE signed to signed cast case.
- 作成者: @LuckyXu-HF
- 作成日時: 2026年07月11日 08:23:20(UTC)
- マージ日時: 2026年07月13日 09:44:30(UTC)
- ラベル: area-CodeGen-coreclr arch-loongarch64
概要
LoongArch64アーキテクチャにおいて、CodeGen::genIntCastOverflowCheck()内の符号拡張リスク(特に符号付き整数から符号付き整数へのキャスト時のCHECK_SMALL_INT_RANGEケース)を修正しました。あわせてCodeGen::genCodeForCompare()の命令生成を最適化し、System.Runtime.Numerics.Testsにおけるランダムな失敗を解決しています。
変更内容
- src/coreclr/jit/codegenloongarch64.cpp:
- 整数キャスト時のオーバーフロー判定処理における符号拡張の問題を修正
- 比較命令生成処理の細分化されたケースで命令最適化を実施
パフォーマンスへの影響
影響なし(バグ修正と命令最適化による改善)
関連Issue
なし
その他
- LoongArch64固有のJITコンパイラ処理の修正
- 内部実装の改善(公開APIへの影響なし)
- 符号付き型キャストにおける正確性の向上
#130539 Pass down DJI and MethodDesc to avoid unnecessary PtrHashMap lookup
- 作成者: @hoyosjs
- 作成日時: 2026年07月11日 01:06:52(UTC)
- マージ日時: 2026年07月13日 19:24:49(UTC)
- ラベル: area-Diagnostics-coreclr
概要
デバッガのパッチバインディングパスを最適化する変更です。DebuggerController::BindPatchで既に利用可能なDebuggerJitInfo*とMethodDesc*をCodeRegionInfo::GetCodeRegionInfoに渡すことで、不要なPtrHashMapルックアップを回避します。これにより、サービシング修正(#126247)との整合性を保ちながらパフォーマンスを改善します。
変更内容
- src/coreclr/debug/ee/controller.cpp:
DebuggerController::BindPatch内でCodeRegionInfo::GetCodeRegionInfoを呼び出す際、GetCodeRegionInfo(NULL, NULL, startAddr)からGetCodeRegionInfo(info, pMD, startAddr)に変更。これによりGetCodeRegionInfoはinfo->m_addrOfCodeが存在する場合、キャッシュされたリージョン情報を直接返却できるようになります。
パフォーマンスへの影響
改善あり。不要なPtrHashMapルックアップを回避することで、パッチバインディング時のオーバーヘッドが削減されます。具体的なベンチマーク数値は提供されていません。
関連Issue
その他
なし
#130536 Use impInlineRoot()->compIsAsync() in fgGetStaticsCCtorHelper
- 作成者: @Copilot
- 作成日時: 2026年07月10日 23:42:23(UTC)
- マージ日時: 2026年07月13日 11:27:26(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITコンパイラの fgGetStaticsCCtorHelper において、インライン化されたメソッドが非同期メソッドのコンテキストで処理される際の型判定バグを修正しました。非同期メソッドのインライニング時に、ピンスタティックベースヘルパーの戻り値型が誤った型 TYP_I_IMPL と判定されていたのを、正しく TYP_BYREF に修正します。
// 修正内容:compIsAsync() → impInlineRoot()->compIsAsync()
type = impInlineRoot()->compIsAsync() ? TYP_BYREF : TYP_I_IMPL;
変更内容
- src/coreclr/jit/flowgraph.cpp: ピンスタティックベースヘルパーの非同期判定をインラインルートコンパイラで評価するように変更(1行追加、1行削除)
パフォーマンスへの影響
影響なし。本修正は型判定ロジックの正確性向上による動作改善であり、パフォーマンス改善/劣化は生じません。
関連Issue
なし
その他
この修正により、非同期メソッドにインライン化されたメソッド内のピンスタティックスコンストラクタヘルパーが、サスペンション時に適切に「kill across suspensions」動作を受けるようになり、byref型の導出アドレスが正しく処理されます。
#130535 JIT: Coalesce stores from struct copies
- 作成者: @EgorBo
- 作成日時: 2026年07月10日 23:16:32(UTC)
- マージ日時: 2026年07月13日 17:57:28(UTC)
- ラベル: area-CodeGen-coreclr
概要
構造体コピーから生成された非GCフィールドストアを既存のストア合成機能で統合できるように改善しました。GTF_IND_ALLOW_NON_ATOMICフラグをマークすることで、隣接する複数の8バイトストアを16バイトのSIMDストアに統合可能になり、コード生成を最適化します。
変更内容
- src/coreclr/jit/morphblock.cpp:
MorphCopyBlockHelper::CopyFieldByFieldで、非GCフィールドの間接ストア(STOREIND)にGTF_IND_ALLOW_NON_ATOMICフラグを設定 - src/coreclr/jit/promotiondecomposition.cpp: 同様にプロモーション分解時のストアにフラグを追加
- これにより、Loweringステージのストア合成処理が隣接ストアの合成を許可
パフォーマンスへの影響
改善あり。2つの8バイトストア命令が1つの16バイトSIMD命令(vmovups)に統合され、以下のように削減されます:
- 複数命令(
mov qword ptr×2)→ 単一SIMD命令(vmovups) - 命令数削減とメモリ転送の効率化によるスループット向上が期待できます
関連Issue
なし
その他
この変更は内部JIT実装(Morphing/Lowering段階)の最適化であり、公開APIに影響はありません。非GCフィールドのみが対象で、GCフィールドの原子性制約は保持されます。
#130532 cDAC review instructions: require doc updates for contract/data-descriptor changes
- 作成者: @max-charlamb
- 作成日時: 2026年07月10日 22:34:35(UTC)
- マージ日時: 2026年07月13日 14:33:39(UTC)
- ラベル: area-Diagnostics-cdac
概要
cDAC(CoreDAC)のCopilot PR-reviewerの指示を改善し、contract及びdata-descriptor変更時にドキュメント更新を必ずレビューで指摘するようにするもの。docs/design/datacontracts/<Name>.mdがcontractの仕様書(Abstractions/Contracts/I<Name>.csと1:1対応)であり、ドキュメント更新漏れによる仕様ドリフトを防ぐことが目的。
変更内容
- .github/instructions/cdac.instructions.md: Copilot reviewer指示の改善
applyToスコープを拡大:従来のsrc/native/managed/cdac/**に加え、docs/design/datacontracts/**とsrc/coreclr/**/datadescriptor/**を対象に追加- 「Documentation updates」セクションを新規追加:contract/data-descriptor変更時に必須のドキュメント更新パターンを明記
Abstractions/Contracts/I<Name>.csの変更(メソッド追加/削除/名前変更、公開型/Enum追加)Contracts/Contracts/<Name>_<N>.csの新規バージョンファイルまたは既存バージョンのアルゴリズム変更- 新しいcontract全体の追加
src/coreclr/**/datadescriptor/**の変更(関連アルゴリズムのドキュメント確認)
- 除外リスト明記(純粋なリファクタリング、テストのみ変更、復旧バグ修正、
Legacy/**、ビルド/CI関連)
パフォーマンスへの影響
影響なし
関連Issue
その他
- Copilotの指示ブロックは短くするほどレビュアーの対応が向上するため、ドキュメント更新セクションを意図的に簡潔(約11行)に設計
- このPR自体がGitHub Copilotの支援を受けて作成されている
#130508 Implement Decimal32/64/128 arithmetic and comparison operators
- 作成者: @tannergooding
- 作成日時: 2026年07月10日 17:50:47(UTC)
- マージ日時: 2026年07月13日 13:30:23(UTC)
- ラベル: area-System.Numerics
概要
System.NumericsのDecimal32/Decimal64/Decimal128型に対して、IEEE 754準拠の算術演算子と比較演算子を実装しました。これまではレイアウト、解析、フォーマット機能のみでしたが、本PRで完全な演算機能が追加されます。実装はIntel Decimal Floating-Point Math Libraryの参照実装に基づき、BID符号化形式で正規化された結果を生成します。
変更内容
- Decimal32/64/128.cs: 単項
+/-、加減算、乗除算、インクリメント/デクリメント、等価性・大小比較の各演算子を追加。すべてNumber.DecimalIeee754ヘルパーに委譲。 - Number.DecimalIeee754.cs: IEEE 754準拠の比較ロジックと、整数意義数レベルで動作する
bidNN_add/bidNN_mul/bidNN_div実装を追加(Intel参照実装に基づく)。ワイド除算ラウンディング補助関数WideDivideByTenも含む。 - System.Runtime ref surface: Decimal32/64/128の公開API仕様を更新。
- テスト: Decimal32/64/128Tests.csにテストベクトル(単項演算、加減算、比較、乗除算、インクリメント/デクリメント)を追加。DecimalIeee754IntelTestData.csに追加のテストデータを含む。
- THIRD-PARTY-NOTICES.TXT: Intel Decimal Floating-Point Math Library(BSD 3-Clause)のライセンス表記を追加。
パフォーマンスへの影響
影響なし(性能関連のベンチマーク結果は提供されていません)。
注記: WideDivideByTenはIntelの最適化テーブル(precomputed reciprocals)ではなく直接除算を使用しており、ソースコメントで将来の最適化対象として記載されています。
関連Issue
その他
- 実装はワード単位の整数意義数で演算し、有限値に対してIEEE 754推奨指数を持つ正規BID符号化結果を生成します。
- 非自明な算術処理(加減算、乗算、除算)は各メソッドにIntel参照実装への帰属ヘッダーを記載。
- ローカルテストでPython
decimalモジュール(ROUND_HALF_EVEN、clamp=1)による独立オラクルの大量ファジングベクトル(0件の失敗)に対して検証済み。 - GenAPI経由で
System.Runtimeref アセンブリを再生成(Decimalタイプのみ対象)。
#130504 [System.Net.NameResolution] Fall back to localhost when localhost. resolution fails
- 作成者: @liveans
- 作成日時: 2026年07月10日 16:59:57(UTC)
- マージ日時: 2026年07月13日 09:46:07(UTC)
- ラベル: area-System.Net
概要
System.Net.NameResolution の DNS 解決時に、一部の OS リゾルバーが完全修飾形式 localhost. の解決に失敗する問題に対応しました。localhost. が解決失敗またはアドレスを返さない場合に、RFC 6761 の既存フォールバック機構により localhost への自動フォールバックを行うように変更しました。
変更内容
src/libraries/System.Net.NameResolution/src/System/Net/Dns.cs
localhost.の解決失敗時にlocalhostへのフォールバック処理を追加- RFC 6761 準拠のフォールバック動作を拡張(既存の localhost サブドメイン動作は保持)
src/libraries/System.Net.NameResolution/tests/FunctionalTests/GetHostAddressesTest.cs
- テストケース微調整
src/libraries/System.Net.NameResolution/tests/FunctionalTests/GetHostEntryTest.cs
- テストケース微調整
パフォーマンスへの影響
影響なし (フォールバック処理は解決失敗時のみ実行されるため、通常の解決成功時パスには影響しません)
関連Issue
その他
なし
#130503 Select STJ member accessor based on IsDynamicCodeCompiled
- 作成者: @eiriktsarpalis
- 作成日時: 2026年07月10日 16:50:08(UTC)
- マージ日時: 2026年07月13日 08:06:19(UTC)
- ラベル: area-System.Text.Json
概要
System.Text.Json の MemberAccessor がアクセッサー選択基準を RuntimeFeature.IsDynamicCodeSupported から RuntimeFeature.IsDynamicCodeCompiled に変更します。これにより、動的コードが解釈実行のみのプラットフォーム(Mono インタープリター、WASM、iOS)では Reflection.Emit ベースのアクセッサーの約50KBが trimmer により削除され、JIT ベースのランタイムでは Reflection.Emit が保持されます。また、反射ベースの呼び出しで例外が TargetInvocationException でラップされる問題も修正します。
変更内容
- MemberAccessor.cs: アクセッサー選択ロジックを
IsDynamicCodeCompiledゲートに変更。CoreCLR/Mono JIT では Reflection.Emit、NativeAOT では Reflection、WASM/iOS ではリフレクションで Reflection.Emit は trim される - ReflectionMemberAccessor.cs: コンストラクタ・メソッド呼び出しを
InvokeNoWrapExceptionsヘルパー経由にしてユーザーコードの例外を直接伝播させる - ReflectionExtensions.cs:
InvokeNoWrapExceptionsヘルパーを追加(.NET ではBindingFlags.DoNotWrapExceptions、ダウンレベルはExceptionDispatchInfoポリフィル) - ExceptionTests.cs: リグレッション テストを追加。throwing getter/setter/constructor が元の例外(
TargetInvocationExceptionではなく)を伝播することを確認
パフォーマンスへの影響
WASM/iOS/Mono インタープリター プラットフォームでアセンブリサイズが約50KB削減されます。これらのプラットフォームでは Reflection.Emit が解釈実行されるためスループット向上がなく、トリミング不可能となっていた問題を解決。CoreCLR/Mono JIT では Reflection.Emit 使用は変わらずパフォーマンス影響なし。
関連Issue
その他
- 修正パターンは
Microsoft.Extensions.DependencyInjection(ActivatorUtilities、ServiceProvider)およびSystem.Text.RegularExpressionsで既に採用されている - リグレッション テストは
RemoteExecutorでIsDynamicCodeSupported=falseを強制することで両アクセッサーモード下での動作を検証 - 併伴修正として、NativeAOT で既に発生していた例外ラップ問題も解決
- テスト実行結果: 52710 パス(デフォルト)/ 52457 パス 48 スキップ(リフレクション強制)、失敗なし
#130477 Remove stale arcade#7585 comments in System.Net.Http
- 作成者: @Copilot
- 作成日時: 2026年07月10日 11:22:29(UTC)
- マージ日時: 2026年07月13日 13:04:51(UTC)
- ラベル: area-System.Net.Http
概要
System.Net.Http内の3ファイルで、arcade#7585に関連する古いコメントを削除しました。これらのコメントは[UnsupportedOSPlatform(...)]属性がコメントアウトされていると主張していましたが、実際には属性は存在・適用されているため、誤解を招く古いコメントを削除する変更です。
変更内容
src/libraries/System.Net.Http/ref/System.Net.Http.cs: arcade#7585関連のコメントブロック削除(4行)src/libraries/System.Net.Http/src/System/Net/Http/HttpClientHandler.cs: arcade#7585関連のコメントブロック削除(4行)src/libraries/System.Net.Http/src/System/Net/Http/HttpClientHandler.AnyMobile.cs: arcade#7585関連のコメントブロック削除(4行)
コメント削除のみで、プラットフォーム属性および周囲のコード自体への変更はなし。
パフォーマンスへの影響
影響なし
関連Issue
その他
コメントのみの変更であり、実装コードへの影響はありません。Send/SendAsyncオーバーロードの[UnsupportedOSPlatform(...)]属性は既に正しく適用されており、このPRはドキュメンテーション/メンテナンスの観点からの改善です。
#130469 Increase vectorized Tan test tolerance
- 作成者: @Copilot
- 作成日時: 2026年07月10日 10:24:07(UTC)
- マージ日時: 2026年07月13日 09:14:57(UTC)
- ラベル: area-Infrastructure
概要
System.Numerics.TensorsのTensorPrimitives.Tanメソッドに対するベクトル化/FMAコードパスでのテスト許容値(tolerance)を調整しました。ARM64 iOS環境でスカラー実装と比較して精度誤差が大きくなるため、専用のFMA許容値を導入しました。double型で3e-13、float型で1e-4fに設定されています。
変更内容
- src/libraries/System.Numerics.Tensors/tests/TensorPrimitives.Generic.cs
- FMA経路用のtrigonometric許容値をFMA
doubleに対して1e-14から3e-13に引き上げ Tanテスト用に専用のtanToleranceを導入し、一般的なtrig許容値とは別管理に変更- スカラー
T.Tanとの実装差分を考慮した許容値設定(ARM64 iOSで最大約1.72e-13double、8.09e-5float の誤差を観測)
- FMA経路用のtrigonometric許容値をFMA
パフォーマンスへの影響
影響なし(テスト許容値の調整のみ、実装ロジックへの変更なし)
関連Issue
その他
- 共通のtrigonometric許容値および非FMA許容値は変更されません
- 変更は内部テストコードのみで、公開APIへの影響なし
#130468 [clr-ios] Disable R2R IL-body stripping for more library tests that need IL at run time
- 作成者: @kotlarmilos
- 作成日時: 2026年07月10日 10:04:01(UTC)
- マージ日時: 2026年07月13日 11:30:23(UTC)
- ラベル: area-Infrastructure
概要
Apple mobile CoreCLRのReadyToRun(R2R)イメージにおいて、IL本体ストリッピングにより実行時にILが必要なテストが失敗する問題に対応しました。3つのライブラリテストプロジェクトで PublishReadyToRunStripILBodies を false に設定し、IL本体を保持することで、実行時IL検査/実行に依存するテストの失敗を防ぎます。
変更内容
- System.Runtime.Extensions.Tests.csproj:
PublishReadyToRunStripILBodiesをfalseに設定。AppDomainTests.ExecuteAssemblyでストリップされたエントリポイント実行時のInvalidProgramExceptionを回避。 - System.IO.Hashing.Tests.csproj:
PublishReadyToRunStripILBodiesをfalseに設定。Crc64ParameterSet.ForwardCrc64.InitializeVectorizedのVector128イントリンシック フォールバック実行時の失敗を回避。 - System.Diagnostics.StackTrace.Tests.csproj:
PublishReadyToRunStripILBodiesをfalseに設定。ToString_AsyncのV2Methods.Quuux実行時の問題を解決。 - ILCompiler.ReadyToRun関連: R2RテストスイートにILストリッピング関連テストケースを追加、および
CopiedMethodILNode.csでストリッピング時のIL処理ロジックを改善。
パフォーマンスへの影響
該当テストプロジェクトではIL本体がR2Rイメージに含まれるため、イメージサイズがわずかに増加する可能性があります。ただし、この変更は対象テストプロジェクトのみに限定されており、その他のApple mobile CoreCLRテストアプリではILストリッピングが引き続き有効です。
関連Issue
その他
このPRは #130360 のフォローアップです。SDKはApple mobile CoreCLRコンポジットR2RイメージからデフォルトでIL本体をストリップし、各本体を無効なスタブで置き換えるため、実行時に実ILが必要なテストが失敗していました。本変更により、ストリッピング対象プロジェクトを明示的に制御し、必要なテストのみIL本体を保持する方式になります。
#130462 Skip host tests in s390x and ppc64le cross-builds
- 作成者: @matouskozak
- 作成日時: 2026年07月10日 05:13:24(UTC)
- マージ日時: 2026年07月13日 00:13:34(UTC)
- ラベル: area-Infrastructure-mono arch-s390x arch-ppc64le
概要
s390x と ppc64le のクロスビルドにおいて、host サブセット展開時に不要な host.pretest と host.tests が含まれ、未発行のターゲットアーキテクチャ用 apphost パックの復元が発生していた問題を修正します。ホスト製品サブセットを明示的に指定(host.native+host.tools+host.pkg)することで、ホスト製品のカバレッジを維持しつつ不要なホストテストの復元を回避します。
変更内容
eng/pipelines/runtime-community.yml: runtime-community パイプラインの s390x/ppc64le Mono "AllSubsets" ビルド設定を更新mono+libs+host+...からmono+libs+host.native+host.tools+host.pkg+...に変更- ホストテストサブセット(
host.pretest/host.tests)の暗黙的な包含を排除
パフォーマンスへの影響
影響なし(ビルド対象の明示的な絞り込みにより、不要なパッケージ復元を削減し、ビルド効率が向上する可能性あり)
関連Issue
その他
なし
#130422 JIT: Fold insertps chains that source a scalar extracted from another vector
- 作成者: @tannergooding
- 作成日時: 2026年07月09日 17:47:27(UTC)
- マージ日時: 2026年07月13日 13:23:53(UTC)
- ラベル: area-CodeGen-coreclr
概要
x64/x86 JITでSse41.Insert(insertps命令)の最適化を追加。スカラー値が別のベクトルから抽出されるパターンを検出し、個別の抽出操作を排除して単一のinsertps命令に折り畳みます。insertpsのcount_sフィールド(imm8の6-7ビット)でソース要素を直接選択するため、movshdup/unpckhps/shufpsなどの追加命令が不要になります。
折り畳み対象パターン:
Insert(vector, CreateScalarUnsafe(vector2.GetElement(idx1)), idx2)
を単一のinsertpsに最適化
変更内容
- src/coreclr/jit/lowerxarch.cpp:
NI_X86Base_Insertの低レベル化パスにCreateScalarUnsafe(GetElement(...))ソースの折り畳みロジックを追加(+75行) - src/tests/JIT/opt/Vectorization/InsertScalarFromVector.cs: インデックスの組み合わせ、チェーン挿入、
Vector256<float>ソースなど網羅的なテストケースを追加(+179行) - src/tests/JIT/opt/Vectorization/InsertScalarFromVector.csproj: テスト用プロジェクトファイルを新規追加(+8行)
適用条件: 4バイト要素型(float、int、uint)で、ソースベクトルの最初の4レーンのいずれかから抽出する場合のみ。メモリオペランドソースの場合は既存の最適化で最適なinsertps xmm, m32が生成されるため、レジスタフォームのみ折り畳み対象。
パフォーマンスへの影響
改善: SuperPMI asmdiffs(Windows x64)で-141バイト、18メソッド改善、0メソッド悪化(PerfScoreは改善のみ)
| Collection | コード削減 | 改善メソッド数 | PerfScore改善率 |
|---|---|---|---|
| libraries.crossgen2 | -29バイト | 5 | -8.31% |
| libraries.pmi | -8バイト | 2 | -7.68% |
| libraries_tests_no_tiered | -104バイト | 11 | -0.88% |
代表的な改善: Matrix4x4.CreateScale, Matrix3x2.CreateScale, Vector3.Reflect, Vector2.Reflect, Quaternion.Lerpなど
関連Issue
なし
その他
- GitHub Copilotの支援を受けて作成されたPR
- 回帰テストでレジスタ/メモリソース、チェーン挿入、ワイドソース(
Vector256)を全インデックスで検証 - 広いベクトル(
Vector256/Vector512)ソースはGetLower/GetUpperで128ビットチャンク化されるため、正しい低128ビット部分が自動的に材料化される
#130394 [wasm] Emit webcil-in-wasm component stubs for composite R2R
- 作成者: @lewing
- 作成日時: 2026年07月09日 03:06:21(UTC)
- マージ日時: 2026年07月13日 17:35:18(UTC)
- ラベル: arch-wasm area-crossgen2-coreclr
概要
Composite ReadyToRun (R2R) ビルドでのWasm対応を修正するPRです。従来、コンポーネントスタブのコンテナ形式がPEに硬化されていたため、Wasm向けのComposite crossgen2ビルドが失敗していました。本修正により、Wasmターゲット向けにはWebcil-in-Wasmフォーマットでスタブを出力し、PE/Appleターゲットは従来通りPE形式で出力するようになります。
変更内容
- src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/ReadyToRunCodegenCompilation.cs:
RewriteComponentFileメソッドでコンポーネントスタブのコンテナ形式を動的に決定。Wasmターゲットの場合はReadyToRunContainerFormat.Wasmを使用し、<assembly>.wasmとして出力。非Wasmターゲットは従来通りPE形式で出力。
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 問題の背景: Composite R2Rビルドでは各入力アセンブリを小さいコンポーネントスタブにリライトします。これまでコンテナ形式がPEに硬化されていたため、Wasm32アーキテクチャ対応の
CoffObjectWriterが例外をスローし、composite-r2r.wasmイメージの出力後にビルドが失敗していました。 - 修正スコープ:
RewriteComponentFileと出力パス選択に限定した小規模な変更(+13/-2)。非Wasm環境の動作は変わりません。 - 検証: Wasi/Browser向けのcompositeビルドで
composite-r2r.wasmとWebcil-in-Wasmスタブが正常に生成され、wasm-tools validateでも検証済み。
#130381 Suppress DOTNET_GCHeapAffinitizeRanges during crossgen2 execution
- 作成者: @jtschuster
- 作成日時: 2026年07月08日 21:59:23(UTC)
- マージ日時: 2026年07月13日 14:24:54(UTC)
- ラベル: area-ReadyToRun Priority:1
概要
crossgen2実行時にDOTNET_GCHeapAffinitizeRangesが継承されることで、Windowsで無効なアフィニティ設定(bare "1"値)がGC初期化時に解析され、CLR_E_GC_BAD_AFFINITY_CONFIG_FORMAT エラーで crossgen2がクラッシュ(exit -1)する問題を修正します。GetConfigurationVariablesテストの環境変数をcrossgen2の環境変数抑制リストに追加し、ビルドツールがテスト環境のGC設定を継承しないようにします。
変更内容
- src/tests/Common/CLRTest.CrossGen.targets: DOTNET_GCHeapAffinitizeRanges を crossgen2実行時の抑制対象環境変数リストに追加
- Bashスニペット内の抑制変数リストに追加
- Windows batch内の setlocal スコープの クリア対象変数に追加(crossgen2/R2RDump呼び出し時)
パフォーマンスへの影響
影響なし
関連Issue
その他
- 既存の DOTNET_GCName、GCStress、HeapVerify、ReadyToRun 環境変数と同じ抑制メカニズムを適用
- 変更対象は内部テスト基盤(src/tests)のビルド設定ファイル
#130356 [release/8.0-staging] [QUIC] Update MsQuic to the latest 2.5 version
- 作成者: @ManickaP
- 作成日時: 2026年07月08日 13:23:45(UTC)
- マージ日時: 2026年07月13日 22:29:08(UTC)
- ラベル: Servicing-approved area-System.Net.Quic
概要
MsQuic ネイティブ依存関係をバージョン 2.4.18 から 2.5.9 にアップデートするバックポート。MsQuic 2.4 ブランチがサポート終了となるため、QUIC/HTTP3 を使用するアプリケーションをアクティブにサポートされている 2.5 ブランチに移行し、セキュリティ更新とバグ修正を継続的に受け取ることが目的。
変更内容
eng/Versions.props:MicrosoftNativeQuicMsQuicSchannelVersionを2.4.18から2.5.9にアップデート(1 行変更)
パフォーマンスへの影響
影響なし
関連Issue
#130173(main ブランチの対応 PR)
その他
- 対象ブランチ: release/8.0-staging(バックポート)
- リスク評価: 低リスク。ネイティブ依存関係のバージョン更新のみで、既にリリースされ、アクティブにサポートされている MsQuic 2.5.x パッケージを消費するもの
- テスト: 標準 CI(System.Net.Quic および HTTP/3 テストスイート)で検証済み
- 重要性: MsQuic 2.4 がサポート終了となるため、セキュリティとサポートの観点から必須のアップデート
#130355 [release/9.0-staging] [QUIC] Update MsQuic to the latest 2.5 version
- 作成者: @ManickaP
- 作成日時: 2026年07月08日 13:23:36(UTC)
- マージ日時: 2026年07月13日 22:28:58(UTC)
- ラベル: Servicing-approved area-System.Net.Quic
概要
MsQuic(Windows QUIC ネイティブライブラリ)をバージョン 2.4.18 から 2.5.9 にアップデートするバックポート PR です。MsQuic 2.4 ブランチはサポート終了が予定されており、セキュリティとバグ修正を含む現在サポートされている 2.5 ブランチへの移行が必要です。
変更内容
- eng/Versions.props
MicrosoftNativeQuicMsQuicSchannelVersionを2.4.18から2.5.9に更新
パフォーマンスへの影響
影響なし(ネイティブ依存関係のマイナーバージョン更新)
関連Issue
- メイン PR: #130173
その他
- セキュリティ関連: MsQuic 2.4 がサポート終了となるため、セキュリティアップデートを受け取るための必須更新です
- テスト: System.Net.Quic および HTTP/3 テストスイートで標準 CI による検証済み
- リスク評価: 低(単一のバージョンプロパティ変更で、既に出荷されている安定版パッケージへの更新)
- スコープ: release/9.0-staging ブランチへのバックポート
#130269 Improve Certificate Policy tests
- 作成者: @bartonjs
- 作成日時: 2026年07月06日 23:18:20(UTC)
- マージ日時: 2026年07月13日 20:14:03(UTC)
- ラベル: area-System.Security
概要
X.509証明書ポリシーテストの充実と、ポリシーマッピング抑止(policy mapping inhibition)の深さ追跡における既存バグの修正。テストチェーン生成ロジックを拡張し、より複雑なシナリオ(4証明書チェーン、中間証明書ごとの拡張機能セット)に対応して、Windows OSのネイティブ動作との一致を検証します。
変更内容
- CertificatePolicy.cs: ポリシーマッピング抑止処理における深さカウント減少ロジックのバグ修正(1行変更)
- DynamicChainTests.cs: テーブル駆動型の証明書ポリシーマッピング・制約テストケースを追加、
TestChain4ヘルパーメソッドを新規実装(354行追加) - TestDataGenerator.cs: 中間証明書ごとの拡張機能セットを指定可能な
MakeTestChainオーバーロードを追加(37行追加、10行変更)
パフォーマンスへの影響
影響なし(テスト品質向上のみ)
関連Issue
その他
- Windows OS APIに対する薄いプロジェクション層として機能するため、ネイティブWindowsの動作が要件定義となる
- テスト拡張により、ポリシー制約エッジケースのカバレッジを強化
- クロスプラットフォーム環境でのチェーン検証ポリシー動作の妥当性を検証
#130238 Fix marshaller signature parameter index handling
- 作成者: @Copilot
- 作成日時: 2026年07月06日 07:35:52(UTC)
- マージ日時: 2026年07月13日 05:42:28(UTC)
- ラベル: area-ReadyToRun
概要
マーシャリング処理でスパースなパラメータメタデータ時に、カスタム修飾子の検索に誤ったパラメータインデックスを使用していた問題を修正しました。コピーコンストラクタのカスタム修飾子がメタデータ欠落時に間違ったパラメータに対して評価される問題を解決します。
変更内容
- Marshaller.cs: マーシャラー生成時にシグネチャパラメータインデックスをカスタム修飾子検索に正しく渡すよう修正(共有マーシャリングパス)
- PInvokeILEmitter.cs: P/Invoke IL スタブパスにおいても同様の修正を適用
- CopyCtorTest.cs / CopyCtorUtil.il: コピーコンストラクタパラメータが空のパラメータメタデータを持つケースの回帰テストを追加
パフォーマンスへの影響
影響なし
関連Issue
その他
この修正は内部実装(Interop マーシャリング)の変更であり、公開APIへの直接的な影響はありません。ただし、スパースなメタデータを含むコピーコンストラクタを使用するP/Invoke呼び出しの正確さが向上します。
#130234 [main] Update dependencies from dotnet/xharness
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年07月06日 05:02:02(UTC)
- マージ日時: 2026年07月13日 10:49:07(UTC)
- ラベル: area-codeflow
概要
dotnet/xharnessの依存パッケージを更新するPull Requestです。XHarness関連のNuGetパッケージ(CLI、TestRunners)を11.0.0-prerelease.26319.2から11.0.0-prerelease.26360.1にアップデートしています。
変更内容
.config/dotnet-tools.json: dotnet toolsのバージョン更新eng/Version.Details.props: バージョン情報の更新(3行変更)eng/Version.Details.xml: バージョン詳細情報の更新(6行変更)
更新されたパッケージ:
- Microsoft.DotNet.XHarness.CLI
- Microsoft.DotNet.XHarness.TestRunners.Common
- Microsoft.DotNet.XHarness.TestRunners.Xunit
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 自動依存更新(dotnet-maestroによるサブスクリプション駆動)
- xharnessのmainブランチからの定期更新(2026年7月10日時点のビルド20260710.1に基づく)
#130122 [wasm] Bump chrome for testing - linux: 150.0.7871.46, windows: 149.0.7827.201, mac: 149.0.7827.201
- 作成者: @github-actions[bot]
- 作成日時: 2026年07月02日 11:43:49(UTC)
- マージ日時: 2026年07月13日 08:28:49(UTC)
- ラベル: arch-wasm area-Infrastructure-mono
概要
WebAssembly (WASM) テスト環境で使用される Chrome のバージョンを更新するPull Requestです。Linux は 150.0.7871.46 に、Windows と macOS は 149.0.7827.201 に更新されています。
変更内容
- eng/testing/BrowserVersions.props: Chrome バージョン定義を更新(6行追加/削除)
- src/tasks/WasmBuildTasks/UpdateChromeVersions.cs: Chrome バージョン更新ツールのロジックを修正(38行追加/33行削除)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このPR はbot による自動更新です。WASM テスト環境における Chrome の互換性維持のための定期的なメンテナンスです。
#130087 [ci-scan] Add evaluation infrastructure for the CI failure agentic workflows
- 作成者: @kotlarmilos
- 作成日時: 2026年07月01日 15:50:25(UTC)
- マージ日時: 2026年07月13日 18:36:15(UTC)
- ラベル: area-Infrastructure
概要
CI外側ループのエージェントワークフロー(ci-failure-scan、ci-failure-fix、ci-failure-scan-feedback)を評価するための基盤を構築します。Vallyを使用した評価インフラストラクチャを追加し、PR上でスラッシュコマンド(/ci-scan eval、/ci-fix eval、/ci-feedback eval、/ci-eval)を実行することで、エージェントが実際のCI失敗データに対して動作し、生成された結果を評価するレポートを返します。
変更内容
- ci-eval.yml: Issue commentトリガーで動作するワークフローで、スラッシュコマンドから対応する評価スペックを選択し、Vallyの lint と eval を実行してPRにレポートコメントを投稿
- ci-failure-scan.eval.yaml: スキャナーワークフロープロンプトと評価ロジック(ファイル正規表現とLLM判定)を定義するVally評価スペック
- ci-failure-fix.eval.yaml: フィクサーワークフロープロンプトと評価ロジック(ティアポリシー適用と「テスト無効化禁止」の検証)を定義するVally評価スペック
- ci-failure-scan-feedback.eval.yaml: フィードバック/KPIトラッカー再生成プロンプトと評価ロジック(根拠づけと完全性の検証)を定義するVally評価スペック
- .vally.yaml: Vally設定ファイル(評価スペックディレクトリとファイル名パターン指定)
- fixtures/: スキャン、フィックス、フィードバック用の固定データディレクトリプレースホルダー
- package.json/package-lock.json: Node.js依存関係管理ファイル
パフォーマンスへの影響
影響なし(評価インフラストラクチャの追加のみ。既存のワークフローロジックは変更されない)
関連Issue
その他
- 本変更は既存のCI外側ループワークフロー自体を変更していません
- 評価はオンデマンド実行(スラッシュコマンドトリガー)で、必須CI要件には組み込まれていません
- 評価はフォーマットと動作の検証(形式チェックと0.7閾値のLLM判定の混合)であり、グラウンドトゥルース測定は後回しです
#130012 Fix NativeAOT assembly name mangling collisions
- 作成者: @Copilot
- 作成日時: 2026年06月30日 01:13:40(UTC)
- マージ日時: 2026年07月13日 05:01:45(UTC)
- ラベル: area-NativeAOT-coreclr
概要
NativeAOTにおいて、異なるアセンブリ名が同じC識別子にサニタイズされる場合に重複したマングル名が生成され、ILCompilerが重複キー例外で失敗する問題を修正しました。コンパイラコンテキストの入出力アセンブリ名から決定的にマングルされたアセンブリ名プレフィックスを計算し、System.Private.*の従来のマングル形式(S.P.*)を保持しつつ、その他のアセンブリ名には既存の曖昧性解決機構を適用します。
変更内容
- NativeAotNameMangler.cs: マングルされたアセンブリプレフィックスの決定的なキャッシング機構を追加。アセンブリ簡易名文字列をキーとしてマングルプレフィックスを管理し、全参照アセンブリをロードせずに競合を解決。マングルされた型名生成時にこの新しいプレフィックスを使用。
- Runtime112629回帰テスト:
A.BとA_Bという競合するアセンブリ名を参照する3つのアセンブリプロジェクト(メインテスト、AssemblyWithDot、AssemblyWithUnderscore)を追加。各ヘルパーアセンブリは対応する型定義を提供し、正しいバインディングを検証。
パフォーマンスへの影響
影響なし
関連Issue
その他
- 本変更は内部実装(ILCompilerのネイティブAOTコンパイルフェーズ)の修正で、公開APIへの影響はありません。
- 回帰テストはCollisionシナリオを端末から実行可能な形式で検証(
src/tests/nativeaot/Regressions/Runtime112629/配下)。 System.Private.*アセンブリの既存マングル規則(S.P.*)は保持されるため、既存NativeAOTアプリケーションへの互換性に影響はありません。
#129866 Use no-op MD Importer for DIA-backed stacktraces
- 作成者: @hoyosjs
- 作成日時: 2026年06月25日 19:18:31(UTC)
- マージ日時: 2026年07月13日 03:27:43(UTC)
- ラベル: area-VM-coreclr
概要
Classic PDB(DIA)でのスタックトレース解決時に、メタデータインポーターの実体化を回避するため、プロセス全体で共有可能なno-op実装 NoopMetadataImport を導入しました。これにより、RW-backed メタデータアクセスへの遷移とそのロック競合を削減し、特にPDBが存在しない Full PDB シナリオでのパフォーマンスを大幅に向上させます。
変更内容
- noopmetadataimport.cpp/h:
IMetaDataImport2を実装するシングルトンNoopMetadataImportを新規追加。QI はIUnknown/IMetaDataImport/IMetaDataImport2をサポートし、AddRef/Release はno-op、メタデータAPI呼び出しは Checked/Debug で assert、Release でE_NOTIMPLを返却。 - ceeload.cpp:
Module::GetISymUnmanagedReaderを変更し、ISymUnmanagedBinder::GetReaderFromStream/GetReaderForFileにモジュールの実メタデータインポーターの代わりにNoopMetadataImport::GetInstance()を渡すよう修正。 - corpriv.h: forward declaration を追加。
- CMakeLists.txt: ビルドシステムにno-opインポーター実装を統合。
- テスト関連ファイルの調整(IJWテスト、FullPdbStackTrace テスト追加など)。
パフォーマンスへの影響
ターゲットシナリオ(Full PDB + PDB未検出)で大幅な改善を実現:
- Full PDB + PDB未検出: 10,848 → 26,381 exceptions/sec(2.43倍向上)
- Portable PDB + PDB未検出: 35,843 → 36,545 exceptions/sec(1.02倍、ほぼ変化なし)
- Portable PDB + PDB存在: 14,115 → 14,264 exceptions/sec(1.01倍、ほぼ変化なし)
- Full PDB + PDB存在: 865 → 855 exceptions/sec(0.99倍、ほぼ変化なし)
非対象シナリオへの影響は最小限に留まり、ロック競合が顕著だったシナリオで顕著な改善を達成。
関連Issue
その他
NoopMetadataImportはプロセス有効期限のシングルトンで、モジュール固有の状態を持たないため、collectible lifetime による管理対象外。- バインダーはnon-null メタデータインポーターインターフェイスを要求するが、スタックトレース/ソース行取得の in-proc パスはそのインポーターからのメタデータシグネチャ情報を実際には必要としない設計に基づいた最適化。
#129852 Remove 128-bit limit on Vector<T> size for ARM64
- 作成者: @snickolls-arm
- 作成日時: 2026年06月25日 14:06:22(UTC)
- マージ日時: 2026年07月13日 08:35:10(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
ARM64プラットフォームにおいて、Vector<T>のサイズに対する128ビットの制限を削除し、SVE(Scalable Vector Extension)に対応させます。InstructionSet_VectorTが利用可能な場合、クラスインスタンスサイズをプロセスのSVEベクトル長に設定し、JITがISA(命令セットアーキテクチャ)の存在を検出できるようstructMightRepresentSIMDTypeの最大境界値を拡張します。
変更内容
- compiler.h/cpp: JIT内でのベクトルサイズ制限の引き上げ
- methodtablebuilder.cpp: ARM64でのSVEベクトル長に基づくメソッドテーブルビルド時のインスタンスサイズ設定(13行追加)
- importer.cpp: インポート処理でのSIMD型検出ロジック調整(11行追加、19行削除)
- codeman.cpp: コード管理でのベクトルサイズ処理更新
- valuenum.cpp: 値番号付け処理の簡略化(5行削除)
- simd.cpp, lclvars.cpp, morph.cpp, targetarm64.h: 各モジュールでのベクトルサイズ上限値の更新
パフォーマンスへの影響
SVEに対応することで、ARM64システムにおいてより大きなベクトルサイズ(256ビット以上)を活用でき、メモリ効率やスループットが向上する可能性があります。詳細なベンチマーク結果は提供されていません。
関連Issue
その他
ARM64のSVE機能を活用するための内部実装変更であり、公開APIへの直接的な影響はありません。既存の128ビット制限に依存するコードは、より大きなベクトルサイズへの対応が必要になる可能性があります。
#128449 JIT: Misc if-conversion
- 作成者: @BoyBaykiller
- 作成日時: 2026年05月21日 13:35:30(UTC)
- マージ日時: 2026年07月13日 10:25:17(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
JITコンパイラのif-conversion最適化を改善するPRです。GT_SELECTノードが浮動小数点数に対応し、式の条件付き折り畳みを活用できるようになりました。また、32ビット環境でのbailoutを最適化後に延期することで、より多くの最適化の恩恵を受けられるようになっています。
変更内容
- gentree.h: GT_SELECTに対する等価性比較(
GenTreeSelect::Equals)を追加(5行追加) - gentree.cpp: GT_SELECTのサポート機能を追加(3行追加)
- ifconversion.cpp:
- GT_SELECTを浮動小数点数に対応(ただし最適化段階のみ、コード生成には使用しない)
gtFoldExprConditional呼び出しを追加して条件式の簡易折り畳みを実施- 32ビット環境のbailout処理を最適化後に移動(28行追加、15行削除)
パフォーマンスへの影響
影響なし(変更内容の性質上、パフォーマンス改善の詳細データなし)
関連Issue
なし
その他
- この変更は段階的な改善の一部です。浮動小数点GT_SELECTの利用は現在のところ最適化フェーズに限定されており、コード生成段階では使用されません
gtFoldExprConditionalの呼び出しにより、単純な条件式の自動折り畳みが可能になります- 32ビット環境でも最適化の利益を得られるよう設計されています