注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #129190 Update --bootstrap docs with current reality
- #129187 JIT: fix loop cloning condition for decreasing loops with array-length limit
- #129173 [browser] Enable app UnmanagedCallersOnly Wasm.Build.Tests on CoreCLR
- #129151 Redo 128735 with NAOT exclusion
- #129148 JIT: Narrow long comparisons of sign-extended ints to int in VN
- #129143 Fix return type misclasiffication in TransitionBlock.cs
- #129139 Remove redundant
commandline.hinclude instreamingsuperpmi.cpp - #129132 [ci-scan-feedback] Fix push to existing feedback PR on scheduled runs
- #129129 Implement X25519 for Android
- #129125 Pool the dictionary buffer when training a Zstandard dictionary
- #129123 Revert "Skipping EDI in the runtime-async case as well"
- #129122 Zip async correctness fix
- #129102 [Wasm R2R] Retype integer constant struct returns to the native return type
- #129095 [Wasm R2R] Fix two crossgen2 NYIs: FloatTraits::NaN and bitcast of same-size types
- #129062 [Wasm RyuJit] Match how other targets consume initblk fill values
- #129061 [Wasm / RyuJit]: implement CKFINITE
- #128991 [ci-scan] Add ci-failure-fix workflow
- #128977 [ci-scan-feedback] Add full-leg failure detection to prevent per-test KBE flood
- #128961 Share
ObjectiveCMarshalreference-tracking logic between CoreCLR and NativeAOT - #128956 [main] Source code updates from dotnet/dotnet
- #128913 Fix COM interface method calling wrong method for base/derived classes
- #128909 [release/10.0] JIT: Fix CEA cloning when enumerator local is reassigned from an untracked source
- #128894 [release/10.0] Fix NativeAOT string GC config handling
- #128872 [cDAC] GC stress verification framework + pipeline integration
- #128728 Resume after catch for interpreter via native EH
- #128448 Bump iOS simulator arm64 Helix queue to OSX.26 and centralize iOS-family queues
- #127743 Allow HostFactoryResolver to listen on arbitrary events
- #126712 Dispose IAsyncEnumerable enumerators inline during property-based JSON serialization
- #126705 Implement SafeProcessHandle.Open/TryOpen and Process.TryGetProcessById
- #126623 Fix NegotiateAuthentication to surface TargetUnknown status for unknown SPNs
- #126341 [release/9.0] Update dependencies from dotnet/arcade
- #126004 [release/8.0] Update dependencies from dotnet/cecil
#129190 Update --bootstrap docs with current reality
- 作成者: @am11
- 作成日時: 2026年06月09日 20:40:38(UTC)
- マージ日時: 2026年06月09日 22:44:30(UTC)
- ラベル: area-Infrastructure community-contribution
概要
--bootstrap ドキュメントを現在の実装状況に合わせて更新するPRです。ArchiveTests=true パラメータが個別ライブラリビルドでも機能するようになったことを反映しています。
変更内容
- docs/workflow/building/coreclr/cross-building.md: ドキュメント更新(+6/-3)
- bootstrap ビルドに関するドキュメントを現在の実装の実態に合わせて修正
ArchiveTests=trueがライブラリビルドで機能することを追加
パフォーマンスへの影響
影響なし(ドキュメント更新のみ)
関連Issue
なし
その他
このドキュメント更新では、実際の動作確認として System.Formats.Nrbf ライブラリのテストを UseBootstrap=true および ArchiveTests=true フラグを指定してビルドし、テストが正常にアーカイブされることを確認しています。
#129187 JIT: fix loop cloning condition for decreasing loops with array-length limit
- 作成者: @AndyAyersMS
- 作成日時: 2026年06月09日 18:37:54(UTC)
- マージ日時: 2026年06月09日 23:01:06(UTC)
- ラベル: area-CodeGen-coreclr
概要
JITのループクローニング条件導出ロジックにおいて、配列長を上限とする減少ループで、ループ初期値(init)ではなく誤ってループ上限(limit)に基づいて境界チェック条件が生成される不具合を修正しました。optDeriveLoopCloningConditionsのHasArrayLengthLimitブランチで、identの上書きを増加ループのみに制限することで、減少ループが正しく初期値ベースの条件を保持するようにしています。
変更内容
- loopcloning.cpp:
HasArrayLengthLimit分岐内でidentの上書きをisIncreasingLoopでガード。増加ループのみ上書きを許可し、減少ループは初期値から導出されたidentを維持。 - Runtime_129176.cs: 新規JIT回帰テスト。配列長上限とインデックス配列が異なる減少ループで、初期値がアウト・オブ・バウンズ時に
IndexOutOfRangeExceptionを正しく投げることを確認。 - Regression_ro_2.csproj: テストソースファイルを新規追加。
パフォーマンスへの影響
影響なし(バグ修正であり、最適化の削減ではなく正確性の改善)。
関連Issue
その他
なし
#129173 [browser] Enable app UnmanagedCallersOnly Wasm.Build.Tests on CoreCLR
- 作成者: @radekdoulik
- 作成日時: 2026年06月09日 14:43:51(UTC)
- マージ日時: 2026年06月09日 17:09:49(UTC)
- ラベル: arch-wasm area-Infrastructure-coreclr
概要
App-level [UnmanagedCallersOnly] メソッドがCoreClR-Wasmで正常に動作するようにするための修正。Release配信時のネイティブリリンク設定と、PInvokeTableGeneratorの戻り値処理を改善し、従来Mono専用だったテストをCoreClRでも実行可能にします。
変更内容
BrowserWasmApp.CoreCLR.targets: トリムされたアプリをReleaseで配信する際に、デフォルトで
WasmBuildNativeをtrueに設定。これまではネイティブリファレンスやAOTなど特定条件下でのみリリンクが発生し、アプリの逆サンク(reverse thunks)がdotnet.native.wasmに組み込まれていませんでした。coreclr/PInvokeTableGenerator.cs: エクスポートされた逆サンク・ラッパーで、メソッドの実際の戻り値型を使用して値を転送するよう修正。従来は
voidがハードコードされており、非void返却のUCOメソッドではWasm関数シグネチャのミスマッチが発生していました。Wasm.Build.Tests/PInvokeTableGeneratorTests.cs:
UnmanagedCallersOnly_NamespacedとUCOWithSpecialCharactersテストをMono専用から削除し、CoreClRでも実行可能に変更。
パフォーマンスへの影響
影響なし
関連Issue
その他
修正前は、非void返却のUCOメソッドでWasmネイティブコードまたはマネージドコードから呼び出す際に、ランタイムアサーションGetUnmanagedCallersOnlyThunk: unknown thunkが発生し、wasm-ld警告とRuntimeError: unreachableが生じていました。
#129151 Redo 128735 with NAOT exclusion
- 作成者: @rcj1
- 作成日時: 2026年06月09日 02:20:48(UTC)
- マージ日時: 2026年06月09日 07:14:43(UTC)
- ラベル: area-System.Diagnostics
概要
スタックトレースのフォーマット処理を改善し、MethodImplAttributes.Asyncフラグに基づいてランタイム非同期メソッドを正しく"async"として扱うようにしました。これにより、EDI(Exception Dispatcher Interop)境界マーカーが不適切に付与されるのを防ぎます。NativeAOT上では回帰がないため、そのプラットフォーム上でのテストアサーションをスキップしています。
変更内容
- StackTrace.cs:
StackTrace.ToString()でMethodImplAttributes.Asyncフラグを参照してisAsyncを初期化。ランタイム非同期メソッドのEDI境界テキスト出力を抑制 - StackTraceTests.cs: ランタイム非同期メソッドの呼び出しチェーン(
EdiOuter→EdiMiddle→EdiInner)を追加し、スタックトレース形式を検証するリグレッションテストを実装。NativeAOT環境ではアサーション除外
パフォーマンスへの影響
影響なし
関連Issue
その他
本PRはPR #128735のやり直し版です。NativeAOTでの回帰がないため、NativeAOT V1メソッドの場合は区切り文字が生成されますが、テストのスキップによって対応しています。
#129148 JIT: Narrow long comparisons of sign-extended ints to int in VN
- 作成者: @EgorBo
- 作成日時: 2026年06月09日 01:30:48(UTC)
- マージ日時: 2026年06月09日 22:01:54(UTC)
- ラベル: area-CodeGen-coreclr
概要
JIT値番号付け(Value Numbering)の最適化により、符号拡張された整数値の長整数比較を整数比較に狭められるようにしました。これにより、アサーション伝播や境界チェック削除などの下流最適化が、より広い範囲で適用できるようになります。
変更内容
- src/coreclr/jit/valuenum.cpp
VNIgnoreIntToLongCastを拡張し、ソースが負でないことが証明されている場合にゼロ拡張int→(u)long キャストも対象にしましたEvalUsingMathIdentityに折り畳み処理を追加し、両オペランドがTYP_INTに縮約可能な場合にlong比較をint比較に狭めるようにしましたIgnoreVNIntToLongで符号なし比較を有効化しました
パフォーマンスへの影響
下流最適化(アサーション伝播、境界チェック削除など)がより多くのケースで適用可能になるため、コード生成の最適化機会が増加します。具体的なベンチマーク結果は提供されていません。
関連Issue
なし
その他
本変更は内部的なJIT最適化パス(値番号付け)の改善であり、公開APIへの影響はありません。
#129143 Fix return type misclasiffication in TransitionBlock.cs
- 作成者: @janvorli
- 作成日時: 2026年06月08日 23:12:50(UTC)
- マージ日時: 2026年06月09日 20:01:55(UTC)
- ラベル: area-crossgen2-coreclr
概要
System V AMD64(x64 Unix)における構造体の戻り値分類ロジックの修正。ComputeReturnValueTreatmentメソッドで、2つのeightbyteがある場合に2番目のeightbyteの分類が誤って1番目の分類を再チェックしていたため、第1eightbyteがSSE分類で第2eightbyteが異なる分類の場合に誤分類が発生していました。この誤分類はGC holeにつながる可能性があります。
変更内容
- src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/TransitionBlock.cs:
- 2番目のeightbyteの分類チェックで
eightByteClassifications0の再確認を行う誤りを修正 eightByteClassifications1を正しく参照するよう修正(1行変更)
- 2番目のeightbyteの分類チェックで
パフォーマンスへの影響
直接的なパフォーマンス改善ではなく、正確性の修正。ただし、この修正によりx64 Unix上のレジスタ渡し構造体の戻り値処理が正しく分類されることで、GC holeのような深刻なランタイム問題の発生を防ぎます。
関連Issue
その他
- この修正はReadyToRun(事前コンパイル)のトランジションブロック生成に関わる内部実装の修正です
- x64 Unix環境でのみ影響を持つ、構造体を引数としてレジスタで受け渡す際の分類ロジックです
- セキュリティと正確性に関わる重要な修正(GC hole防止)
#129139 Remove redundant commandline.h include in streamingsuperpmi.cpp
- 作成者: @Copilot
- 作成日時: 2026年06月08日 21:17:28(UTC)
- マージ日時: 2026年06月09日 01:45:45(UTC)
- ラベル: area-CodeGen-coreclr
概要
SuperPMI streaming toolのstreamingsuperpmi.cppファイルから重複している#include "commandline.h"を削除しました。ファイルには必要なincludeが残されており、動作上の変更はありません。
変更内容
- src/coreclr/tools/superpmi/superpmi/streamingsuperpmi.cpp
- 重複していた
#include "commandline.h"を削除(1行削除) - 必要なinclude(
#include "spmiutil.h"、#include "fileio.h"など)は変更なし
- 重複していた
パフォーマンスへの影響
影響なし
関連Issue
#127295の指摘に対応
その他
- この変更はSuperpmiツール内部の軽微なクリーンアップであり、公開APIや主要ランタイムに影響はありません
- コンパイル時間がわずかに短縮される可能性があります
#129132 [ci-scan-feedback] Fix push to existing feedback PR on scheduled runs
- 作成者: @kotlarmilos
- 作成日時: 2026年06月08日 14:52:39(UTC)
- マージ日時: 2026年06月09日 09:51:25(UTC)
- ラベル: area-Infrastructure
概要
CI Outer-Loop Failure Scanner — Feedbackワークフローはスケジュール実行時にトリガーとなるPull Requestが存在しないため、既存の[ci-scan-feedback]フィードバックPRへのプッシュと更新に失敗していました。本PRは、safe-outputsの設定をtarget: "*"に変更し、スケジュール実行時でも発見された既存PRを対象に操作できるように修正しています。
変更内容
.github/workflows/ci-failure-scan-feedback.md:push-to-pull-request-branchとupdate-pull-requestのtargetを"triggering"から"*"に変更し、push-to-pull-request-branchにtitle-prefix: "[ci-scan-feedback] "制約を追加してフィードバックPRのみを対象化.github/workflows/ci-failure-scan-feedback.lock.yml:gh aw compileで再生成(v0.71.5)し、更新されたsafe-outputs設定を反映
パフォーマンスへの影響
影響なし
関連Issue
その他
スケジュール実行時にpush-to-pull-request-branchとupdate-pull-requestがトリガーPRコンテキストなしで失敗していたため、エージェントがPRを更新する代わりにIssueにパッチを添付していました。本修正により、ワークフローはランタイムに発見された[ci-scan-feedback]フィードバックPRに直接プッシュできるようになります。
#129129 Implement X25519 for Android
- 作成者: @vcsjones
- 作成日時: 2026年06月08日 14:06:39(UTC)
- マージ日時: 2026年06月09日 01:18:13(UTC)
- ラベル: area-System.Security os-android cryptographic-docs-impact
概要
AndroidプラットフォームでX25519楕円曲線暗号によるDiffie-Hellman鍵交換をサポートするための実装を追加します。Androidのネイティブ実装の特殊性に対応するため、SubjectPublicKeyInfo/PKCS#8形式への鍵のトランスコーディングと、秘密鍵から公開鍵を復元する機能を実装しています。秘密鍵から公開鍵を復元する際は、X25519(9, privateKey)を計算することで実現しています(9はベースポイントのu座標)。
変更内容
- ネイティブ実装(C):
pal_x25519.c/hでAndroidのXDH APIを使用したX25519操作(鍵生成、インポート/エクスポート、秘密導出)を実装 - マネージド実装:
X25519DiffieHellmanImplementation.Android.csでAndroid固有の鍵処理(SPKI/PKCS#8トランスコーディング、秘密鍵からの公開鍵復元)を実装 - 相互運用層:
Interop.X25519.csでネイティブエントリーポイントのP/Invoke定義とSafeHandleラッパーを追加 - 共有ヘルパー:
X25519DiffieHellman.csからSPKI/PKCS#8ライター関連の処理を抽出し、KeyFormatHelper.csに「パラメータ許可」フラグオプションを追加 - テスト:
X25519DiffieHellmanImplementationTests.csのプラットフォームサポート条件をAndroid API 33以上に更新 - ビルド設定: CMakeLists.txtに
pal_x25519.cを追加、JNI初期化処理をpal_jni.c/hに追加
パフォーマンスへの影響
影響なし
関連Issue
その他
- 互換性: Android API 33以上でのサポート。破壊的な変更はなし
- 実装の特殊性: Androidは秘密鍵と公開鍵を別個のハンドルとして扱うため、秘密鍵インポート時には自動的にX25519(9, privateKey)を実行して公開鍵を復元し、完全な鍵ペアを再構成する必要がある点が特徴です
- 公開API:
System.Security.Cryptography.X25519DiffieHellmanの既存公開APIに対する変更はなく、Android環境での実装サポート追加のみ
#129125 Pool the dictionary buffer when training a Zstandard dictionary
- 作成者: @alinpahontu2912
- 作成日時: 2026年06月08日 12:30:01(UTC)
- マージ日時: 2026年06月09日 16:22:36(UTC)
- ラベル: area-System.Collections
概要
ZstandardDictionary.Trainメソッドが、訓練済み辞書を保持するバッファを毎回新規割り当てしていたのを、ArrayPool<byte>.Sharedからレンタルするように変更しました。これにより、推奨される~100KB(zstd CLI デフォルトは112,640バイト)のサイズでLarge Object Heap(LOH)に着地していた割り当てを削減します。
変更内容
- ZstandardDictionary.cs:
new byte[maxDictionarySize]をArrayPool<byte>.Shared.Rent(maxDictionarySize)に置き換え、訓練バッファの返却をfinallyブロックで実装(clearArray: trueを指定)
パフォーマンスへの影響
改善あり:大幅な割り当て削減
推奨サイズ(100KB以上)でのTrain呼び出しにおいて:
- 変更前:毎回約100~112KB の LOH割り当て(GC世代2でのみ回収可能)
- 変更後:定常状態で1回あたり0Bの割り当て
実測値(1,000イテレーション、Release build、Workstation GC):
- 100KB(zstd推奨):102,424 B → 0 B(100%削減)
- 110KB(zstd CLIデフォルト):112,664 B → 0 B(100%削減)
- 4KB~1MB全サイズで同様の削減効果
関連Issue
その他
- 変更は内部実装のみで、公開APIに互換性上の影響なし
clearArray: trueにより、プールされたバッファが呼び出し元のデータを保持しないことを保証- .NET LOH閾値は85,000バイトで、推奨辞書サイズはこれを超えるため、LOH割り当てが頻発していた
#129123 Revert "Skipping EDI in the runtime-async case as well"
- 作成者: @steveisok
- 作成日時: 2026年06月08日 12:05:30(UTC)
- マージ日時: 2026年06月09日 01:30:25(UTC)
- ラベル: area-System.Diagnostics
概要
PR #128735で実装されたランタイム非同期ケースにおけるEDI("--- End of stack trace from previous location ---")スキップ機能を、そのコミットを取り消して元の動作に戻すものです。非同期フレーム検出をコンパイラ生成のステートマシン型チェックに依存させるよう復帰させます。
変更内容
- src/libraries/System.Private.CoreLib/src/System/Diagnostics/StackTrace.cs: 非同期フレーム検出ロジックをリバートし、
MethodImplAttributes.Asyncに基づく検出ではなく、コンパイラ生成のステートマシン型チェックに戻しました。 - src/libraries/System.Diagnostics.StackTrace/tests/StackTraceTests.cs: ランタイム非同期関連のEDI特化テストメソッド32行を削除し、EDI境界マーカー不含アサーション検証を削除しました。
パフォーマンスへの影響
影響なし
関連Issue
#128735 をリバート
その他
このリバートは、非同期例外スタックトレースでのEDI境界マーカー抑止の実装に問題があった、または期待した動作と異なっていたことを示唆しています。
#129122 Zip async correctness fix
- 作成者: @alinpahontu2912
- 作成日時: 2026年06月08日 11:51:29(UTC)
- マージ日時: 2026年06月09日 13:20:33(UTC)
- ラベル: area-System.IO.Compression
概要
ZipArchiveの非同期読込時に、アーカイブコメント読込が同期的に行われていたのを修正。ZipEndOfCentralDirectoryBlock.ReadBlockAsync内でReadExactlyAsyncを使用するよう変更し、非同期パスの完全性を確保しました。
変更内容
- ZipBlocks.Async.cs:
ReadBlockAsyncメソッド内でアーカイブコメント読込時の同期ReadExactly呼び出しをawait ReadExactlyAsync(..., cancellationToken)に置き換え - zip_ReadTests.cs: 非同期ZIP読込時に同期
Stream.Read/Stream.ReadByteが呼び出されないことを検証する回帰テストを追加(CallTrackingStreamを使用)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
この修正は、非同期コンテキストで同期読込が混在することによる潜在的なデッドロックやスレッドプール枯渇を防ぐための正確性修正です。ライブラリの公開API(System.IO.Compression)の非同期実装の信頼性向上に関わります。
#129102 [Wasm R2R] Retype integer constant struct returns to the native return type
- 作成者: @lewing
- 作成日時: 2026年06月07日 22:05:54(UTC)
- マージ日時: 2026年06月09日 19:53:42(UTC)
- ラベル: area-CodeGen-coreclr
概要
WebAssembly JITにおいて、構造体の戻り値がプリミティブ型にリタイプされる際、整数定数の戻り値の型がネイティブ戻り値型と一致していない問題を修正します。WebAssemblyは型付きのバリュースタックを持つため、型の不一致によりコード生成が失敗していました(例:i64戻り値に対してi32.const 0を生成)。本修正により、System.Runtime.Intrinsics.Vector64<byte>.get_Zeroなどの小さな構造体定数戻りがWebAssembly R2Rコンパイルで正しく動作するようになります。
変更内容
- src/coreclr/jit/lower.cpp:
Lowering::LowerRetStruct内でTARGET_WASMガード下において、GT_CNS_INTの戻り値定数をネイティブ戻り値型に合わせてリタイプするロジックを追加(+10行)。WebassemblyのバリュースタックがLLVMやCPUレジスタと異なり型付きであることに対応。
パフォーマンスへの影響
影響なし。本修正はWebAssembly生成の正確性を改善するもので、パフォーマンスには直結しません。
関連Issue
なし
その他
- 本修正は
TARGET_WASMガード下であり、ブラウザ向けおよびWasi向けWebAssemblyターゲットに適用されます。他のターゲットへの影響はありません。 - System.Private.CoreLibのR2Rコンパイル版がwasmtimeの検証に全体として合格するようになりました(修正前は
Vector64<byte>.get_Zeroで「type mismatch: expected i64, found i32」エラーで検証失敗)。 - 作成者は回帰テストの追加を保留しており、System.Private.CoreLib自体に該当メソッドが含まれるため、モジュール検証段階で暗黙的にバグが検出されることを理由としています。
#129095 [Wasm R2R] Fix two crossgen2 NYIs: FloatTraits::NaN and bitcast of same-size types
- 作成者: @AndyAyersMS
- 作成日時: 2026年06月07日 14:28:54(UTC)
- マージ日時: 2026年06月09日 22:38:24(UTC)
- ラベル: area-CodeGen-coreclr
概要
WASM向けReadyToRun(R2R)コンパイルにおいて、2つのクロスgen2 NYI(Not Yet Implemented)を解決します。FloatTraits::NaNとDoubleTraits::NaNをWebAssemblyの標準NaNパターンで実装し、同一サイズのビットキャストをno-opとして処理することで、不要な命令生成を削減します。
変更内容
- src/coreclr/jit/valuenum.cpp:
TARGET_WASM向けにFloatTraits::NaNとDoubleTraits::NaNの実装を追加。WebAssemblyの標準NaNペイロードを使用して浮動小数点定数畳み込みに対応 - src/coreclr/jit/codegenwasm.cpp:
genCodeForBitCastで同一サイズのビットキャストをno-opとして扱い、命令を生成しないように最適化。既存のunreached()をWASM向けのNYI処理に変更
パフォーマンスへの影響
同一サイズのビットキャスト操作が命令を生成しなくなるため、生成されるWASMコードサイズが削減される可能性がありますが、具体的なベンチマーク数値は提供されていません。
関連Issue
なし
その他
Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com
#129062 [Wasm RyuJit] Match how other targets consume initblk fill values
- 作成者: @AndyAyersMS
- 作成日時: 2026年06月06日 01:04:06(UTC)
- マージ日時: 2026年06月09日 14:06:25(UTC)
- ラベル: area-CodeGen-coreclr
概要
WebAssembly RyuJIT コードジェネレータで GT_STORE_BLK 処理時に、initblk の塗りつぶし値が contained GT_INIT_VAL でラップされている場合の処理を修正しました。genConsumeRegs を経由せず、他のターゲットと同様に明示的にラップ解除した値を消費するようにすることで、非リーフ含有ノードに対する OperIsLeaf アサーション失敗を解決します。
変更内容
- src/coreclr/jit/codegenwasm.cpp:
genConsumeOperands(blkOp)の呼び出しを削除し、srcが containedGT_INIT_VALの場合にdestとgtGetOp1()で取得したラップ解除されたソース値を明示的に消費するように変更 GT_INIT_VALが含有されるべきという不変式をドキュメント化するアサーションを追加
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このPRは、WebAssembly ターゲットのコードジェネレータロジックを、x86/ARM など他のターゲットの実装パターンと統一するものです。contained ノードの処理方法の一貫性を改善し、ランタイムアサーション失敗を防ぎます。
#129061 [Wasm / RyuJit]: implement CKFINITE
- 作成者: @AndyAyersMS
- 作成日時: 2026年06月05日 23:31:22(UTC)
- マージ日時: 2026年06月09日 16:57:02(UTC)
- ラベル: area-CodeGen-coreclr
概要
WebAssembly(RyuJIT)向けにGT_CKFINITE命令のコード生成サポートを追加しました。浮動小数点数の有限性チェック(NaN/±Infの検出)をWasm環境で実装し、指数ビットのマスキングおよびテストよりも短いシーケンスで実現しています。
変更内容
- codegenwasm.cpp:
GT_CKFINITEディスパッチの追加とgenCkfiniteWasm出力ロジックの実装(+79行) - lowerwasm.cpp:
LowerCkfinite関数を追加し、オペランドをMultiplyUsedとしてマークしてWasmコード生成を可能に(+15行) - regallocwasm.cpp:
GT_CKFINITE処理を追加し、multiply-usedオペランド用の一時ローカル変数の確保・解放を管理(+4行) - lower.cpp/lower.h: Wasm限定の新規ローリング補助関数
LowerCkfiniteの宣言と配線(+4行、+1行)
パフォーマンスへの影響
浮動小数点有限性チェックの実装により、従来の指数ビットマスキングおよびテスト方式よりもコード長が短くなることが期待されます。具体的な数値は記載されていません。
関連Issue
その他
変更はJITコンパイラのWasm向けコード生成パスに限定される内部実装の変更です。公開APIへの影響はありません。
#128991 [ci-scan] Add ci-failure-fix workflow
- 作成者: @kotlarmilos
- 作成日時: 2026年06月04日 15:57:31(UTC)
- マージ日時: 2026年06月09日 09:37:12(UTC)
- ラベル: area-skills
概要
CI外側ループの障害対応を自動化する新しいエージェントワークフロー ci-failure-fix を導入し、既存の「テストをミュート/無効化」アプローチを「実際の修正またはオーナーへの引き継ぎ」に置き換えます。スキャナをKBE(Known Build Errors)検出専用に縮小し、新ワークフローで確実な修正PR・ヘルプ要求PR・最終手段としてのコメント送信を3段階で実施します。
変更内容
- ci-failure-scan.md/.lock.yml: スキャナプロンプトを検出のみに簡素化し、テスト無効化PR生成機能と権限を削除
- ci-failure-fix.md/.lock.yml: 新たなミティゲーションワークフロー。確実な修正は
[ci-fix]PRを、不確実な場合は[ci-fix] Needs review:PRを、修正不可能な場合(JIT/GC/セキュリティ/インフラ関連)はコメント送信を実施。テストのミュート/無効化/スキップは一切行わない - ci-failure-scan-feedback.md/.lock.yml: スキャナと修正器の結果を分別評価し、確実な修正PRとヘルプ要求PRのKPIを分離。共有プロンプト編集機能を拡張
- shared/area-skills.instructions.md: 新規作成。複数エージェント間で再利用可能な領域・スキル・オーナーメンション指導をまとめた共有リソース
- shared/create-kbe.instructions.md: KBE作成命令を追加
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このワークフロー変更はCI内部の自動化ロジック(.github/workflows配下)のみで、ランタイムコンパイラやライブラリの実装に直接の影響はありません。ハードルール:1つのKBEに対して必ず1つの成果物(修正PR1件、またはコメント1件)を生成し、スパム防止のため1KBEあたり最大1つの修正PRと1つのコメント、既に関連PRが存在する場合はスキップします。
#128977 [ci-scan-feedback] Add full-leg failure detection to prevent per-test KBE flood
- 作成者: @Copilot
- 作成日時: 2026年06月04日 08:40:31(UTC)
- マージ日時: 2026年06月09日 09:26:40(UTC)
- ラベル: area-Infrastructure
概要
CI外側ループ失敗スキャナーが、レグ全体が落ちている場合(例:arm32 NativeAOTテストすべてがSIGBUSでクラッシュ)にN個の重複したKBE(Known Build Error)を生成する問題に対応しています。レグ単位の障害検出ルールを追加し、80%以上のワークアイテムが失敗した場合は複数の個別テストKBEではなく、1つのレグスコープKBEのみを作成するように改善しました。これにより、KBE生成の氾濫と既存Issueの重複クローズを防ぎます。
変更内容
- .github/workflows/ci-failure-scan.md
- Step 5(レグ単位失敗検出ルール): ワークアイテム失敗比率が80%を超える場合、
(definition_id, leg)をキーとした単一のレグスコープKBEを共有クラッシュシグナル(共通の終了コード/シグナル/アサーション)で生成し、Known Build Errorとblocking-clean-ciラベルを付与。個別テスト署名処理をスキップします。 - Step 6(スキップ理由語彙の拡張):
leg-level failure filed as #aw_<id>を認識済みスキップ理由リストに追加し、集計の安定性を維持します。
- Step 5(レグ単位失敗検出ルール): ワークアイテム失敗比率が80%を超える場合、
パフォーマンスへの影響
影響なし(ドキュメント変更のみ)
関連Issue
なし
その他
本変更はドキュメント専用の変更(.github/workflows/ci-failure-scan.md)で、実際のコード変更は含まれません。差分は3行追加、1行削除です。
#128961 Share ObjectiveCMarshal reference-tracking logic between CoreCLR and NativeAOT
- 作成者: @Copilot
- 作成日時: 2026年06月03日 20:13:24(UTC)
- マージ日時: 2026年06月09日 14:28:59(UTC)
- ラベル: area-Diagnostics-coreclr
概要
Objective-C相互運用機能において、CoreCLRとNativeAOTで異なっていた参照追跡メモリの実装を統一するリファクタリング。CoreCLRをConditionalWeakTable<object, ObjcTrackingInformation>モデルに移行し、syncblkのタグ付きメモリストレージを廃止。これにより、両ランタイムで同じ管理CWT(ConditionalWeakTable)ベースの参照追跡実装を共有。
変更内容
主要な変更:
- CoreCLR側ObjectiveCMarshal(マネージド層):
s_objectsCWTを新規追加し、ObjcTrackingInformationのライフサイクル管理をCWTで統一 - CoreCLR側ネイティブ相互運用パス:syncblk内のObjective-C特有のタグ付きメモリストレージを廃止し、
ConditionalWeakTableObject::TryGetValueによる管理CWT参照に置換 - QCall簡素化:ネイティブ側は参照カウント済みハンドル割り当て(
ObjCMarshal_AllocateReferenceTrackingHandle)のみを担当 - ConditionalWeakTable(ネイティブ層):GCコールバック中のサスペンド状態での無ロック参照取得を可能化
- cDAC診断コントラクト:ObjectiveCMarshal_1を更新し、
s_objectsCWTおよびトラッキング情報を通じたタグ付きメモリ読み取りに対応 - syncblock構造体変更:
InteropSyncBlockInfoからタグ付きメモリフィールドを廃止
影響範囲:
- マネージド層パブリックAPI変更:なし(
ObjectiveCMarshalの外部インターフェースは不変) - ネイティブ側内部実装:QCall署名と相互運用ロジックを変更
- DAC/cDAC診断:新しいCWTベースモデルに対応
パフォーマンスへの影響
影響なし。CWTベースのメモリ参照は既にNativeAOTで実証済みの実装であり、パフォーマンス特性に変化なし。
関連Issue
その他
- この変更はObjective-CマーシャリングコードパスにおけるCoreClr/NativeAOT間のコード重複排除を目的とした内部実装統一
- 既存の外部的なObjectiveCMarshalのパブリックAPIには互換性への影響なし
- Monoランタイムにも軽微な更新が含まれるが、実装モデル自体の変更ではなく適応のみ
#128956 [main] Source code updates from dotnet/dotnet
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年06月03日 17:19:36(UTC)
- マージ日時: 2026年06月09日 17:34:37(UTC)
- ラベル: area-codeflow
概要
このPRは、dotnet/dotnetリポジトリからのコードフロー更新です。VMR(Virtual Monolithic Repository)を通じて、複数のリポジトリからソースコード変更と依存関係の更新を一括で取り込みます。主な更新対象は、Roslyn、Arcade SDK、NuGetツール、ランタイムコンポーネント、ASP.NET Core、WinForms、WPFなど、.NET開発スタックの広範なコンポーネントです。
変更内容
- バージョン管理ファイル:
eng/Version.Details.props、eng/Version.Details.xml、eng/Versions.propsの更新 - ビルド・デプロイ関連スクリプト:
eng/common/build.ps1、eng/common/build.sh、クロスコンパイル関連スクリプト(cross/build-rootfs.sh、cross/install-debs.py)の更新 - パイプライン構成: Helix監視テンプレート(
helix-job-monitor.yml)の追加、ログ公開ステップの修正 - ネイティブビルド:
CorInfoImpl.RyuJit.cs、_version.cなどのネイティブコンポーネント更新 - インストーラー関連: sfxパッケージング設定の更新
更新された主要依存関係:
- Microsoft.CodeAnalysis: 5.8.0 → 5.9.0(Roslyn)
- Microsoft.DotNet.Arcade.Sdk: 11.0.0-beta.26257.113 → 11.0.0-beta.26302.118
- Microsoft.NETCore.App.Ref: 11.0.0-preview.5 → 11.0.0-preview.6
- System.Text.Json、System.Reflection.Metadata、System.CommandLineなど複数の基盤ライブラリ
- NuGet関連パッケージ(7.7.0-rc → 7.9.0-rc)
- Mono LLVM、JIT、Wasm Node Runtime関連のプラットフォーム固有パッケージ
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 本PRは自動生成されたコードフロー更新(dotnet-maestro[bot])です
- 複数のリポジトリ(arcade、aspnetcore、roslyn、sdk、msbuild、nuget.client等)の最新の変更を同期しています
- VMR(dotnet/dotnet)を経由した一括同期で、複数の内部実装変更と依存関係アップグレードが含まれます
#128913 Fix COM interface method calling wrong method for base/derived classes
- 作成者: @elinor-fung
- 作成日時: 2026年06月02日 18:28:59(UTC)
- マージ日時: 2026年06月09日 21:52:32(UTC)
- ラベル: area-Interop-coreclr
概要
COM interop における基底クラスと派生クラスの間での ComMethodTable 共有時に、インターフェース メソッドが異なるターゲット メソッドに解決される場合の不正な動作を修正します。#126002 の変更により、ComMethodTable レイアウト時に派生クラスのオーバーライドが先に確定されると、基底クラスが間違ったメソッドを呼び出す問題が発生していました。
[ComVisible(true)]
public interface IFoo { void DoWork(); }
[ComVisible(true), ComDefaultInterface(typeof(IFoo))]
public class Base : IFoo { public virtual void DoWork() { } }
[ComVisible(true), ComDefaultInterface(typeof(IFoo))]
public class Derived : Base { public override void DoWork() { } }
変更内容
- comcallablewrapper.cpp: 新しい
CanShareComMethodTableWithParentチェックを追加し、親クラスのComMethodTable再利用時に解決されたメソッドの DispatchTarget を比較して、共有可否を判定するように変更(内部実装) - methodtable.cpp/methodtable.h: 不要になった
ImplementsInterfaceWithSameSlotsAsParentヘルパー メソッドを削除 - VirtualMethodOverrideTest.cs/csproj: 基底/派生クラスのアクセス順序に依存しない正しいメソッド呼び出しを検証する回帰テストを追加
パフォーマンスへの影響
影響なし
関連Issue
その他
- この修正は COM callable wrapper (CCW) の内部実装に限定されるため、公開APIへの影響はありません。
- 修正は基底クラス先にアクセスされた場合と派生クラス先にアクセスされた場合の両方のシナリオをカバーしています。
#128909 [release/10.0] JIT: Fix CEA cloning when enumerator local is reassigned from an untracked source
- 作成者: @github-actions[bot]
- 作成日時: 2026年06月02日 17:30:50(UTC)
- マージ日時: 2026年06月09日 17:17:39(UTC)
- ラベル: Servicing-approved area-CodeGen-coreclr
概要
.NET 10で導入されたJITエスケープ分析のバグを修正します。C#のコレクション式スプレッド演算子を使用した [.. a, .. b] の形式がTier1 + PGO環境下で誤コンパイルされ、第2のソースからの要素がnullのままになるサイレント データロス問題を解決します。
変更内容
- src/coreclr/jit/objectalloc.cpp: CEA(Collection Expression Analysis)のクローン時にエニュメレータローカルが追跡されていないソースから再割り当てされる場合の処理を修正(+15行)
- src/tests/JIT/Regression/JitBlue/Runtime_127075/: 問題を再現するJIT回帰テストを追加(C#ソースコード+51行、プロジェクトファイル+16行)
パフォーマンスへの影響
影響なし(バグ修正のみで、パフォーマンス特性の変化なし)
関連Issue
#127075(顧客報告)、#127079(本修正の元PR)
その他
- リスク評価: Low
- .NET 10のリリースブランチへのバックポートPR
- 修正前: 第2のコレクション式スプレッドの要素がコンパイルされず、結果配列の末尾要素が初期値(参照型ではnull)のままになる
- 修正後: 両方のスプレッドソースから正しく要素をコピーする
#128894 [release/10.0] Fix NativeAOT string GC config handling
- 作成者: @github-actions[bot]
- 作成日時: 2026年06月02日 12:57:52(UTC)
- マージ日時: 2026年06月09日 15:01:22(UTC)
- ラベル: Servicing-approved area-NativeAOT-coreclr
概要
NativeAOT発行時にGCHeapAffinitizeRanges設定が無視される問題を修正。RuntimeHostConfigurationOption、IlcArgオプション、または環境変数で指定された設定が正しく処理されず、Server GC heap threadがデフォルトのCPUアフィニティにフォールバックしていた。非AOTビルドでは正常に動作するため、NativeAOTランタイムの文字列設定値処理に限定された回帰。
変更内容
- RhConfig.cpp/h: 文字列設定値(
GCHeapAffinitizeRangesなど)をNativeAOTで正しく処理するロジックを追加。設定値の解析と検証機能を拡張。 - gcenv.ee.cpp: GC環境設定のセットアップ時に文字列設定値を適切に扱うよう修正。
- PalUnix.cpp/PalMinWin.cpp: プラットフォーム固有の設定処理を調整。
- GetConfigurationVariables.cs/csproj: テストケースを追加し、文字列設定値がNativeAOTで正しく反映されることを検証。
パフォーマンスへの影響
影響なし。設定値の処理ロジックの修正であり、ランタイム性能への直接的な影響はない。ただし、正しいGCHeapAffinitizeRanges設定が有効になることで、Server GC環境でのメモリアクセス局所性が改善される可能性あり。
関連Issue
#128396 - 顧客報告による問題
#128455 - 元のパッチ
その他
- リグレッション: なし
- リスク: 低 — 変更はNativeAOTの文字列設定値処理に限定され、従来無視されていた機能を正式に実装
- テスト: 顧客提供の再現アプリ、ローカルNativeAOTテスト、CIで検証済み
#128872 [cDAC] GC stress verification framework + pipeline integration
- 作成者: @max-charlamb
- 作成日時: 2026年06月01日 23:25:43(UTC)
- マージ日時: 2026年06月09日 18:59:46(UTC)
- ラベル: area-Diagnostics-cdac
概要
cDAC(CoreClr Data Access Component)のGCストレス検証フレームワークを追加します。このフレームワークは、cDACのスタック参照列挙をランタイムのGCルート報告と比較し、すべてのストレスポイントで検証します。ネイティブ比較器がメモリアロケーション時点でmscordaccore_universalをインプロセスロードし、cDACと実行時の両方に対してスタック参照を列挙させて正規化・照合します。
変更内容
- ネイティブストレス検証 (
src/coreclr/vm/cdacstress.cpp): アロケーショントリガーポイントでcDAC (ISOSDacInterface::GetStackReferences) とランタイム (StackWalkFrames+GcStackCrawlCallBack) の結果を比較し、フレームごとの一致/不一致/既知問題を構造化ログに出力 - REGDISPLAY対応 (
IsScratchStackSlotパリティ修正): マネージドcDACスタックウォーカーに統一フィルタを実装し、4つのプラットフォーム特性ファイルから不要な実装を削除 - xUnitテストハーネス + 9種デバッギー: BasicAlloc、Comprehensive、DeepStack、DynamicMethods、ExceptionHandling、Generics、MultiThread、PInvoke(Windows限定)、StructScenarios。各デバッギーは
DOTNET_CdacStress=0x001でcorerun実行後、ログ解析 - パイプライン統合:
runtime-diagnostics.ymlに新CdacStressTestsステージを追加。プラットフォーム別にCoreClR Checked + cDAC Releaseを構築してHelixで実行(デフォルト: windows_x64、windows_arm64、linux_x64、linux_arm64) - FlushScopeの導入: マネージドcDAC API(
Target/ContractRegistry/IContract)にスコープ対応フラッシュ機能を追加。LayoutSet生成ヘルパーに統合 - Linux向けprocess_vm_readv:
PAL_TRYの代わりにprocess_vm_readvを使用して、悪いアドレス読み込み時にカーネルからEFAULTを返してもらう
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 既知の相違点は
src/native/managed/cdac/tests/StressTests/known-issues.mdにドキュメント化。現在、開いている単一のバケット:PromoteCallerStackはICallingConventionコントラクト実装待ち(遅延予定) - すべてのCI実行(Windows x64/arm64、Linux x64/arm64)でcDACストレステストが成功
- スコープ対応フラッシュによりメタデータキャッシュが保持される(
ManagedTypeSource)一方、処理済みデータスナップショットはフラッシュ時に再構築(ReJIT、PlatformMetadata、ExecutionManagerなど) LayoutSet生成ヘルパーが複数ソースからのレイアウト解決に対応し、従来のLayoutPairを置換
#128728 Resume after catch for interpreter via native EH
- 作成者: @janvorli
- 作成日時: 2026年05月28日 21:08:11(UTC)
- マージ日時: 2026年06月09日 09:20:48(UTC)
- ラベル: area-CodeGen-Interpreter-coreclr
概要
インタープリタコードの例外処理後の再開(resume-after-catch)メカニズムを、libunwindに依存した従来の実装からネイティブC++例外処理を使用する方式に変更しました。管理フレーム境界での明示的なフレームスキップ処理を追加し、インタープリタスタックポインタの保存状態を削除することで、WASM実装と同様の統一された例外アンワインド方式を実現します。
変更内容
- 例外ハンドリング基盤:
exceptmacros.hにResumeAfterCatchExceptionのハンドラマクロを追加、exceptionhandling.cppに管理フレームをスキップする再スロー処理を実装 - インタープリタ実装:
interpexec.cppで保存SP追跡を削除し、resume-after-catch例外処理時に協調モード復元を統合 - ネイティブ/管理境界: PInvoke(
dllimport.cpp)、QCall(qcall.h)、プリスタブ(prestub.cpp)、VSD(virtualcallstub.cpp)、メモリ割り当てヘルパー(gchelpers.cpp)に再開ハンドラを追加 - フレーム定義: インタープリタフレームから保存SP関連フィールド・アクセッサを削除(
frames.h/.cpp) - プラットフォーム対応: amd64/arm64/i386/LoongArch64/RISCV64のumthunkstubで
NoHandler人格に変更 - 既存コード簡潔化:
eetwain.cppで例外処理を直接スロー方式に、excep.cppでネイティブフレーム伝播パスを一般化
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
内部実装の変更であり、公開APIへの影響なし。libunwindへの依存を削除することで、保守性の向上とWASM実装との統一が期待されます。
#128448 Bump iOS simulator arm64 Helix queue to OSX.26 and centralize iOS-family queues
- 作成者: @matouskozak
- 作成日時: 2026年05月21日 13:34:14(UTC)
- マージ日時: 2026年06月09日 15:24:28(UTC)
- ラベル: area-Infrastructure os-ios os-tvos os-maccatalyst
概要
iOS/tvOS シミュレータ、Mac Catalyst、および iOS/tvOS デバイスの Helix キュー参照を eng/pipelines/helix-platforms.yml に集約し、arm64 シミュレータキューを OSX.15.Arm64 から OSX.26.Arm64(Tahoe)にバンプします。iOS ファミリーキューの一元化により、今後のバンプは helix-platforms.yml のみの変更で対応可能になります。
変更内容
- helix-platforms.yml: iOS ファミリー用の公開/内部キュー変数を新規定義(
helix_macos_ios_simulator_arm64、helix_macos_ios_simulator_x64、helix_macos_ios_device、helix_macos_tvos_deviceなど)、未使用の_latest/_oldestバリアントを削除、macOS 26 の説明を "Sequoia 15" から "Tahoe" に修正 - libraries/helix-queues-setup.yml と coreclr/templates/helix-queues-setup.yml: インラインのキュー文字列を新しい集約変数に置き換え
- runtime-ioslike.yml、runtime-ioslikesimulator.yml、runtime-maccatalyst.yml: 集約変数の参照を追加
- extra-platforms/runtime-extra-platforms-*.yml: キュー参照を更新
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- 機能的には arm64 シミュレータキューのアップグレード(
OSX.15.Arm64→OSX.26.Arm64)のみが動作変更。その他は同一キューの置き換え(Helix キュー名は大文字小文字を区別しないため、大文字小文字のみの変更は実質変更なし) OSX.26.Arm64は既にhelix-platforms.ymlで macOS-arm64 のlatestキューとして宣言されており、他の場所で使用中のため、dnceng との調整は不要- 内部実装の構造化改善で公開 API への影響なし
#127743 Allow HostFactoryResolver to listen on arbitrary events
- 作成者: @Youssef1313
- 作成日時: 2026年05月04日 11:55:57(UTC)
- マージ日時: 2026年06月09日 13:16:32(UTC)
- ラベル: area-Extensions-Hosting
概要
HostFactoryResolver.ResolveHostFactoryを拡張し、Microsoft.Extensions.Hostingが発行する任意のDiagnosticSourceイベントをリッスンできるようにしました。オプショナルなarbitraryActionsマップを追加することで、既存のHostBuilding/HostBuiltフローに加えて、ツール・テスト用途で追加のイベント監視が可能になります。本変更はランタイム動作への影響はなく、内部クラスの機能拡張です。
変更内容
- HostFactoryResolver.cs:
ResolveHostFactoryメソッドにarbitraryActionsオプショナルパラメータを追加し、HostingListenerに渡すように実装。DiagnosticSourceのイベントキーがarbitraryActions内のエントリにマッチした場合、対応するコールバックを実行。 - テスト追加: 新しいテストプロジェクト
ArbitraryDiagnosticEventPatternTestSiteを追加し、任意のDiagnosticイベント観測パターンをテスト。 - using追加:
Microsoft.Extensions.Configurationを追加(現在未使用)。
パフォーマンスへの影響
影響なし
関連Issue
#66527(ASP.NET Core側のプロトタイプ変更)、#66574(ASP.NET Core)
その他
- 本変更は内部クラス実装であり、source-only内部パッケージ経由で消費されます(NuGet.orgには公開されません)。
- ASP.NET Coreでの採用判断は関連Issueのレビュー後に決定予定。
- WebApplication.CreateBuilder呼び出し時に
HostApplicationBuilderCreatedイベントを発火させ、テスティングライブラリでBuild()呼び出し前から利用可能な早期設定ソースを追加する機会を提供します。
#126712 Dispose IAsyncEnumerable enumerators inline during property-based JSON serialization
- 作成者: @Copilot
- 作成日時: 2026年04月09日 14:58:14(UTC)
- マージ日時: 2026年06月09日 18:15:13(UTC)
- ラベル: area-System.Text.Json
概要
非同期JSON シリアル化中にプロパティベースの IAsyncEnumerable<T> エンumeratorが適切に破棄されていなかった問題を修正します。従来は全オブジェクトのシリアル化完了後に破棄していたため、同じレベルの複数の IAsyncEnumerable<T> プロパティがあると、先行するエumeratorが破棄される前に後続プロパティの列挙が開始され、リソースリーク(EF Coreでの接続漏洩など)が発生していました。本修正により、エumerator完了時にインラインで DisposeAsync() を呼び出し、非同期破棄の場合は待機可能にしています。
// 修正前: BがAのDisposeAsync完了を待たずに列挙開始
// 修正後: AのDisposeAsync完了後、Bが開始
await JsonSerializer.SerializeAsync(stream, new {
A = dbContext.Products.AsAsyncEnumerable(),
B = dbContext.Products.AsAsyncEnumerable()
});
変更内容
IAsyncEnumerableOfTConverter.OnWriteResume: エumerator完了時にインラインでDisposeAsync()を呼び出し。非同期タスクが待機中ならPendingTaskとして格納し、シリアル化ループに制御を返す。AsyncEnumeratorState列挙体を導入して状態遷移を明確化。WriteStackFrame:AsyncEnumeratorIsPendingCompletionとAsyncEnumeratorIsPendingDisposalブール値フィールドをAsyncEnumeratorState列挙体に統合。AsyncDisposableをAsyncEnumeratorに改名(object?型)。AsyncEnumeratorState: 新規列挙体(None、Enumerating、PendingMoveNext、PendingDisposal)でエumeratorのライフサイクルを追跡。WriteStack:CompletedAsyncDisposablesフィールドと関連メソッドを削除。例外時のクリーンアップをAsyncEnumeratorをIAsyncDisposableにパターンマッチして処理。- ビルド互換性修正:
UnreachableExceptionをInvalidOperationExceptionに置き換え、非ジェネリックValueTaskの.Resultプロパティ不在に対応。 - テスト追加: 兄弟プロパティの破棄順序、ネストされた非同期enumerable、空enumerable、非同期破棄パス、
DisposeAsync例外伝播をカバー。
パフォーマンスへの影響
リソースリーク修正によるメモリリーク防止(特にデータベース接続保持状況の改善)。列挙体の破棄タイミングが早期化されることで、並列プロパティの列挙効率が向上。具体的なベンチマーク数値は提供されていません。
関連Issue
なし
その他
- 内部実装変更(
WriteStackFrame、WriteStack、IAsyncEnumerableOfTConverter)で、公開APIへの破壊的変更はなし - EF Core等のデータベースアクセスライブラリを使用する場合、本修正により接続リーク現象が解決される見込み
- テストの堅牢性向上:タイミング依存のアサーションから状態ベースの同期コ
#126705 Implement SafeProcessHandle.Open/TryOpen and Process.TryGetProcessById
- 作成者: @Copilot
- 作成日時: 2026年04月09日 12:38:24(UTC)
- マージ日時: 2026年06月09日 21:06:57(UTC)
- ラベル: area-System.Diagnostics.Process
概要
SafeProcessHandle.Open(int processId)およびSafeProcessHandle.TryOpen(int processId, out SafeProcessHandle? handle)、ならびにProcess.TryGetProcessByIdの新しいPublic APIを実装しました。既存プロセスをPIDで開くための方法を提供し、Windows/Unix間のエラーハンドリング一貫性を確保しています。
// SafeProcessHandle による直接的なハンドル取得
SafeProcessHandle handle = SafeProcessHandle.Open(processId);
// TryOpen パターン
if (SafeProcessHandle.TryOpen(processId, out var handle))
{
// ハンドル使用
}
// Process.TryGetProcessById による Process インスタンス取得
if (Process.TryGetProcessById(processId, out var process))
{
// プロセス使用
}
変更内容
Public API層:
SafeProcessHandle.Open(int processId): 引数検証、プラットフォーム別TryOpenCore呼び出し、エラー時に例外スローSafeProcessHandle.TryOpen(int processId, out SafeProcessHandle? handle): Try/Catch パターン対応Process.TryGetProcessById: 既存のGetProcessByIdと同一のセマンティクスでProcessManager.IsProcessRunningチェックおよびProcessインスタンス返却
ネイティブ層(Windows/Linux):
- Windows:
SafeProcessHandle.Windows.csでOpenProcessAPI(アクセス権:PROCESS_QUERY_LIMITED_INFORMATION | SYNCHRONIZE | PROCESS_TERMINATE)を使用 - Unix:
SafeProcessHandle.Unix.csでInterop.Sys.Kill(processId, 0)を直接使用、GetLastErrorInfo()経由でエラー報告を統一 - 両プラットフォーム間のアクセス拒否時の振る舞いを
ThrowOpenProcessAccessDeniedExceptionで統一 TryOpenCoreは「プロセス未発見/無効パラメータ」でのみfalse返却、その他の失敗は例外スロー
その他変更:
- ネイティブ層で
SystemNative_OpenProcess関連の古いコードを削除 - XML ドキュメント更新:
SafeProcessHandle.[Try]OpenとProcess.GetProcessById(...).SafeHandle/Process.TryGetProcessByIdの動作差異を明記 - テスト追加:invalid PID、未存在PID、実行中プロセス、オープン後キル処理など
パフォーマンスへの影響
影響なし
関連Issue
その他
- Windows と Linux で一貫性のあるAPI動作を実現するため、エラーハンドリング・例外スロー条件を統一設計
SafeProcessHandle.Openは即座にハンドルを取得する必要があるユースケース向け、Process.TryGetProcessByIdはProcessインスタンスが必要な場合向けと用途を分離- テスト検証:全 628 テスト実行、失敗 0、スキップ 6(Windows/Linux 両プラットフォーム対応確認済み)
#126623 Fix NegotiateAuthentication to surface TargetUnknown status for unknown SPNs
- 作成者: @Copilot
- 作成日時: 2026年04月08日 02:43:31(UTC)
- マージ日時: 2026年06月09日 14:53:44(UTC)
- ラベル: area-System.Net.Security
概要
NegotiateAuthenticationが未登録のSPN(Service Principal Name)に対して、WindowsおよびUnixの両プラットフォームでGenericFailureではなくTargetUnknownステータスを返すように修正しました。KDC内に存在しないターゲットSPNに対する認証エラーが正しく分類されるようになります。
// 修正後:未登録のSPNに対して正しくTargetUnknownを返す
var client = new NegotiateAuthentication(new NegotiateAuthenticationClientOptions
{
TargetName = "HTTP/nonexistent-server.example.com"
});
client.GetOutgoingBlob(null, out var statusCode);
// statusCode == NegotiateAuthenticationStatusCode.TargetUnknown
変更内容
- Windows(NegotiateAuthenticationPal.Windows.cs):
SecurityStatusPalErrorCode.TargetUnknownをスイッチ文に追加し、NegotiateAuthenticationStatusCode.TargetUnknownにマップ - Unix(NegotiateAuthenticationPal.Unix.cs):
GSS_S_FAILUREかつKerberos minor statusKRB5KDC_ERR_S_PRINCIPAL_UNKNOWN(0x96C73A07)の場合にTargetUnknownを返すよう処理を追加 - テスト(NegotiateAuthenticationKerberosTest.cs):
Client_UnknownSPN_ReturnsTargetUnknownテストを追加。KerberosExecutorを使用してイン・プロセスKDCをセットアップし、未登録SPNへの認証でTargetUnknownが返されることを検証
パフォーマンスへの影響
影響なし
関連Issue
その他
- 公開APIの動作変更:未登録のターゲットSPNに対する
GetOutgoingBlob呼び出しが返すNegotiateAuthenticationStatusCodeが変更される(より正確なエラー状態を表現) - Windows(SSPI)とUnix(GSSAPI/Kerberos)の両実装で一貫したエラーマッピングが実現される
- MIT KerberosおよびHeimdal Kerberosの両方で同一のcom_errベースエラーコード(0x96C73A07)が使用されるため、Unix実装が両プラットフォームで動作することを確認
#126341 [release/9.0] Update dependencies from dotnet/arcade
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年03月31日 02:02:33(UTC)
- マージ日時: 2026年06月09日 09:08:13(UTC)
- ラベル: Servicing-approved area-codeflow
概要
dotnet/arcadeリポジトリの依存関係を更新するPull Requestです。arcade build 20260601.4(commit efce34e9f9f25af27e2b471fbbf8c21f1ac2e318)に対応して、複数のMicrosoft.DotNet.*パッケージをβ版からより新しいβ版に更新しています。
変更内容
- eng/Version.Details.xml: arcade関連の21個のパッケージの詳細バージョン情報を更新(+42/-42行)
- eng/Versions.props: バージョンプロパティの定義を更新(+16/-16行)
- global.json: グローバルプロジェクト設定を更新(+3/-3行)
更新対象パッケージ:
- Microsoft.SourceBuild.Intermediate.arcade
- Microsoft.DotNet.Arcade.Sdk
- Microsoft.DotNet.Build.Tasks.* (Archives、Feed、Installers、Packaging、TargetFramework、Templating、Workloads)
- Microsoft.DotNet.CodeAnalysis、GenAPI、GenFacades、Helix.Sdk、PackageTesting、RemoteExecutor、SharedFramework.Sdk、VersionTools.Tasks、XliffTasks、XUnitExtensions
- Microsoft.DotNet.XUnitAssert、XUnitConsoleRunner
バージョン範囲:9.0.0-beta.26261.1 → 9.0.0-beta.26301.4 および 2.9.0-beta.26261.1 → 2.9.0-beta.26301.4
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- このPRはdotnet-maestro[bot]による自動依存関係更新です
- release/9.0ブランチを対象とした更新です
- 変更日時:2026年6月1日UTC
#126004 [release/8.0] Update dependencies from dotnet/cecil
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年03月24日 02:02:12(UTC)
- マージ日時: 2026年06月09日 09:08:07(UTC)
- ラベル: Servicing-approved area-codeflow
概要
dotnet/cecilの依存パッケージをversion 0.11.4-alpha.26158.1から0.11.4-alpha.26281.3へ更新するautomated dependency updateです。この変更はdotnet/runtimeのrelease/8.0ブランチに適用されます。
変更内容
- eng/Version.Details.xml: Microsoft.DotNet.Cecilのバージョン情報を更新(+2/-2行)
- eng/Versions.props: バージョンプロパティを更新(+1/-1行)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このPull Requestはdotnet-maestro[bot]によるautomated dependency updateで、dotnet/cecilのrelease/8.0ブランチから直接生成されたものです。