Pull Request on 2026年08月21日

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

注意点

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


目次

  1. #132638 [release/11.0-rc1] Fix synchronous cancellation race in Channels
  2. #132630 Use acquire reads for cast cache entries
  3. #132623 Remove unused entries from Version.Details.xml
  4. #132622 [release/11.0-rc1] Fix transition from monomorphic to polymorphic VSD
  5. #132608 Bump JobMonitor to 11.0.0-beta.26421.1
  6. #132607 Remove cDAC fallback testing mode
  7. #132603 Remove unnecessary NoWarn for CS9368
  8. #132601 Mark ProcessArchitecture as NonVersionable
  9. #132598 [release/11.0-rc1] Ensure BackgroundService invokes ExecuteAsync after start
  10. #132593 [release/11.0-rc1] Fix hang in InvalidClientRequestTests by guarding oversized Content-Length cases to managed implementation
  11. #132589 Restore TPA duplicate precedence to keep managed DLLs over native EXEs
  12. #132582 [release/11.0] Improve StringBuilder.ToString() exception message for inconsistent state
  13. #132578 [release/11.0] Make DegreesToRadians and RadiansToDegrees correctly rounded
  14. #132577 [release/11.0-rc1] Widen the internal Number.BigInteger buffer to nuint
  15. #132571 [release/11.0] Fix confusing exception message in Dictionary.CopyTo when index exceeds array length
  16. #132569 JIT: speed up fgDebugCheckNodesUniqueness and drop dead morphTrees arg
  17. #132544 Fix transition from monomorphic to polymorphic VSD
  18. #132537 [release/11.0-rc1] Fix CrossGen2 TypeMap blob-only type references
  19. #132536 JIT: Mark GT_LCLHEAP with GTF_CALL and GTF_GLOB_REF
  20. #132530 Fix LibraryImport QCall signature mismatches
  21. #132529 Replace debugger PAL waits with cross-platform wait types
  22. #132511 JIT: Simplify containment and NOP checks
  23. #132476 [release/11.0-rc1] Fix DeflateEncoder.GetMaxCompressedLength conservative bound
  24. #132455 Don't report unsupported types for never bound properties
  25. #132439 Fix NativeAOT RVA field handle scanning
  26. #132438 [automated] Merge branch 'release/11.0-rc1' => 'release/11.0'
  27. #132414 [release/11.0-rc1] Use stable net/netframework folders for the mono SDK tasks
  28. #132395 JIT: fix switch peeling stealing the wrong operand of its compare
  29. #132379 [release/11.0] Make the Nullable<T>.Value exception message actionable
  30. #132373 Make LegacyPropagator list sort linear
  31. #132368 Avoid allocations propagating Activity baggage
  32. #132241 Ensure BackgroundService invokes ExecuteAsync after start
  33. #132230 Fix synchronous cancellation race in Channels
  34. #132082 Remove unneeded DebuggerU2MCatchHandleFrames
  35. #131972 Remove a few unsafe blocks from Decimal.DecCalc.cs
  36. #131686 Add reproZero NativeAOT compiler project
  37. #131278 [release/10.0] Fix handling of non-ASCII data in CBOR indefinite strings
  38. #131184 Clean up ifdef in vxsort

#132638 [release/11.0-rc1] Fix synchronous cancellation race in Channels

概要

Channels ライブラリの同期キャンセレーション競合状態を修正するバックポートです。AsyncOperation.cs と ChannelUtilities.cs でキャンセレーション処理の同期化ロジックが改善され、BoundedChannelTests.cs に新しいテストケースが追加されました。

変更内容

  • AsyncOperation.cs: キャンセレーション時の競合状態を修正するため、同期化ロジックを強化(+10/-9)
  • ChannelUtilities.cs: キャンセレーション関連のユーティリティ処理を改善(+8/-1)
  • BoundedChannelTests.cs: 同期キャンセレーション競合状態に関するテストケースを新規追加(+47行)

パフォーマンスへの影響

影響なし

関連Issue

#132230

その他

本PRは release/11.0-rc1 ブランチへのバックポートです。元の修正は別のPRで実装され、その修正内容をRC1向けにバックポートしています。


#132630 Use acquire reads for cast cache entries

概要

キャスト キャッシュのルックアップパスにおいて、ARM64上の明示的な読み取りバリア(dmb ishld)を、ソース・ターゲット/結果フィールドのacquire読み取りに置き換え、パフォーマンスを改善します。バージョン検証の必要な順序付けは維持されます。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/CastCache.cs: CastCache.TryGetメソッドで、通常の読み取りに続くVolatile.ReadBarrier()呼び出しをacquire読み取り操作に変更。ペイロードフィールドの読み取りをacquire操作化することで、スタンドアロンバリアを削除。

パフォーマンスへの影響

ARM64での改善: ホットパスであるdmb ishld命令を削除。生成されるコードが以下のように変化:

  • 変更前: 通常のldr命令 + dmb ishld
  • 変更後: acquire読み取り(ldapr/ldapur)のみ

x64では揮発性読み取りに追加ハードウェア命令が不要なため影響なし。32コアARM64環境でのテストにおいて、dmb ishldがボトルネックであったため改善が期待できます。

関連Issue

なし

その他

⚠️ 重要な指摘: Copilotレビューで言及されている通り、本変更はmanaged実装のCastCache.TryGet(NativeAOTで使用)のみを対象としており、CoreCLRネイティブ実装(src/coreclr/vm/castcache.cpp)は未更新のため、CoreCLR上ではARM64バリアが依然発生します。スコープの不整合が指摘されています。


#132623 Remove unused entries from Version.Details.xml

  • 作成者: @akoeplinger
  • 作成日時: 2026年08月21日 14:33:53(UTC)
  • マージ日時: 2026年08月21日 15:22:25(UTC)
  • ラベル: area-codeflow

概要

Version.Details.xmlから不要な依存関係エントリを削除するメンテナンス変更です。Microsoft.DotNet.XunitAssert(dotnet/arcadeで削除済み)とHotReloadUtils(runtime内で統合済み)の古い依存メタデータを削除し、整理整頓を行います。

変更内容

  • eng/Version.Details.xml: Microsoft.DotNet.XunitAssertとHotReloadUtilsの2つの依存エントリを削除(-8行)
  • eng/Version.Details.props: 対応するバージョンプロパティを削除(-6行)
  • eng/Versions.props: Microsoft.DotNet.XunitAssertのバージョン定義を追加(+2行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • Microsoft.DotNet.XunitAssertは依然として参照が存在するため、Versions.propsにバージョン定義を残す対応がされています
  • HotReloadUtilsは#126512でruntimeに統合済みのため完全削除
  • この変更は依存関係メタデータのクリーンアップで、実装に直接的な影響はありません

#132622 [release/11.0-rc1] Fix transition from monomorphic to polymorphic VSD

概要

Virtual Stub Dispatch (VSD)がmonomorphicからpolymorphicへの遷移時に、ARM64で無限にmispredictionに陥る問題を修正。ARM64の実装がx64と一貫性を欠いていたため、共有されたmisprediction counterへの書き込みがキャッシュコヒーレンスオーバーヘッドを引き起こし、多コアマシンのスケーラビリティを制限していた。本修正により、ARM64(およびその他のアーキテクチャ)がx64と同じロジックを使用するようになる。

変更内容

  • src/coreclr/vm/arm64/virtualcallstubcpu.hpp: VSD遷移ロジックを修正し、x64の実装と一貫性を取った(+8/-4)
  • src/coreclr/vm/arm/stubs.cpp: ARM向けVSDスタブの実装を調整(+13/-8)
  • src/coreclr/vm/loongarch64/virtualcallstubcpu.hpp: LoongArch64向けのVSD遷移ロジックを同期(+9/-7)
  • src/coreclr/vm/riscv64/virtualcallstubcpu.hpp: RISC-V 64向けのVSD遷移ロジックを同期(+9/-7)

パフォーマンスへの影響

改善あり。ARM64の32コアハードウェアで実測済み。misprediction counterの共有書き込みによるキャッシュコヒーレンスオーバーヘッドが削減され、多コアマシンでのスケーラビリティが向上。具体的な改善率の数値は提供されていない。

関連Issue

#132544

その他

  • 本変更はrelease/11.0-rc1へのバックポート
  • ARMファミリー(ARM、ARM64、LoongArch64、RISC-V 64)全体で実装ロジックの統一化を実施
  • リスク評価: 低(ARM64などのアーキテクチャがx64と同じロジックを採用)
  • 顧客報告の事象に基づく修正

#132608 Bump JobMonitor to 11.0.0-beta.26421.1

  • 作成者: @premun
  • 作成日時: 2026年08月21日 09:44:36(UTC)
  • マージ日時: 2026年08月21日 13:45:25(UTC)
  • ラベル: area-codeflow

概要

JobMonitorツールを11.0.0-beta.26421.1にアップデートします。このアップデートはdotnet/arcadeリポジトリの関連変更に対応するものです。

変更内容

  • .config/dotnet-tools.json: JobMonitorのバージョンを更新
  • eng/Version.Details.props: バージョン情報を更新
  • eng/Version.Details.xml: バージョン詳細情報を更新(3行分の変更)

パフォーマンスへの影響

影響なし

関連Issue

dotnet/arcade#17371

その他

なし


#132607 Remove cDAC fallback testing mode

  • 作成者: @noahfalk
  • 作成日時: 2026年08月21日 09:30:35(UTC)
  • マージ日時: 2026年08月21日 17:24:37(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC検証モードの強化に伴い、cDAC fallbackテスト用パイプラインを削除し、fallback動作を明示的なallowlist方式のみに統一するPRです。dotnet/diagnostics側の変更後、cDAC_verifyが唯一の「レガシーDACとの比較」テストモードとして機能します。

変更内容

  • LegacyFallbackHelper.cs: CDAC_NO_FALLBACK環境変数の削除とfallback決定をallowlistのみに依存させる実装に変更。標準エラーへのログ出力機能も搭載。
  • runtime-diagnostics.yml: cDAC_fallback SOS テストレグを削除し、パイプラインコメントを更新。
  • sos-test-leg.yml: パイプラインヘッダーコメントを更新してfallbackレグの削除を反映。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 変更は内部実装の簡潔化であり、公開API互換性への影響なし
  • Copilotレビューで、CanFallback()メソッドのドキュメントコメントが実装ロジック(method allowlist または caller file allowlist)と不一致であることが指摘されています
  • 破壊的変更にはあたりませんが、環境変数CDAC_NO_FALLBACKに依存していたワークフローは影響を受ける可能性があります

#132603 Remove unnecessary NoWarn for CS9368

概要

CS9368警告が Roslyn の更新により報告されなくなったため、複数のプロジェクトファイルから不要になった NoWarn 指定を削除するメンテナンス変更です。

変更内容

  • CoreLib、ライブラリプロジェクトのプロジェクトファイル計18ファイルから <NoWarn> タグ内の CS9368 警告抑制指定を削除
  • 対象:System.Private.CoreLib(CoreCLR/NativeAOT/Mono)、BCL.Memory、Diagnostics.Tracing、Memory、Numerics.Vectors、Runtime.InteropServices、Runtime.Intrinsics、Runtime.Loader、Text.Encoding.Extensions、Threading 関連プロジェクト

パフォーマンスへの影響

影響なし

関連Issue

#126409

その他

Roslyn 側での対応(dotnet/roslyn#83295)により CS9368 警告が報告されなくなったため、Runtime リポジトリでの抑制指定が不要になりました。


#132601 Mark ProcessArchitecture as NonVersionable

概要

RuntimeInformation.ProcessArchitectureプロパティのgetterにNonVersionableAttributeを付与し、ReadyToRun(R2R)のクロスモジュールインライニングでアーキテクチャ固有の分岐をフォルドできるようにします。これにより、コンパイル時にプロセッサアーキテクチャに基づく条件分岐を最適化できます。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/RuntimeInformation.cs
    • ProcessArchitectureプロパティのgetterメソッドにNonVersionableAttributeを追加(+17/-11行)
    • アーキテクチャ固有の分岐最適化をサポート

パフォーマンスへの影響

ReadyToRun生成時にアーキテクチャ固有の分岐がコンパイル時にフォルドされることで、実行時の不要な分岐判定が削減され、コード密度改善と実行速度向上が期待されます。具体的なベンチマーク数値は提供されていません。

関連Issue

#129949

その他

  • 全TARGET_*アーキテクチャブランチでコンパイル動作確認済み
  • NonVersionableAttributeがgetterに正しく付与されていることを検証済み
  • 公開APIの動作に変更なし(内部実装の最適化のみ)

#132598 [release/11.0-rc1] Ensure BackgroundService invokes ExecuteAsync after start

概要

BackgroundServiceが開始後にExecuteAsyncを確実に呼び出すよう修正するバックポートです。release/11.0-rc1ブランチへの適用となります(元のPR #132241のバックポート)。

変更内容

  • BackgroundService.cs: ExecuteAsyncの呼び出しロジックを修正(4行追加、1行削除)
  • BackgroundServiceTests.cs: 開始後のExecuteAsync呼び出しを検証するテストケースを追加(89行追加、2行削除)

パフォーマンスへの影響

影響なし

関連Issue

#132241

その他

  • このはバックポートPRのため、元のPR #132241での修正内容を参照してください
  • Microsoft.Extensions.Hosting.Abstractionsライブラリの内部実装(BackgroundService)に対する修正です
  • テストの大幅な追加により、回帰防止と修正の検証が行われています

#132593 [release/11.0-rc1] Fix hang in InvalidClientRequestTests by guarding oversized Content-Length cases to managed implementation

概要

InvalidClientRequestTests においてハングが発生する問題を修正するBackportです。 オーバーサイズの Content-Length ケースをマネージド実装にガード(保護)することで、ハングを防いでいます。 元のPR (#132321) をrelease/11.0-rc1ブランチに適用したものです。

変更内容

  • src/libraries/System.Net.HttpListener/tests/InvalidClientRequestTests.cs
    • テストケースの修正(+5行/-2行)
    • オーバーサイズの Content-Length を扱うケースに対する保護ロジックの追加

パフォーマンスへの影響

影響なし (テストコードの修正のため、ランタイム動作に直接的なパフォーマンス影響はありません)

関連Issue

#132321

その他

  • これはBackportPRであり、release/11.0-rc1ブランチを対象としています
  • Customer Impact、Regression、Testing、Risk の詳細情報は記入されていません
  • テンプレートの説明では、パッケージオーサリングは .NET 9 以降では不要とのことです

#132589 Restore TPA duplicate precedence to keep managed DLLs over native EXEs

  • 作成者: @Copilot
  • 作成日時: 2026年08月20日 23:44:08(UTC)
  • マージ日時: 2026年08月21日 22:40:53(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLR アセンブリバインディングの回帰を修正し、TRUSTED_PLATFORM_ASSEMBLIES (TPA) 内で同じ簡易名を持つ重複エントリの解決ロジックを改善しました。修正前は「最後のエントリが優先」されマネージド .dll が ネイティブ .exe に上書きされていましたが、修正後は .dll を優先し、同等優先度の場合は最初のエントリを保持するようになります。

変更内容

  • src/coreclr/binder/applicationcontext.cpp: ApplicationContext::SetupBindingPaths メソッドの重複処理ロジックを更新
    • 既存エントリが .exe でも、新しいエントリが .dll の場合のみ置き換え
    • .dll/.dll または .exe/.exe のように同等優先度の重複では、最初のエントリを優先

パフォーマンスへの影響

影響なし

関連Issue

#132588

その他

  • この変更はランタイムのアセンブリバインディング機構(内部実装)に対する修正
  • coreclr_create_delegate による簡易名バインディングの信頼性を復元
  • ネイティブイメージ (.ni.dll) の既存の優先度ロジックは再導入されない

#132582 [release/11.0] Improve StringBuilder.ToString() exception message for inconsistent state

概要

StringBuilder.ToString()が内部チャンク境界の不整合(通常は並行修正による)を検出した際のエラーメッセージと例外パラメータ名を改善。例外の型は変わらず、有効で並行でない使用法に対する動作への影響はなし。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Text/StringBuilder.cs: 例外パラメータ名と既存リソース文字列の変更(+1/-1行)
    • 不整合な内部状態検出時のArgumentOutOfRangeExceptionのパラメータ名と例外メッセージを改善
    • 既存のリソース文字列を再利用し、より正確なエラー情報を提供

パフォーマンスへの影響

影響なし

関連Issue

#132483(本PRのバックポート元)

その他

  • 内部状態が無効な場合のみの変更であり、通常の使用法には影響しない
  • 既存テストで例外型の妥当性を検証
  • リリース/11.0ブランチへのバックポート

#132578 [release/11.0] Make DegreesToRadians and RadiansToDegrees correctly rounded

概要

DegreesToRadiansとRadiansToDegreesメソッドの実装を修正し、正確な丸め(Correctly Rounded)を実現するPRです。従来の実装では中間演算でオーバーフロー発生時に有限値から無限大を返す問題や、非オーバーフロー入力で1-2 ULP(Unit in the Last Place)の精度誤差がありました。本PRでは、浮動小数点数(float、double、Half、BFloat16)と10進小数点数(Decimal32、Decimal64、Decimal128)、およびそれらのベクトル実装をすべて正確に丸めるように修正しています。

変更内容

  • Double.cs: 数学的に導出された丸め境界を使用した新しい実装(+228行)
  • Single.cs: 新しい実装への対応
  • Half.cs、BFloat16.cs: より簡潔な実装に変更
  • Number.DecimalIeee754.cs: 10進小数点数の変換ロジック強化(+163行)
  • Decimal32/64/128.cs: DegreesToRadiansとRadiansToDegreesメソッドを追加
  • VectorMath.cs: ベクトル実装の追加(+209行)
  • Vector64/128/256/512.cs: ベクトル演算の対応更新
  • ITrigonometricFunctions.cs: インターフェース定義の追加
  • テストファイル: 全浮動小数点数型と10進小数点数型に対する包括的なテストケース追加

パフォーマンスへの影響

正確性重視の実装のため、計算量が増加する可能性があります。ただし、詳細なベンチマーク結果は提供されていません。

関連Issue

#132096(元のPR) #131930(顧客報告)

その他

  • 検証範囲: Half、BFloat16、floatは全入力値を網羅的に検証。Decimal32は6000万入力を検証。doubleは37万2000個の境界付近のケースと完全な非正規化数範囲を検証。すべてのケースが正確に丸められることを確認。
  • リスク評価: Low。小規模なバイナリ形式は網羅的に検証、より複雑なdoubleは数学的に導出された境界と近似値を使用して検証。10進実装は正確な整数演算で実装。
  • 破壊的変更: なし。既存の不正確な実装の修正。
  • これはrelease/11.0へのバックポートプリである(#132096のバックポート)。

#132577 [release/11.0-rc1] Widen the internal Number.BigInteger buffer to nuint

概要

64ビットプラットフォームで浮動小数点の解析、フォーマット、丸めに使用される内部Number.BigIntegerのバッファをnuintベースに拡張し、32ビットブロックから64ビットブロックへ移行する変更です。これにより、ネイティブレジスタの未使用部分を削減し、大規模数値操作の効率を向上させます。特に新しいDecimal32、Decimal64、Decimal128型のパフォーマンス回帰を改善します。

変更内容

  • Number.BigInteger.cs: 内部実装をnuintベースのブロック構造に変更し、既存のSystem.Numerics.BigIntegerの演算カーネルを再利用
  • BigIntegerCalculator.Shared.cs: 新規作成の共有演算カーネルファイル(加算、減算、除算など)
  • Number.Dragon4.cs / Number.NumberToFloatingPointBits.cs / Number.Rounding.cs: 新しいブロック幅に対応するよう調整
  • System.Runtime.Numerics: 既存の演算実装(AddSub、DivRem、SquMul、Utils)をコアライブラリに統合し、コード重複を排除

パフォーマンスへの影響

  • 長い小数解析: 約29%改善
  • 長い固定/高精度フォーマット: 約38-39%改善
  • 非正規化数値G99フォーマット: 約76%改善
  • 短い入力: ノイズ範囲内(中立的)
  • 32ビットプラットフォームへの影響なし

関連Issue

その他

  • 回帰対応: Decimal32、Decimal64、Decimal128型の導入に伴うパフォーマンス低下の修正
  • テスト範囲: 4,608個の浮動小数点テスト、3,583個のMath/MathFテスト、8,422個のBigIntegerテストで検証済み
  • リスク: 低。既存の実績のあるBigInteger演算カーネルを再利用し、特化したホットパスは専用実装として維持
  • x64およびx86ビルドで検証済み

#132571 [release/11.0] Fix confusing exception message in Dictionary.CopyTo when index exceeds array length

概要

Dictionary<TKey, TValue>.CopyTo()メソッドで、インデックスが配列長を超える場合に出力される例外メッセージを改善しました。従来の「Non-negative number required.」という誤解を招くメッセージから、より明確なメッセージに変更しています。例外型とパラメータは変わらず、既存のリソースを再利用しているため、変更は最小限です。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Collections/Generic/Dictionary.cs: 例外メッセージリソースの変更(+1行/-1行)
    • Dictionary<TKey, TValue>.CopyTo()の例外メッセージを、より明確な既存のメッセージに変更

パフォーマンスへの影響

影響なし

関連Issue

その他

  • 本変更はrelease/11.0ブランチへのバックポート(#132465のバックポート)です
  • 既存テストは無効なインデックスの例外発生を確認していますが、メッセージ内容は検証していません
  • 新規テストは追加されていません
  • リスク評価は低です(例外メッセージのリソース変更のみで、動作変更なし)
  • 非ジェネリック版(Dictionary.CopyTo())は変更対象外です

#132569 JIT: speed up fgDebugCheckNodesUniqueness and drop dead morphTrees arg

概要

JIT デバッグチェック基盤の最適化により、fgDebugCheckNodesUniqueness のパフォーマンスを向上させます。既存のノードスレッド化を活用して線形走査を実現し、不使用の morphTrees パラメータを削除することで、デバッグ検証のオーバーヘッドを削減します。

変更内容

  • src/coreclr/jit/fgdiagnostic.cpp:

    • fgDebugCheckNodesUniqueness を Statement::TreeList() 経由の線形走査に変更(fgNodeThreading == NodeThreading::AllTrees 時)
    • IsMember + AddElemD の組み合わせを BitVecOps::TryAddElemD 単一呼び出しに変更(ビットセット挿入ロジック簡略化)
    • fgDebugCheckLinks/fgDebugCheckStmtsList から未使用の morphTrees パラメータと関連する到達不可能コードを削除
  • src/coreclr/jit/compiler.h:

    • デバッグチェックメソッド宣言から morphTrees パラメータを削除

パフォーマンスへの影響

Checked JIT でのベンチマーク結果(benchmarks.run):

  • 命令数削減: -4.89%
  • ウォールクロック削減: -1.65%

デバッグ検証の検証カバレッジを維持しながら、デバッグオーバーヘッドを大幅に削減します。

関連Issue

なし

その他

すべてのコールサイトが morphTrees のデフォルト値(false)を使用していたため、関連するモルフ処理と再帰呼び出しは完全に到達不可能なコードとなっており、削除対象となりました。


#132544 Fix transition from monomorphic to polymorphic VSD

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年08月20日 00:59:15(UTC)
  • マージ日時: 2026年08月21日 14:25:52(UTC)
  • ラベル: area-VM-coreclr

概要

インターフェイス呼び出しサイトが単一の受信者型から複数の受信者型への遷移に失敗する問題を修正しました。ARM、ARM64、LoongArch64、RISC-V64において、ディスパッチカウンター満了時にSDF_ResolveBackPatchフラグを設定した後、インライン解決キャッシュをプローブしていたため、キャッシュヒット時にバックパッチ処理をスキップしていました。本修正により、カウンター満了時に遅延解決パスに進入してバックパッチが正常に行われるようにしました(x64の既存動作に統一)。

変更内容

  • ARM(stubs.cpp): カウンター満了時にSDF_ResolveBackPatchを設定し、_resolveEntryPointではなく_slowEntryPointにブランチするよう修正
  • ARM64(virtualcallstubcpu.hpp): 同様にカウンター満了時の処理を修正し、バックパッチフラグ処理に必要な遅延パス経由の動作に統一
  • LoongArch64(virtualcallstubcpu.hpp): ミスカウンター処理の反転ロジックを修正(ARM64と同じ修正を適用)
  • RISC-V64(virtualcallstubcpu.hpp): ミスカウンター処理の反転ロジックを修正(ARM64と同じ修正を適用)

パフォーマンスへの影響

影響なし(問題回避による正常化であり、パフォーマンス改善・低下は記載されていません)

関連Issue

なし

その他

本修正はランタイムの仮想メソッド呼び出し解決(Virtual Call Stub Dispatch)の内部実装に関わる変更です。複数受信者型への遷移が正常に行われることで、後続の型ミス時の処理効率が改善される効果が期待されます。


#132537 [release/11.0-rc1] Fix CrossGen2 TypeMap blob-only type references

概要

CrossGen2がblobのみの型参照を含むTypeMapを処理する際にクラッシュする問題を修正するバックポート(#131610)。.NET-for-iOSシナリオでビルド時にクラッシュしていたため、iOSチームは現在回避策を実装している。修正により、TypeMapノードがblobのみの型参照を正しく処理できるようになる。

変更内容

  • ImportReferenceProvider.cs: blobのみの型の参照解決ロジックを強化(14行追加)
  • MutableModule.cs: blobのみの型参照の検出と処理機能を追加(14行追加)
  • TypeMapノード群: AnalyzedExternalTypeMapNode、ExternalTypeMapNode、ProxyTypeMapNode、ReadyToRunExternalTypeMapNode、ReadyToRunProxyTypeMapNodeなど複数の依存関係分析ノードで、TypeMapボブのみの型参照を適切に処理するロジックを更新
  • テスト追加: TypeMapApp.cs、TypeMapBlobOnlyLib.ilなど、blobのみの型参照シナリオをカバーする包括的なユニットテストを追加

パフォーマンスへの影響

影響なし。この修正は正確性(クラッシュ回避)に関するもので、パフォーマンスへの変更ではない。

関連Issue

#131610

その他

  • 内部発見の問題で、顧客報告ではない
  • 回帰なし
  • リスク低:修正対象のAPIが自己完結的で、テストが包括的
  • AOT/ReadyToRun コンパイラの内部実装変更で、公開APIへの影響なし
  • .NET 11.0-rc1へのバックポート

#132536 JIT: Mark GT_LCLHEAP with GTF_CALL and GTF_GLOB_REF

  • 作成者: @EgorBo
  • 作成日時: 2026年08月19日 21:05:53(UTC)
  • マージ日時: 2026年08月21日 11:36:45(UTC)
  • ラベル: area-CodeGen-coreclr

概要

GT_LCLHEAP(スタック割り当て)ノードにサイドエフェクトフラグ(GTF_CALLとGTF_GLOB_REF)を追加し、条件付きlocalloc が無条件に実行されるように最適化されるのを防ぐ修正です。if-conversion最適化により、サイズチェック前にスタック溢れが発生する可能性があった問題を解決します。

// 問題の例
byte* buffer = null;
if (size <= 261) { byte* tmp = stackalloc byte[size]; buffer = tmp; }
return (nint)buffer;   // サイズチェック前にstackalloc実行でスタック溢れ

変更内容

  • gentree.cpp: GT_LCLHEAPをOperRequiresCallFlag/OperRequiresGlobRefFlagに追加し、フラグがif-conversion時に削除されないようにする
  • importer.cpp: GT_LCLHEAP作成時にGTF_CALL | GTF_GLOB_REFフラグを明示的に設定
  • Runtime_132243.cs: 修正を検証する回帰テストを追加(サイズチェック付きlocalloc)

パフォーマンスへの影響

軽微です。バイナリサイズに最小限の変更(benchmarks.run +11、aspnet2 +141、libraries.pmi -71、realworld -8バイト)。SPMI replayで問題なし。

関連Issue

#132243、#125362

その他

この修正により、GT_LCLHEAPはGT_KEEPALIVEと同じ方法でサイドエフェクトが扱われるようになります。条件付きlocalloc の最適化時にサイズチェック条件が保持されることが保証されます。


#132530 Fix LibraryImport QCall signature mismatches

  • 作成者: @davidwrighton
  • 作成日時: 2026年08月19日 18:59:54(UTC)
  • マージ日時: 2026年08月21日 12:23:58(UTC)
  • ラベル: area-VM-coreclr

概要

LibraryImport宣言とそのQCall実装の間の署名不一致を修正しました。boolを返すと宣言されていながら、実装ではvoidを返すメソッドを正します。また、スレッド静的ヘルパー、アセンブリロードトレース、ThreadPool I/Oキューイベントで[MarshalAs(UnmanagedType.Bool)]パラメータを4バイトのネイティブBOOLパラメータに合わせました。これらの不一致により、ターゲットアーキテクチャと呼び出し規約によって、未定義の戻り値を読み込むか、異なるサイズのブール値をマネージド/ネイティブABIを超えて渡す可能性がありました。

変更内容

  • AssemblyLoadContext.CoreCLR.cs: LibraryImportメソッドの戻り値型をboolからvoidに修正
  • JitQCallHelpers.h: QCall署名を修正して戻り値型を正確に反映
  • assemblynative.cpp/hpp: アセンブリロードトレース関連のQCall署名を修正
  • jithelpers.cpp: ThreadPool関連のヘルパー署名を修正
  • nativeeventsource.cpp/h: EventPipeイベント実装の署名を修正
  • disabledruntimeeventinternal.cpp: NativeAOT無効時のEventPipe実装を修正

パフォーマンスへの影響

影響なし。本変更はマネージド/ネイティブABI境界での規約違反を修正するもので、パフォーマンスではなく正確性に関するものです。

関連Issue

なし

その他

  • 変更の性質上、内部実装(QCall署名)の修正であり、公開APIへの直接的な影響はありません
  • テスト実施済み:ThreadStaticテスト、System.Threading.ThreadPool.Testsで70件合格
  • Mono の InternalCall パスは既に正しいMonoBoolean ABIを使用しているため、整合性が保たれています

#132529 Replace debugger PAL waits with cross-platform wait types

概要

デバッガーが非Windowsプラットフォームで使用していた従来のPAL多重待機を、デバッガー所有のクロスプラットフォーム待機プリミティブに置き換える変更です。新しいWaitHandle、WaitEvent、WaitLatchの抽象化を導入し、ネイティブハンドルをWindowsに限定します。また、minipalに相互排除とCondition Variable機構を追加し、System.Native のLowLevelMonitorで利用します。

変更内容

新規API追加:

  • debugger PAL (src/coreclr/debug/inc/debugwait.h): WaitHandle、WaitEvent、WaitLatch、Windows限定のNativeHandleを導入
  • minipal (src/native/minipal/): 非再帰的Mutex、Condition Variable実装(Win32とpthreadに対応)

実装変更:

  • Unix: 非ブロッキング匿名パイプとpollによるイベント・ラッチ実装 (src/coreclr/debug/debug-pal/unix/wait.cpp)
  • Windows: Win32ハンドルとWaitForMultipleObjectsExベースの実装 (src/coreclr/debug/debug-pal/win/wait.cpp)
  • デバッガーイベント・ヘルパースレッド待機を型付きAPI経由に移行
  • トランスポート・セッション開放状態を手動リセットイベントからshared minipal Condition Variableに変更
  • System.Native LowLevelMonitorをminipal mutex/condvarに移行

影響範囲: デバッガー関連コンポーネント(rcthread.cpp、process.cpp、dbgtransportmanager.cpp他)の多数の待機サイトを新APIに統一

パフォーマンスへの影響

影響なし。プラットフォーム間のAPIの統一化と内部実装の近代化であり、性能特性の変更を伴いません。

関連Issue

#132149

その他

レビュアーから指摘された懸念事項:

  1. src/coreclr/debug/di/process.cpp:3019のWaitEventコンストラクタで、Unixプラットフォームにおいてハンドル重複が正しく行われない可能性あり
  2. src/coreclr/debug/inc/dbgtransportsession.hのCondition Variable・Eventアレイが初期化未完了のまま利用される可能性あり(Init()失敗時)

検証:

  • Windows/Linux x64 Debug CoreCLRビルド
  • Windows/Ubuntu上のプライベート診断テスト(Attach.AttachedTest、Attach.BreakTest)
  • Unix WaitEvent/WaitLatchセマンティクス20/20実行
  • System.Native LowLevelMonitorハーネス100イテレーション

#132511 JIT: Simplify containment and NOP checks

概要

JITコンパイラのisContainedチェックのパフォーマンス最適化。高コストなcanBeContainedチェックが毎回実行されるのを避け、両アサーションをLIRRangeCheckLIRに移動。さらに、GT_NOPとIsNothingNode()の不要な特殊ケース処理を削除。

変更内容

  • src/coreclr/jit/compiler.hpp: アサーション関連の軽微な変更
  • src/coreclr/jit/gentree.cpp: OperIsLIRとIsNothingNodeの特殊ケース処理削除(15行削減)。TYP_VOIDチェックは不要化
  • src/coreclr/jit/gentree.h: 関連する6行のコード削除
  • src/coreclr/jit/lir.cpp: LIRRangeCheckLIRに両アサーション(containment/NOP関連)を統合(6行追加)

変更は内部実装(LIRフェーズのチェック処理)に限定され、公開APIへの影響はなし。

パフォーマンスへの影響

改善率: -3.63% (命令数削減)

checked JIT上でのbenchmarks.run測定により、命令数が3.63%削減。高コストなチェックを毎回のisContained呼び出しから除去し、既存のLIR検証フェーズ(すべてのノードを走査)に統合したため、全体的なコンパイル時間短縮が期待できる。

関連Issue

なし

その他

  • アサーション処理の統合により、LIR検証の責任を明確化(LIRRangeCheckLIRが一元的に検証)
  • TYP_VOIDはfgDebugCheckTypesで既に保証されるため、冗長な特殊ケース処理を削除可能
  • checked JIT(デバッグ用)での測定のため、release JITの実測結果は未提示

#132476 [release/11.0-rc1] Fix DeflateEncoder.GetMaxCompressedLength conservative bound

概要

.NET 11の新しいspan based ZLibEncoderとGZipEncoder APIにおいて、非デフォルトの圧縮パラメータを使用する際にGetMaxCompressedLengthで取得したバッファサイズが不十分になる問題を修正しました。保守的な上限値計算式を調整し、確実に出力がバッファに収まるようにしました。

変更内容

  • DeflateEncoder.cs: 最大圧縮長の計算式を修正(9行追加、23行削除)。保守的な上限値の計算ロジックを改善
  • GZipEncoder.cs: 関連する計算式の調整(3行追加、4行削除)
  • ZLibEncoder.cs: 関連する計算式の調整(2行追加、2行削除)
  • EncoderDecoderTestBase.cs: テストコード整理(1行削除)

パフォーマンスへの影響

影響なし。計算式の調整のみで、実行性能への直接的な影響はありません。

関連Issue

#132274

その他

  • この修正は.NET 11 RCリリースへのバックポート
  • 新しいAPIのみが対象で、既存APIは影響なし
  • CI内で以前は無効化されていたテストが本修正により検証可能になります
  • 修正のリスクレベルは低く、計算式の微調整のみが対象

#132455 Don't report unsupported types for never bound properties

概要

Configuration Binder ソースジェネレータが、バインドされない属性([ConfigurationIgnore]修飾やpublicアクセッサなし)に対して不適切にSYSLIB1100/SYSLIB1101診断を報告する問題を修正します。修正により、除外された属性のタイプはジェネレータの型インデックスに登録されなくなり、不要な診断が抑制されます。

変更内容

  • ConfigurationBindingGenerator.Parser.cs: CreateObjectSpec内で、属性のタイプをトランジティブにエンキューする前に、その属性がバインディングに参加できるかを確認するロジックを追加しました。コンストラクタパラメータをバックアップする属性は例外として登録されます。
  • TypeIndex.cs: ShouldBindToメソッドで、タイプ仕様の解決前に無視フラグとアクセッシビリティをチェックするショートサーキット処理を追加しました。
  • GeneratorTests.cs: 除外された属性が診断をトリガーしないこと、およびコンストラクタパラメータバックアップ属性が正しく処理されることを検証する回帰テストを追加しました。

パフォーマンスへの影響

影響なし

関連Issue

#132377

その他

この変更は内部実装(ソースジェネレータの診断ロジック)の修正であり、公開APIへの影響はありません。開発者が[ConfigurationIgnore]で修飾した属性やprivate属性に対して不必要な警告が表示されなくなります。


#132439 Fix NativeAOT RVA field handle scanning

概要

NativeAOT の IL スキャナーが RVA フィールドハンドルのメタデータ依存関係を不正に削除していた問題を修正します。RuntimeHelpers.InitializeArray と CreateSpan<T> の組み込み関数展開を証明する専用の RvaIntrinsicPatternAnalyzer を導入し、これらの場合にのみ反射メタデータ依存関係を抑制するようにしました。その他の RVA ldtoken は正常なメタデータ依存関係を保持し、コンパイル時の KeyNotFoundException クラッシュを防ぎます。

変更内容

  • RvaIntrinsicPatternAnalyzer.cs(新規追加): InitializeArray と CreateSpan<T> の IL パターンマッチング分析器。RyuJIT の変換条件(型、サイズ、オーバーフロー、RVA データチェック)をミラーリングして、組み込み関数が確実に展開される場合のみメタデータ依存関係を削除します。
  • ILImporter.Scanner.cs: RVA フィールド処理で新しい分析器を統合し、パターン認識時のみ従来の依存関係削除動作を実行。
  • UsageBasedMetadataManager.cs: ランタイムフィールドハンドル経由で参照されるフィールド・型をメタデータ生成対象として扱うよう更新。
  • importercalls.cpp: 関連する組み込み関数定義の微調整。
  • ILCompiler.Compiler.csproj: 新ファイルのプロジェクト追加。

パフォーマンスへの影響

影響なし。この変更は正確性を修正するもので、パフォーマンスの低下は想定されません。メタデータ生成ポリシーの精度向上により、実際の NativeAOT バイナリサイズは最適化スキャンで確認された通り、正当な RVA フィールドハンドルのメタデータを適切に保持しながら不要なエントリを削除します。

関連Issue

#132266

その他

  • 検証済み: build.cmd clr.aot -c Debug および NativeAOT JIT テストスイートで確認
  • 最適化スキャンで、有効な InitializeArray/CreateSpan<T> RVA ブロブは反射メタデータとして保持されず、スタンドアロン RVA フィールドハンドルのみが正しく保持されることを確認

#132438 [automated] Merge branch 'release/11.0-rc1' => 'release/11.0'

概要

release/11.0-rc1ブランチからrelease/11.0ブランチへの自動マージPRです。eiriktsarpalis氏によるRC1段階のコミットがrelease/11.0に統合されます。このPRは自動生成されたものであり、マージコミット(スクイッシュまたはリベースではない)で完了する必要があります。

変更内容

主な変更領域:

  • NativeAOTコンパイラ: 外部型マップと代理型マップノードの実装調整(ImportReferenceProvider、型マップノード関連ファイル)
  • 例外処理: exceptionhandling.cpp内の例外処理ロジックの改善
  • 暗号化: AES KeyWrapおよびKeyWrapPadded機能の実装追加(OSX/Unixネイティブ相互運用層とテスト)
  • ホスティング: BackgroundServiceの実装調整とテスト拡張
  • その他: ビルド設定、テスト対象設定、診断ヘルパー、数値解析などの細部調整(約104ファイル)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRは自動マージツールにより生成されており、手動でマージコミットを作成する必要があります
  • マージコンフリクトが発生した場合は、手動で解決した後にマージを完了する必要があります
  • コマンドラインでのマージ手順が提供されています

#132414 [release/11.0-rc1] Use stable net/netframework folders for the mono SDK tasks

概要

Mono SDK タスク向けのフォルダ構造を安定版フォルダに統一する変更を .NET 11.0-rc1 ブランチにバックポートします。NuGet パッケージとビルドタスクの出力先を net/netframework の安定版フォルダ構造に統一することで、ビルドシステムの一貫性を向上させます。

変更内容

  • Directory.Build.props: SDK タスク用フォルダ構造の定義を更新
  • NuGet パッケージ定義: 複数の Mono SDK パッケージ(LibraryBuilder、MonoAOTCompiler、WebAssembly SDKs など)の .pkgproj ファイルから version bump 関連の定義を削除、フォルダ構造を統一
  • ビルドプロパティ/ターゲット: AppleBuild、WasmApp、各タスク関連の .props と .targets ファイルでフォルダ参照を更新
  • タスク csproj ファイル: AndroidAppBuilder、AotCompilerTask、AppleAppBuilder、LibraryBuilder、MobileBuildTasks など複数のタスク実装で出力フォルダパスを統一
  • ドキュメント: README ファイルのパス参照を更新

パフォーマンスへの影響

影響なし

関連Issue

#132402

その他

本変更はバックポート PR であり、元の #132402 を release/11.0-rc1 ブランチに適用するものです。.NET 9 以降でのパッケージオーサリング自動化に対応した内容が含まれています。


#132395 JIT: fix switch peeling stealing the wrong operand of its compare

  • 作成者: @EgorBo
  • 作成日時: 2026年08月17日 09:59:14(UTC)
  • マージ日時: 2026年08月21日 14:19:00(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラのfgPeelSwitch関数における正確性バグを修正しました。ステートメント作成後に比較式のオペランドを再アタッチしていたため、シーケンシング処理で定数オペランドが交換され、スイッチが誤った値(dominant case定数)に基づいて分岐していました。特にループアンローリング時にスイッチ値が定数化される場合に問題が顕在化していました。修正内容は、ステートメント作成前に比較式を完全に構築することです。

変更内容

  • src/coreclr/jit/fgopt.cpp: fgPeelSwitchでスイッチ値をfgMakeMultiUseする順序を変更。比較式がステートメントに追加される前にオペランド再アタッチを実行し、gtSetEvalOrderによるオペランド交換を回避
  • src/tests/JIT/Regression/JitBlue/Runtime_132370/Runtime_132370.cs: スイッチペーリングとループアンローリング時の誤分岐を再現するリグレッションテストを追加
  • src/tests/JIT/Regression/Regression_ro_2.csproj: 新規テストをプロジェクトに登録

パフォーマンスへの影響

影響なし(asm diffsなし、benchmarks.run・libraries.pmiで無変化)

関連Issue

#132370

その他

  • この修正はJIT正確性バグ(コンパイラの誤った最適化による不正な結果生成)に該当します
  • ループアンローリングによってスイッチ値が定数化される場合に、アンローリングされた各コピーがcase 0に誤分岐していました
  • Copilotの概要には追加のArm64 LSE原子操作関連の変更が記載されていますが、提供されたファイル変更には含まれていません

#132379 [release/11.0] Make the Nullable<T>.Value exception message actionable

概要

Nullable<T>.Valueプロパティで例外が発生する際のInvalidOperationExceptionメッセージを改善するバックポート(.NET 11 RC2用)です。従来の「Nullable object must have a value.」という曖昧なメッセージから、より実用的な「Cannot read the Value property of a Nullable object that has no value. Check HasValue before reading Value.」に変更されます。ユーザーがHasValueをチェックする必要があることを明確に示す改善です。

変更内容

  • src/libraries/System.Private.CoreLib/src/Resources/Strings.resx: InvalidOperation_NoValue例外メッセージの文字列リソースを更新
  • 関連するクリーンアップ:NativeAOT用のSystem.Private.Reflection.ExecutionのStrings.resxから15個の未参照文字列を削除

パフォーマンスへの影響

影響なし(リソース文字列の変更のみで、機能的・パフォーマンス的な変更はありません)

関連Issue

#126560、#132367

その他

  • 動作変更なし。リソース文字列の値のみ変更
  • リスク評価:低
  • 既存テストで機能の変更はないため、新しいテストは追加されていません
  • ローカルで検証済み:新しい文字列が含まれ、古い文字列が削除されていることを確認

#132373 Make LegacyPropagator list sort linear

概要

LegacyPropagatorがbaggage headerから解析したキーのリストを反転させる際のアルゴリズムを改善しました。従来のO(n²)のInsert操作から、O(n)のAdd+Reverse操作に変更し、W3CPropagatorの実装と統一しています。大規模なヘッダ(16KB以上)では最大11.9倍のパフォーマンス向上が期待できます。

変更内容

  • System/Diagnostics/LegacyPropagator.cs: キーのリスト構築ロジックをO(n²)のInsert操作からO(n)のAdd+Reverse操作に変更
  • PropagatorTests.cs: キーの順序を検証するテストを追加

パフォーマンスへの影響

大幅な改善:特に大規模ヘッダで顕著です。

  • 小規模(N=3~10エントリ、~39B):ほぼ同等(1.0x)
  • 中規模(N=50、~199B):1.1倍改善
  • 大規模(N=500~16,384、2KB~64KB):2.2~11.9倍改善
    • 8KBヘッダ(Kestrel制限):8.0倍(519.9µs → 65.0µs)
    • 16KBヘッダ(IIS制限):8.7倍(1,992.0µs → 229.4µs)

実運用への影響は限定的です。理由:Kestrel/IISのヘッダサイズ制限(8KB/16KB)と、.NET 10+ではLegacyPropagatorがオプト機能であるため。

関連Issue

#132373

その他

なし


#132368 Avoid allocations propagating Activity baggage

概要

Activity baggage の列挙時の割り当てを回避するため、struct ベースの enumerator を導入しました。公開 API は変更されていません。

変更内容

  • Activity.cs: 内部用の EnumerateBaggage() メソッドと BaggageEnumerator struct を追加し、GetBaggageItem() がこの新しい列挙パスを使用するように更新
  • DistributedContextPropagator.cs: 内部ヘルパーメソッドを更新して Activity? を受け入れ、struct ベースの列挙を使用
  • W3CPropagator.cs: baggage 注入時に Activity.EnumerateBaggage() を使用してイテレータ割り当てを回避
  • LegacyPropagator.cs: Activity を通してスレッド化し、struct enumerator 経由で allocation フリーな列挙を実現
  • PassThroughPropagator.cs: root Activity をスレッド化して baggage 注入時に allocation フリーな列挙を可能に

パフォーマンスへの影響

大幅な改善を達成:

  • GetBaggageItem: 17.10 ns → 3.37 ns(5.07倍高速化)、64 B → 0 B 割り当て削減(ゼロアロケーション化)
  • EnumerateBaggageViaProperty: 30.88 ns → 30.24 ns(1.02倍、わずかな改善)、割り当ては 64 B で変化なし

GetBaggageItem における大幅な割り当て削減は、baggage チェーンを走査する際の enumerator 割り当てが排除されたことに起因します。

関連Issue

なし

その他

内部実装のみの変更で、公開 API は変更されていません。struct-based enumerator は foreach 構文を使用した最適化パターンで、JIT により stack allocation されるため、heap allocations を回避できます。


#132241 Ensure BackgroundService invokes ExecuteAsync after start

概要

BackgroundService.StartAsyncが停止トークンをTask.Runのスケジューリングトークンとして使用していたため、StopAsyncまたはDisposeが呼び出された直後のタイミングでExecuteAsyncが起動されない問題を修正します。この修正により、開始後のExecuteAsyncの起動が確定的になります。

変更内容

  • BackgroundService.cs: Task.RunのスケジューリングトークンとしてCancellationToken.Noneを使用し、停止トークンはExecuteAsyncに直接渡すよう変更。開始前キャンセルの場合はTask.FromCanceledを明示的に割り当ててExecuteAsyncを起動しない。
  • BackgroundServiceTests.cs: スレッドプール飢餓状態下で即座の停止/破棄時にExecuteAsyncが正確に1回実行されることを検証する回帰テストを追加。開始前キャンセルテストも更新。

パフォーマンスへの影響

影響なし

関連Issue

#131249

その他

  • 互換性: .NET 10の変更(ExecuteAsyncがスレッドプール上で非同期に実行される)を維持しつつ、起動確定性を向上させます。
  • セキュリティ: なし
  • テスト: 回帰テストはRemoteExecutorを使用してスレッドプール飢餓状態を再現し、タイムアウト設定に関するレビュアーコメントあり

#132230 Fix synchronous cancellation race in Channels

概要

System.Threading.ChannelsのAsyncOperationにおいて、キャンセルトークン登録中に同期的なキャンセルが発生した場合、完了時の原子的予約が行われないため二重完了が発生する競合状態を修正しました。これによりRendezvousChannelのリンクリスト破損やアイテム喪失が発生していた問題を解決しています。

キャンセル可能性を不変な_isCancelableフィールドとして構築時に初期化することで、登録コールバック実行時の競合を排除します。

変更内容

  • AsyncOperation.cs: _isCancelableフィールドを追加し、完了予約判定時に_cancellationRegistration.Tokenの代わりにこれを使用。登録前にキャンセルが発生してもキャンセル状態を正確に認識できるように改善
  • ChannelUtilities.cs: テストインフラのサポート機能を追加(反射を使用した内部async操作の構築・キャンセル機能、リンクリスト操作機能)
  • BoundedChannelTests.cs: 登録中の同期的キャンセル時の完了予約と、キャンセルされたリーダーのスキップに関する回帰テストを追加(計47行)

パフォーマンスへの影響

影響なし

追加フィールドは既存のオブジェクトパディング内に収まり、BlockedReadAsyncOperation<int>のサイズは96バイトで変わりません。非キャンセル高速パス、プーリング動作、登録クリーンアップは保持されます。

関連Issue

#129796 #132094

その他

  • 検証済み: System.Threading.Channels Debugテスト1,599件パス
  • Release 3,000,000アイテム再現テストで300万件のアイテム書込/読込でアイテム喪失なしを確認
  • リンクリストの遅延削除とダイレクトハンドオフ時のキャンセルされたリーダースキップについても決定論的テストカバレッジが追加されています

#132082 Remove unneeded DebuggerU2MCatchHandleFrames

  • 作成者: @jkoritzinsky
  • 作成日時: 2026年08月10日 16:22:41(UTC)
  • マージ日時: 2026年08月21日 17:48:53(UTC)
  • ラベル: area-VM-coreclr

概要

unmanaged-to-managed (U2M)のトランジション時に、管理コード側で既にtry-catch ブロックで保護されるようになったため、不要になったDebuggerU2MCatchHandlerFrameを削除し、関連コードを簡潔化するPR。また、ComWrappersのInterop呼び出しパスで例外を不要にrethrowするパターンを排除し、例外を out-parameterで直接取得する方式に変更。

変更内容

  • frames.h: DebuggerU2MCatchHandlerFrameからcatchesAllExceptions状態フラグを削除し、コンストラクタを更新
  • jitinterface.cpp: CEEInfo::runWithErrorTrapからデバッガ catch-handler frameを削除
  • dispatchinfo.h/cpp: InvokeMemberDebuggerWrapperヘルパー関数を完全削除。InvokeMemberWorkerを直接呼び出すように簡潔化(削除行数が128→17と大幅削減)
  • interoplibinterface_comwrappers.cpp: CallICustomQueryInterface呼び出しを、throw/rethrow パターンから例外 out-parameterを用いた直接呼び出し(InvokeDirect_Ret)に変更
  • exceptionhandling.cpp: topmost DebuggerU2MCatchHandlerFrameに関する"unhandled by runtime"チェックを簡潔化
  • threads.cpp: DebuggerU2MCatchHandlerFrame構築時に新しいシグネチャに対応

パフォーマンスへの影響

影響なし(リファクタリング・コード削減によるメンテナンス性向上が主目的)

関連Issue

なし

その他

Copilotのレビューで指摘: src/coreclr/vm/frames.h内の注記がまだ古い状態(DispatchInfo::InvokeMemberのみで使用と記載されているが、実際にはManagedThreadBase_DispatchOuterなど他の場所でも使用)。


#131972 Remove a few unsafe blocks from Decimal.DecCalc.cs

概要

Decimal.DecCalc.cs内の一部のunsafeブロックを削除し、安全なC#コードに置き換える変更です。メモリ安全性を向上させながら機能の保持を目指しています。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Decimal.DecCalc.cs
    • 複数のunsafeブロックを削除
    • ポインタ操作を安全な配列操作またはマネージドコードに置き換え
    • 全体で148行の差分(+188/-140)

パフォーマンスへの影響

影響なし(変更内容から性能への悪影響は確認できません。ただしベンチマーク結果の詳細は提供されていません)

関連Issue

なし

その他

  • Decimal型は基本的な数値型であり、Decimal.DecCalcは内部計算ロジックを担当しているため、本変更は公開APIには影響しない内部実装の改善です
  • unsafeブロックの削除により、コード検査ツールの対象範囲が拡大し、潜在的な問題検出が容易になる可能性があります
  • 複数のレビュワーによる確認が行われており、特にtannergooding氏による集中的なレビューが実施されています

#131686 Add reproZero NativeAOT compiler project

概要

NativeAOT コンパイラの bring-up シナリオ(特に WebAssembly 対応)をサポートするため、完全な .NET ランタイムを必要としない「runtime-less」repro プロジェクト reproZero を追加します。最小限の in-source「system module」(zerosharp.cs) を提供し、ILC(IL Compiler)を直接呼び出すための .rsp ファイルを生成します。

変更内容

  • reproZero.csproj: NoStdLib オプションでビルドされ、フレームワーク参照なしで、ILC コンパイル用の .rsp レスポンスファイルを生成するプロジェクト
  • zerosharp.cs: 最小限の System.* 型と ILC コンパイルに必要な StartupCodeHelpers エクスポートを実装した system module ファイル
  • ILCompiler.props: プロジェクト設定への統合

パフォーマンスへの影響

影響なし

関連Issue

#126633

その他

  • 新規プロジェクトは Platforms リストに wasm を含め、WebAssembly bring-up シナリオをサポート
  • 完全な CoreLib/runtime なしでコンパイル可能なため、軽量な AOT コンパイル検証ツールとして機能

#131278 [release/10.0] Fix handling of non-ASCII data in CBOR indefinite strings

概要

CBOR形式の不定長テキスト文字列読み込み時に、非ASCII文字データを含む場合の処理を修正します。TryReadTextStringメソッドが書き込み位置をUTF-8バイト数ではなく書き込まれた文字数だけ進めるよう修正し、バッファサイズ検証エラーを解決します。.NET 5以来の既存の不具合です。

変更内容

  • CborReader.String.cs: TryReadIndefiniteLengthTextStringConcatenatedメソッドにおいて、宛先スパンのスライス処理をチャンクのバイト長ではなく実際に書き込まれた文字数(chunkCharsWritten)で進めるよう修正
  • CborReaderTests.TextString.cs: 非ASCII文字("São Paulo"、"München"、キリル文字など)を含むテキストの成功/失敗パターンのテストカバレッジを拡充

パフォーマンスへの影響

影響なし。この変更は正確性の修正であり、パフォーマンス特性に変化はありません。

関連Issue

#131235

その他

  • 本PRはrelease/10.0ブランチへのバックポート
  • リスク評価は低。既存のASCIIおよび最終位置のみUnicode対応テストでは回帰がなく、新規テストで非ASCII中間配置も正常に動作することを確認済み
  • 顧客報告のバグ

#131184 Clean up ifdef in vxsort

概要

vxsort(ガベージコレクション内のベクトル化されたソート実装)のプリプロセッサ条件分岐を整理し、clang-clのようなClangベースのツールチェーン(__GNUC__を定義しない)でも#pragma clang attributeターゲット有効化が機能するように修正しました。__GNUC__の入れ子条件を#if defined(__clang__) ... #elif defined(__GNUC__) ...構造に変更し、vxsortヘッダーとコード生成テンプレート両方に適用しています。

変更内容

  • vxsort/*.h (4ファイル): ポップカント/AVX512/AVX2ターゲット有効化の条件分岐を__clang__を優先する構造に統一
  • codegen/*.py (2ファイル): コード生成テンプレートの条件分岐構造を更新
  • *.generated.h (4ファイル): コード生成の出力結果を同期的に更新

すべての変更は内部実装(ガベージコレクター内部のvxsort実装)に限定されており、公開APIへの影響はありません。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

コンパイラー検出の条件順を変更することで、Windows上のclang-clツールチェーンでvxsortの最適化されたAVX512/AVX2バージョンが正しく有効になるようになります。これは.NET ランタイムのコンパイル時の動作に関連する内部実装の修正です。


目次