Pull Request on 2026年06月26日

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

注意点

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


目次

  1. #129886 Add ActiveIssue for SendAsync_Success_ConnectionSetupActivityGraphRecorded
  2. #129874 Remove PAL oleauto.h shim and stale CoreCLR includes
  3. #129870 [release/9.0-staging] Sve: Fix Gather/Scatter tests
  4. #129869 Handle ILLink origins before first sequence point
  5. #129868 JIT: only skip loop inversion when the IV test is the bottom test
  6. #129865 [release/10.0] Fix blob type in CopyWithPrivateKey for ML-DSA
  7. #129859 Add DacMode-based SOS test legs to runtime-diagnostics pipeline
  8. #129851 [browser] WASM exception handling to use the standardized exnref
  9. #129848 [browser] Fix EventPipe CPU sampling stall under coarse browser timer resolution
  10. #129825 Fix generic lookups and thunks
  11. #129819 [arm64] Emit cmlt/cmle/fcmlt/fcmle for compares against zero
  12. #129810 JIT: Intrinsify Task/ValueTask factory methods
  13. #129807 JIT/wasm: Pri-1 R2R codegen fixes (BBJ_CALLFINALLY back-edge, null-check loads)
  14. #129795 Avoid publishing interpreter frame with invalid IP
  15. #129793 Remove undefined-behavior UnsafeTests.DangerousAs to stabilize jitstress leg
  16. #129790 Add HttpMethod.Query to static method test data
  17. #129775 Fix duplicated collection items when a constructor parameter name differs only by case from the property
  18. #129702 [mono][amd64] Fix calling-convention mismatch for small straddling vtypes in shared generics
  19. #129693 [mono] Fix re-entrant AssemblyLoadContext resolution stack overflow under full-AOT
  20. #129629 Surface scheduled outerloop Helix work item failures as warnings
  21. #129626 Remove unsafe code from System.Reflection.Metadata PE/blob writers
  22. #129612 BCrypt Composite ML-DSA
  23. #129589 Arm64 R2R: fold adrp+add+ldr into adrp+ldr[#:lo12:]
  24. #129588 Make Windows system-DLL P/Invokes use only DllImportSearchPath.System32
  25. #129342 Fix apphost/bundle creation failure on chmod-hostile filesystems
  26. #128741 Sanitize control/format characters in console logger output across all formatters

#129886 Add ActiveIssue for SendAsync_Success_ConnectionSetupActivityGraphRecorded

  • 作成者: @Copilot
  • 作成日時: 2026年06月26日 08:38:54(UTC)
  • マージ日時: 2026年06月26日 11:53:36(UTC)
  • ラベル: area-System.Net.Http

概要

System.Net.Httpの診断テストにおいて、SendAsync_Success_ConnectionSetupActivityGraphRecordedテストが間欠的に失敗する問題に対応しました。ループバックサーバーの競合状態によりUnexpected EOF trying to read request headerエラーが発生するため(HTTP/2バリアント、Windows x86 Release環境で観測)、ActiveIssue属性でテストをスキップします。

変更内容

  • DiagnosticsTests.cs: SendAsync_Success_ConnectionSetupActivityGraphRecordedテストに[ActiveIssue("https://github.com/dotnet/runtime/issues/129771")]属性を追加

パフォーマンスへの影響

影響なし

関連Issue

#129771

その他

このPRはテスト修正であり、根本的な競合状態はまだ調査中です。テストはActiveIssue属性により基礎となるレース状態が解決されるまでスキップされます。


#129874 Remove PAL oleauto.h shim and stale CoreCLR includes

  • 作成者: @Copilot
  • 作成日時: 2026年06月26日 00:38:52(UTC)
  • マージ日時: 2026年06月26日 15:45:13(UTC)
  • ラベル: area-VM-coreclr

概要

PAL時代の遺物となった oleauto.h シムヘッダーと、それを参照していた不要なCoreClRインクルードを削除するクリーンアップです。src/coreclr/pal/inc/rt/oleauto.h は現在のCoreClRビルドでは不要となっているため、関連するインクルード文と共に削除されました。

変更内容

  • src/coreclr/pal/inc/rt/oleauto.h の削除(132行)
  • src/coreclr/inc/utilcode.h から不要なインクルードを削除
  • src/coreclr/tools/metainfo/mdinfo.h から不要なインクルードを削除(4行)
  • src/coreclr/vm/comdatetime.h から不要なインクルードを削除

パフォーマンスへの影響

影響なし(クリーンアップのみ)

関連Issue

#129874

その他

なし


#129870 [release/9.0-staging] Sve: Fix Gather/Scatter tests

概要

SVE(Scalable Vector Extension)のGather/Scatterテストコードの修正をrelease/9.0-stagingにバックポートします。テスト実行時の失敗(#129437で報告)に対応するテストコード専用の修正です。

変更内容

  • SveGatherVectorFirstFaultingVectorBases.template: テストロジックの修正(+26/-3行)
  • SveGatherVectorVectorBases.template: テストロジックの修正(+20/-2行)
  • SveScatterVectorBases.template: テストロジックの修正(+23/-5行)

いずれもARM/SVE関連のハードウェアIntrinsicsテストファイルで、Gather/Scatterベクトル操作に関連するテストケースを対象としています。

パフォーマンスへの影響

影響なし(テストコード専用の変更)

関連Issue

#129437、#115036

その他

  • テストコード専用の修正のため、製品コードへの影響はありません
  • .NET 10および.NET 11では既に機能している修正の後付けです
  • リスク評価:低(既に他バージョンで検証済み)

#129869 Handle ILLink origins before first sequence point

概要

ILLink の MessageOrigin.ToString() が、最初のPDBシーケンスポイントより前のILオフセットに対応できていない問題を修正します。書き直された/生成されたILでは、警告の生成元が最初のシーケンスポイントより前に配置されることがあり、キャッシュされた警告をフラッシュする際に Last() が例外をスローしていました。本修正により、利用可能な最初のシーケンスポイントにフォールバックすることで、この形状に対応します。

変更内容

  • MessageOrigin.cs: シーケンスポイント選択ロジックを調整。ILオフセットで利用可能なシーケンスポイントが存在しない場合でも Last() が例外をスローしないようにフォールバック処理を追加
  • MessageContainerTests.cs: Cecil を用いて生成されたアセンブリ/PDB をラウンドトリップするリグレッションテストを追加。最初のシーケンスポイントより前のILオフセットが生成元として設定される状況をカバー

パフォーマンスへの影響

影響なし

関連Issue

#129562

その他

本修正は内部実装(ILLink の診断メッセージ処理)に限定された変更です。公開APIへの影響はありません。回帰テストにより、Cecil で生成されたアセンブリを含むエッジケースでの挙動が確認されています。


#129868 JIT: only skip loop inversion when the IV test is the bottom test

概要

Loop Inversion 最適化における「既に bottom-tested ループ」の判定を改善します。#128459 で導入された bail-out が、ループの実際の継続判定でない無関係な早期終了条件に誤反応していました。AnalyzeIteration で認識された IV テスト (Induction Variable Test) とラッチのテストブロックが一致する場合のみ bail-out を実行するように制限し、Dictionary<TKey,TValue>.Enumerator.MoveNext などで誤った loop inversion スキップを回避します。

変更内容

  • src/coreclr/jit/optimizer.cpp: optTryInvertWhileLoop の bail-out ロジックを改善
    • ラッチ (または canonical BBJ_ALWAYS ラッチの predecessor) の BBJ_COND テストが、NaturalLoopIterInfo::TestBlock に一致する場合のみ bail-out を実行するように制限
    • AnalyzeIteration の遅延呼び出しとキャッシング機構を追加し、対象ループのみが分析コストを負担するように最適化
    • ダンプメッセージとコメントを更新

パフォーマンスへの影響

ポジティブな改善:

  • Dictionary<int,int>.Enumerator.MoveNext で #128459 による regression を解決
    • コード サイズ: 114 → 129 bytes (復旧)
    • PerfScore: 114.88 → 105.38 (復旧)
    • BDN IterateForEach<Int32>.Dictionary(Size: 512) AMD Zen 3: −2.4% 改善 (501.9 ns → 490.1 ns)
  • SPMI measurements(~1,600 メソッドで inversion 再有効化):
    • Code size: +0.18%、PerfScore overall: −0.04%、TP (release): +0.46%

注記: TP コスト増加は主に実際の inversion フェーズ実行によるもので、lazy AnalyzeIteration 呼び出し自体は小さい割合です。

関連Issue

#128459(bail-out 導入)、#128910(Dictionary regression 報告)

その他

  • #128459 の original target である Perf_Encoding regression (Utf8Utility.GetPointerToFirstInvalidByte on arm64) は依然として修正されたまま(真の bottom-tested loop であり、AnalyzeIteration がラッチを正しく認識するため、refined predicate も bail-out)
  • Viper lab (Zen 4) での +6% regression は byte-identical codegen 復旧により完全解決予定

#129865 [release/10.0] Fix blob type in CopyWithPrivateKey for ML-DSA

概要

ML-DSA証明書と秘密鍵のペアリング時に、CopyWithPrivateKeyメソッドで不正なBlob型を指定していた問題を修正します。BCrypt鍵がシード生成またはシードインポートで作成された場合、NCryptに再インポートする際にBlob型を正確に指定する必要があります。最新のWindows Insiderビルドではこの厳格な検証が導入されたため、正確なパラメータ指定が必須になりました。

変更内容

  • src/libraries/Common/src/System/Security/Cryptography/MLDsaImplementation.CreateCng.cs: CopyWithPrivateKey処理で指定されていたBlob型を修正(1行の変更)

パフォーマンスへの影響

影響なし

関連Issue

#129839 (オリジナルのPR)

その他

  • 内部テスト実行時に最新Windows Insiderビルド上で検出された問題
  • 修正はMicrosoft Docs「BCryptImportKeyPair」の仕様に準拠
  • 互換性への影響:なし(正確なパラメータ指定により、Windows側の厳格な検証に対応)
  • リスク評価:低(単に正確なBlob型パラメータへの変更)

#129859 Add DacMode-based SOS test legs to runtime-diagnostics pipeline

概要

runtime-diagnosticsパイプラインのSOS テストレグを、useCdac/noFallbackブール値から単一のdacModeパラメータに統一し、4つ目のテストレグを追加します。ビルドされたcDAC(mscordaccore_universal)を別のアーティファクトとして公開し、cdacレグで利用可能にします。

新しいSOS テストレグ構成(windows_x64 Release, testInterpreter):

  • cDAC (dacMode cdac) -- スタンドアロンcDAC経由でSOS実行
  • cDAC_fallback (dacMode cdacfallback) -- インボックスDAC がcDAC をホスト、フォールバック有効
  • cDAC_verify (dacMode cdacverify) -- インボックスDAC がcDAC をホスト、フォールバック無効
  • DAC (dacMode dac) -- レガシーDAC のみ

変更内容

  • eng/pipelines/runtime-diagnostics.yml -- 第4のSOS レグ追加、dacModeへの切り替え、ビルト cDAC のアーティファクト公開機能を実装
  • eng/pipelines/diagnostics/sos-test-leg.yml -- ブール値トグルをdacModeに置き換え、cdacモード時のcDAC アーティファクト条件付きダウンロード機能を実装
  • eng/pipelines/diagnostics/runtime-diag-job.yml -- dacModeを対応する-dacMode/-cdacPath引数にマップし、診断ビルド/テストハーネスに渡す

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは dotnet/diagnostics#5901で追加されるDacModeサポートに依存しています。diagnostics PRがマージされる前に実行する場合、runtime-diagnosticsをdiagnosticsBranchパラメータで diagnostics PRのマージ参照を指定してキューに入れてください。


#129851 [browser] WASM exception handling to use the standardized exnref

概要

WebAssemblyブラウザランタイムの例外処理を、レガシーエンコーディングから標準化されたexnrefベースの例外処理提案(try_table / throw_ref)へ移行します。Emscripten/emsdk、jiterpreterコード生成、機能検出、CI/テストランナーのフラグを統一的に更新し、WebAssemblyの標準EH提案に準拠させます。V8エンジンが--experimental-wasm-exnrefに未対応のため、V8テスト実行は一時的に無効化されます(#129849で追跡)。

変更内容

コンパイラ/ツールチェーン層(内部実装):

  • eng/native/configureplatform.cmake — CoreCLRブラウザビルド: WASM_LEGACY_EXCEPTIONS=0に変更、EH対応ランタイムライブラリ(-lc++-wasmexcept等)をリンク
  • src/mono/mono/mini/CMakeLists.txt, src/mono/browser/browser.proj — WASM_LEGACY_EXCEPTIONS=0に統一
  • src/mono/browser/build/*.targets, src/mono/wasm/build/WasmApp.Common.targets — wasm-optに--enable-reference-typesを追加

Jiterpreterコード生成(内部実装):

  • src/mono/browser/runtime/jiterpreter-opcodes.ts — レガシーEHオペコード(try_/catch_)をthrow_ref(0x0a)とtry_table(0x1f)に置換
  • src/mono/browser/runtime/jiterpreter-support.ts — tryTable()、getTagIndex()ヘルパーを追加;オプション名をenableWasmEh → enableWasmFinalEhに変更
  • src/mono/browser/runtime/jiterpreter-jit-call.ts — jit-callをレガシーtry/catchからtry_tableベースの構造に変更

ランタイム起動・機能検出(内部実装):

  • src/mono/browser/runtime/loader/globals.ts, startup.ts, types/internal.ts — wasm-feature-detectでexceptions → exceptionsFinal検出器に切り替え;フラグ名をfeatureWasmEh → featureWasmFinalEhに変更

テスト/CI関連(内部実装):

  • eng/testing/WasmRunnerTemplate.cmd/.sh, テストターゲット — --experimental-wasm-exnrefをV8/Node起動時に追加
  • eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.yml — sendToHelixパラメータ追加(ビルドのみを可能化)
  • eng/pipelines/runtime.yml — WasmTestOnV8シナリオを一時的に無効化(Firefox実行は継続)
  • eng/testing/BrowserVersions.props — V8を15.1.103にバージョンアップ

パフォーマンスへの影響

影響なし。この変更は例外処理エンコーディングの標準化であり、実行時のパフォーマンス特性(メモリ、速度)への直接的な影響はありません。

関連Issue


#129848 [browser] Fix EventPipe CPU sampling stall under coarse browser timer resolution

概要

WebAssembler環境でのEventPipe CPU sampling profilerの停止問題を修正します。ブラウザのタイマー解像度が粗い場合、ms_since_last_sampleが0になり、ゼロ除算によってskips_per_periodがINT_MAXに固定されてサンプリングが永続的に停止する不具合を解決します。

変更内容

  • ep-rt-mono-runtime-provider.c: update_sample_frequency()関数を修正し、ms_since_last_sample > 0の場合のみskips_per_periodを再計算。計算結果を[1, 10000]の範囲にクランプして、サンプリングの応答性を確保(CoreCLRシングルスレッドサンプラーに合わせる)
  • EventPipeDiagnosticsTests.cs: Blazor EventPipe CPU sampling テスト(BlazorEventPipeTestWithCpuSamplesAOT、BlazorEventPipeTestWithCpuSamples)のActiveIssue属性を削除し、テストを復旧

パフォーマンスへの影響

サンプリングが永続的に停止する問題が解決され、正常なCPU sampling動作が回復します。クランプ値(最大10000)により過度なスキップを防止し、サンプリングの安定性が向上します。

関連Issue

#129584

その他

  • WebAssembly環境専用の修正
  • ゼロ除算ではなく、粗いタイマー解像度への防御的対応が重点
  • 修正により以前無効化されていたBlazor EventPipeテストが再度有効化されます

#129825 Fix generic lookups and thunks

概要

WebAssembly ReadyToRun (R2R) パイプラインにジェネリック辞書ルックアップのサポートを追加し、他のプラットフォームで使用されている DynamicHelper パターンを Wasm に適用します。Wasm .S アセンブリファイルのサポートを追加し、Crossgen2 がジェネリックルックアップの遅延ロードヘルパーロジックを生成するよう調整します。また、複数のランタイムヘルパーに対する事前計算されたサンクと、欠落ケースを検出するアサーションが追加されています。

変更内容

  • dynamichelpers.S (新規): Wasm アセンブリでジェネリック辞書ルックアップヘルパーを実装(サイズチェック・null テスト・高速パス対応)
  • dynamichelpers.cpp (新規): Wasm 上での DelayLoad_Helper エントリ実装とポータブルエントリポイントデータ生成
  • asmconstants.h (新規): Wasm 固有のアセンブリ定数・オフセット定義
  • helpers.cpp: 追加のポータブルエントリポイント解釈呼び出しサンク追加、プレースホルダーの削除
  • readytoruninfo.h: GenericDictionaryDynamicHelperStubData_PortableEntryPoint レイアウト追加
  • prestub.cpp: RVA によるインポートセクション解決をサポート(Wasm 遅延ロード用)
  • jitinterface.cpp: R2R でポータブルエントリポイントが実際のコードを持つことを確認するデバッグアサート追加
  • WasmImportThunkPortableEntrypoint.cs: ジェネリックルックアップサンク署名にポータブルエントリポイントパラメータ追加
  • DelayLoadHelperImport.cs: Wasm 向けに常にポータブルエントリポイント生成
  • configurecompiler.cmake: Browser/WASI ツールチェーンで ASM サポート有効化

パフォーマンスへの影響

影響なし

関連Issue

その他

  • ランタイム内部実装の変更であり、公開 API への影響はなし
  • Wasm 固有の最適化で、他のプラットフォームには影響しない
  • 遅延ロードヘルパーの解釈実行時の欠落ケース検出を強化

#129819 [arm64] Emit cmlt/cmle/fcmlt/fcmle for compares against zero

概要

ARM64のベクトル比較命令の最適化。CompareLessThan/CompareLessThanOrEqualでゼロベクトルとの比較時に、ゼロベクトルの物理化とオペランド交換を避け、直接「ゼロとの比較」命令形式(cmlt、cmle、fcmlt、fcmle)を発行するようにしました。これにより、命令数削減と性能向上を実現します。

// Before
movi v16.4s, #0
cmgt v0.4s, v16.4s, v0.4s

// After
cmlt v0.4s, v0.4s, #0

変更内容

  • lowerarmarch.cpp: CompareLessThan/CompareLessThanOrEqualでのオペランド・コンテインメント処理を追加。符号付き型(int32/int64/float/double)のみが対象で、符号なし型は除外。
  • hwintrinsiccodegenarm64.cpp: 比較命令の生成コードを調整。
  • hwintrinsiclistarm64.h: 命令定義の整理。
  • Runtime_33972.cs: 既存テストにコードジェン検証を追加。ベクトルおよびスカラー型(int32/int64/float/double)に関する比較命令の動作確認。

パフォーマンスへの影響

改善: ゼロベクトルの物理化が削減され、命令数が減少。特に、2命令から1命令への短縮(movi + cmgt → cmlt)により、コード密度とキャッシュ効率が向上します。

関連Issue

#64785

その他

  • 変更は既存のコンテインメント機構(CompareGreaterThan/CompareGreaterThanOrEqual/CompareEqual)と同様のパターンに従っています。
  • 符号なし基本型は除外(cmlt/cmle の「ゼロ形式」は符号付き専用)。
  • GitHub Copilotの支援により生成されたPull Requestです。

#129810 JIT: Intrinsify Task/ValueTask factory methods

概要

Task/ValueTask ファクトリメソッドをJITで認識する組み込み関数化により、async呼び出し規約での最適化を強化します。Task.FromResult、Task.CompletedTask、ValueTask.FromResult、ValueTask.CompletedTask、およびValueTask<T>コンストラクタを[Intrinsic]でマークし、JITがこれらのメソッドを直接展開することで、不要なAsyncHelpers.TransparentAwaitWithResult呼び出しを削除します。

// 最適化前:複数の呼び出しと割り当てが発生
private static Task<string> TaskCallee1() => Task.FromResult("abc");

// 最適化後:直接値を返すように展開される
private static Task<string> TaskCallee1() 
{
    // JITが"abc"を直接ロードして返すように変換
}

変更内容

  • ライブラリ側(Task.cs、ValueTask.cs):Task.FromResult、Task.CompletedTask、ValueTask.FromResult、ValueTask.CompletedTask、ValueTask<T>(T value)コンストラクタに[Intrinsic]属性を追加
  • JIT側(namedintrinsiclist.h):対応する新しいNamedIntrinsic IDを定義
  • JIT展開ロジック(importercalls.cpp):async呼び出し規約でのFromResult/CompletedTaskの認識と展開を実装
  • JIT最適化(importer.cpp):impFoldAwaitedTopOfStackメソッドを追加し、不要なTransparentAwaitWithResult呼び出しを回避
  • デバッグ機能(gentree.cpp、compiler.h):async継続ローカル変数の名前表示をAsyncContとして改善

パフォーマンスへの影響

大幅な改善(提供されたアセンブリ例より):

  • TaskCallee1():240バイト→13バイト(94.6%削減)、PerfScore 22.65→1.50
  • TaskCallee2():109バイト→3バイト(97.2%削減)、PerfScore 11.25→1.25
  • ValueTaskCallee1():127バイト→3バイト(97.6%削減)、PerfScore 14.00→1.25
  • ValueTaskCallee4():224バイト→13バイト(94.2%削減)、PerfScore 22.83→1.50
  • ValueTaskCallee6():287バイト→174バイト(39.4%削減)、PerfScore 55.83→41.75

メモリ割り当てとプロローグ/エピローグコード生成が大幅に削減され、asyncパスのオーバーヘッドが顕著に低下。

関連Issue

なし

その他

  • 変更は公開API(Task、ValueTaskのメソッド)に[Intrinsic]属性を追加するのみで、シグネチャ/動作は変わらず、後方互換性は保証
  • async関数内で直接呼び出される場合のみ最適化が適用される
  • デバッグ情報の改善により、async継続ローカル変数の追跡が容易になる

#129807 JIT/wasm: Pri-1 R2R codegen fixes (BBJ_CALLFINALLY back-edge, null-check loads)

概要

WebAssembly JIT コードジェネレーションの2つの正確性バグを修正します。

  1. BBJ_CALLFINALLY非フォールスルー後退枝の問題: finally ブロックが back-edge 経由で到達する場合(例:try/finally外のループヘッダーへの catch leave)、分岐が発行されず制御がループを抜けて finally が2度実行される問題を修正。

  2. Null チェックフォーリングロードの問題: WebAssembly ではヌルアドレスからのロードがフォルトしないため、配列要素アクセスがヌルポインタを正しく検出できず、NullReferenceException の代わりに IndexOutOfRangeException が発生する問題を修正。

変更内容

  • codegenwasm.cpp: BBJ_CALLFINALLYRET で後退枝検出時に継続先への br (分岐) 命令を発行(+19行)
  • lowerwasm.cpp: フォーリングロード(GT_IND)のアドレスを multiply-used とマーク(+5行)
  • regallocwasm.cpp/h: フォーリングロード用一時レジスタ予約ロジック追加(+6/-5行)
  • stacklevelsetter.cpp/h: wasm スタックレベル追跡で null チェック処理の処理を追加(+38/-2行)

パフォーマンスへの影響

フォーリングロード箇所でのみ明示的な null チェック命令が追加されるため、該当する配列アクセスでわずかなオーバーヘッドが発生します。ただし正確性修正が優先されます。

関連Issue

#42929、#41063、#31903、#91942

その他

Pri-1 R2R テストスイートで発見された WebAssembly ランタイムの重要な正確性問題です。修正は JIT の内部実装レベルであり、公開 API への影響はありません。


#129795 Avoid publishing interpreter frame with invalid IP

概要

インタープリタフレーム(InterpMethodContextFrame)の初期化時に、コンパイラの最適化による命令の並び替えで無効なIP(Instruction Pointer)がスタックオーバーフロー時にスタックウォーカーに観測される問題を修正しました。コンパイラバリアを使用してIP初期化の順序を明確に保証し、フレームをリストに公開する前に確実にIPをゼロ化しています。

変更内容

  • src/coreclr/vm/interpexec.cpp: インタープリタフレーム初期化処理にコンパイラバリアを追加し、ipフィールドのゼロ化がフレームの公開前に実行されることを保証(+22行)

パフォーマンスへの影響

影響なし。コンパイラバリアの追加であり、ランタイムオーバーヘッドは最小限です。

関連Issue

なし

その他

このPull Requestは win-arm64 プラットフォームの stackoverflowtester テストの失敗を修正するものです。スタックオーバーフロー時にスタックウォーカーが不正なIP値を持つインタープリタフレームを観測すると、StackFrameIterator::NextRaw()で"m_crawl.GetCodeInfo()->IsValid()"アサーション失敗が発生していました。この修正により、初期化順序を厳密に制御することでそのような無効なフレームの公開を防ぎます。


#129793 Remove undefined-behavior UnsafeTests.DangerousAs to stabilize jitstress leg

  • 作成者: @Copilot
  • 作成日時: 2026年06月24日 10:53:42(UTC)
  • マージ日時: 2026年06月26日 13:42:59(UTC)
  • ラベル: area-CodeGen-coreclr

概要

Unsafe.As<string>(object) の不正なキャスト経路をテストする UnsafeTests.DangerousAs テストメソッドを削除しました。このテストは未定義動作に依存していたため、jitstress ARM実行環境で不安定な失敗を引き起こしていました。正当な使用シナリオ(オブジェクトに格納されたstringをstringにキャストする)をカバーする既存の As() テストは保持されます。

変更内容

  • src/libraries/System.Runtime/tests/System.Runtime.CompilerServices.Unsafe.Tests/UnsafeTests.cs: UnsafeTests.DangerousAs メソッドを削除(8行削除)
  • 有効なキャストシナリオをテストする As() メソッドは変更なし

パフォーマンスへの影響

影響なし

関連Issue

#129678

その他

このPRは Unsafe.As<T>() の有効な使用パターンのみをテストすることで、jitstress環境での間欠的なテスト失敗を排除します。削除されたテストは実装定義の動作に依存していたため、テスト保守性の向上につながります。


#129790 Add HttpMethod.Query to static method test data

概要

HttpMethod.Query静的メソッドをテストデータに追加し、ハッシュコード理論テストのカバレッジを改善するテスト更新です。共有される静的HttpMethodテストデータにHttpMethod.Queryシングルトンを含めることで、組み込みHttpMethodインスタンスのカバレッジ一貫性を確保します。

変更内容

  • src/libraries/System.Net.Http/tests/FunctionalTests/HttpMethodTest.cs
    • StaticHttpMethodsテストデータセットにHttpMethod.Queryを追加
    • [MemberData]属性で使用される静的メソッドリストの形式を更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • テスト対象:System.Net.Http.Functional.Testsプロジェクト内のHttpMethodTestクラス
  • ビルド・テスト検証済み(Release構成での完全なclr+libsビルドとテスト実行)

#129775 Fix duplicated collection items when a constructor parameter name differs only by case from the property

概要

Configuration Binderにおいて、コンストラクタパラメータ名とプロパティ名がケースのみで異なる場合(例:パラメータ instances とプロパティ Instances)、コレクションアイテムが重複される不具合を修正しました。根本原因は、フェーズ2でプロパティがコンストラクタパラメータでカバーされているかの判定時に大文字小文字を区別していたためです。修正により、バインダーの他の部分と同様に大文字小文字を区別しない比較(StringComparison.OrdinalIgnoreCase)に統一しました。

変更内容

  • ConfigurationBinder.cs: コンストラクタパラメータとプロパティの比較を大文字小文字を区別しない方式に変更(p.Name == property.Name → string.Equals(p.Name, property.Name, StringComparison.OrdinalIgnoreCase))
  • テストクラス追加: リフレクションベースのバインダーに対する回帰テストを追加。ゲッターのみのコレクション、設定可能なコレクション、ゲッターのみのインターフェースコレクション、および params コレクションコンストラクタをカバーし、すべてケースのみが異なるコンストラクタパラメータ名を使用

パフォーマンスへの影響

影響なし

関連Issue

#129760

その他

本修正はリフレクションベースのランタイムバインダーのみを対象としています。ソースジェネレータは同一の問題を抱えており、#83803で追跡されています。レコード型は影響を受けないため、ここでは対象外です。テストは NotSourceGenMode でゲートされており、ソースジェネレータの修正は別途対応予定です。


#129702 [mono][amd64] Fix calling-convention mismatch for small straddling vtypes in shared generics

概要

Mono LLVM full-AOT on x64において、ネストされたフィールドが8バイト境界をまたぐ小さい値型(≤16バイト)の呼び出し規約が不一致だった問題を修正。部分共有ジェネリック(gshared)コードが具体的メソッドを呼び出す際、opaque型として見える値型がスタックで渡されるのに対し、具体化されたメソッドではレジスタで受け取る、という不一致が発生していた。最新LLVMがbyval構造体をスタックに配置するため、値が破損していた。修正により、≤16バイト値型は常にレジスタで渡され、JITとLLVMバックエンド間の呼び出し規約が一致するようになった。

// 修正前:Nullable<GenQ<int>>のboxing/unboxing時に値が破損
using System;
public struct GenQ<T> where T : struct { public T? Field; }
public static class Repro {
    static bool Gen<T>(T? o) where T : struct {
        var v = (GenQ<int>)(ValueType)(object)o;  // box T?, then unbox
        return !v.Field.HasValue;  // Mono LLVM full-AOT x64では不正な値を返す
    }
    static int Main() => Gen<GenQ<int>>(default(GenQ<int>)) ? 100 : 666;
}

変更内容

  • mini-amd64.c: add_valuetype()関数でstraddling field検出時に小さい値型をスタックに強制していたロジックを削除。マネージド(非P/Invoke)呼び出しでは≤16バイト値型をレイアウト非依存な分類(total sizeベース)で処理し、常にレジスタ(ArgValuetypeInReg)に分類するように変更
  • StraddlingVtypeAbi.cs/csproj: 新しい回帰テストを追加。gshared Nullable<GenQ<int>>のbox/unboxケース、整数straddler、浮動小数点fieldのstraddler、参照型を含む≤16バイト構造体のGC安全性を検証
  • nullabletypes関連テスト: 既存テストから不要なフィルタを削除(修正により両JIT・full-AOTで動作するようになった)

パフォーマンスへの影響

影響なし。レジスタ渡しはスタック渡しと同等かそれ以上の効率。スタックアクセスの削減により、むしろパフォーマンス向上の可能性あり。

関連Issue

#129508

その他

  • スコープはx64のみ: arm64は既にサイズベース分類を使用、x86/arm/riscvにはstraddleルールなし、wasm/llvmonlyは別の実装
  • GC安全性: 参照を含む≤16バイト値型では8バイト境界が保証されており、eightbyteは管理ポインタを分割しないため安全
  • P/Invoke、戻り値、16バイト超える構造体は既存のABI(スタック/byval)を維持
  • MonoAOT LLVM 23 full-AOT回帰セット対応(#129508追跡)

#129693 [mono] Fix re-entrant AssemblyLoadContext resolution stack overflow under full-AOT

概要

Mono full-AOT環境下で、マネージドAssemblyLoadContextのresolve hookが呼び出された際に発生する無限再入による無制限再帰(スタックオーバーフロー)を修正します。

根本原因は、resolve hook内でAssemblyNameパースが行われ、その際に汎用メソッド(MemoryExtensions.Split<T>)をJIT-コンパイルする必要が生じ、これが同じアセンブリの解決をトリガーして同じhookが再度呼び出されるという無限ループです。JIT/インタプリタでは汎用メソッドが既にキャッシュされているため、この問題は発生しません。

変更内容

  • src/mono/mono/metadata/assembly-load-context.c: スレッドローカルストレージ(TLS)を使用した再入性ガード機構を追加。(resolve_method, assembly_name)をキーとして同一スレッド上での同じhookへの再入を検出し、ネストされた呼び出しはNULLを返して再帰を遮断します。TLSキーはmono_alcs_initで初期化され、再入検出時はデバッグトレースを出力します。
  • src/tests/JIT/Regression/JitBlue/Runtime_105619/Runtime_105619.cs: 既存テストの調整。
  • eng/pipelines/runtime-llvm.yml: パイプライン設定の更新。

パフォーマンスへの影響

正常な非再入的なアセンブリロードには影響なし。再入性ガードのTLS検査は最小限のオーバーヘッド(リスト走査)で実装されており、通常のロードパスでは追加コストは無視できます。

関連Issue

その他

本修正はMonoAOT LLVM 23 full-AOT回帰テスト群の一部です。修正前はfull-AOT下でSIGSEGV(スタックオーバーフロー)が確定的に発生していたのに対し、修正後はRuntime_105619テストを含む数百個のサブテストがJIT/インタプリタと同じ動作で成功することで検証されています。


#129629 Surface scheduled outerloop Helix work item failures as warnings

概要

スケジュール実行時のHelix作業項目の失敗を警告として表示し、ビルド失敗と扱わない変更です。PR #129049で失敗したHelix作業項目が完全に非表示になっていた問題を改善し、タイムラインに失敗が可視化されるようにします。

変更内容

  • src/libraries/sendtohelixhelp.proj: WarnOnHelixWorkItemFailureターゲットを新規追加。WarnOnHelixTestFailure=true時に失敗した作業項目について<Warning>を発行。
  • eng/pipelines/libraries/helix.yml: 新規パラメータwarnOnTestFailures(デフォルトfalse)を追加し、/p:WarnOnHelixTestFailureに連携。
  • eng/pipelines/libraries/outerloop.yml: スケジュール実行時にfailOnTestFailures: falseと並行してwarnOnTestFailures: trueを設定。

パフォーマンスへの影響

影響なし

関連Issue

#129049

その他

  • 変更は内部ビルドシステム(MSBuild.projファイル、Azure Pipelines定義)のみの影響で、公開APIやランタイム動作への影響はありません。
  • 警告はエラーに昇格しません(_warnAsErrorParamHelixOverrideにより無効化)。
  • スケジュール済み外側ループビルドで複数のワーク項目失敗が警告として表示されることが確認済みです。

#129626 Remove unsafe code from System.Reflection.Metadata PE/blob writers

概要

System.Reflection.Metadata内のPEおよびBlobライターからunsafeコードを削除し、安全性と保守性を向上させます。具体的には、BinaryPrimitivesを使用したリトルエンディアン読み書きとイテレータ割り当て削減により、ポインタベースのコードを置き換えています。機能的な動作変更はありません。

変更内容

  • PEBuilder.cs: PE チェックサム計算ロジックを刷新。BlobBuilder.GetBlobs()構造体列挙子を直接反復し、BinaryPrimitives.ReadUInt16LittleEndianを使用してポインタ演算を削除。同時にIEnumerable<Blob>/yieldイテレータ割り当てを削減。
  • Handles.TypeSystem.cs: BlobHandle.SubstituteTemplateParametersでunsafe固定ポインタキャストを削除し、BinaryPrimitives.WriteUInt32LittleEndianを使用して値を安全に書き込み。

パフォーマンスへの影響

  • メモリ改善: イテレータ割り当ての削減により、チェックサム計算時のGCプレッシャー軽減が期待できます。
  • 実行速度: BinaryPrimitivesはJITで最適化されるため、ポインタ演算との性能差は無視できるレベルです。

関連Issue

なし

その他

GitHub Copilotの支援を受けて作成されています。変更は内部実装(PE生成パス)に限定されており、公開APIへの影響はありません。


#129612 BCrypt Composite ML-DSA

概要

Windows Insider Buildsで利用可能なBCrypt経由のComposite ML-DSA対応を実装しました。Windows上のデフォルト実装をマネージドからBCryptに変更し、PQDSA BlobメカニズムによるComposite ML-DSAのキー生成・インポート・エクスポート・署名・検証機能を追加しています。Composite ML-DSA非対応のWindowsバージョンでもマネージド実装でサポートされなくなります。

変更内容

  • BCrypt Interop層: Composite ML-DSAのBCryptアルゴリズム名定数、PQDSA Blobの公開鍵・秘密鍵マジックナンバーを追加
  • PqcBlobHelpers.cs: Compositeパラメータセットのエンコード/デコードヘルパー関数を追加
  • CompositeMLDsaImplementation.Windows.cs: PlatformNotSupportedExceptionのスタブからBCrypt実装へ完全置き換え(キー生成・インポート・エクスポート・署名・検証)
  • CompositeMLDsa.cs: PKCS#8秘密鍵インポート時のアルゴリズムサポートチェック追加
  • BCryptSignHash.cs: PQC"pure"署名ヘルパーの戻り値をbytesWrittenに変更
  • マネージド実装削除: Windows用ビルドからマネージドComposite ML-DSAソースを除外
  • テスト更新: Windowsプラットフォーム対応検証を更新

パフォーマンスへの影響

影響なし

関連Issue

#116999

その他

  • 本変更はComposite ML-DSA対応をBCrypt側で行うため、サポート対象アルゴリズムがMicrosoft公開ドキュメント記載の4種に限定されます
  • Composite ML-DSA非対応のWindowsバージョンでは、マネージド実装も削除されたため完全にサポート外となります
  • 公開API(CompositeMLDsa)には破壊的変更なし

#129589 Arm64 R2R: fold adrp+add+ldr into adrp+ldr[#:lo12:]

概要

Arm64 R2R(Read-to-Run)コード生成において、再配置可能間接アクセスのための adrp + add + ldr 命令シーケンスを adrp + ldr[#:lo12:] に最適化します。新しい ARM64_PAGEOFFSET_12L 再配置タイプを導入し、ページオフセットを ldr 命令に直接折り込むことで、1アクセスあたり1命令削減を実現。libraries.crossgen SPMI測定で -2.1 MB、System.Private.CoreLib.dll (R2R) では -192 KB の削減を達成しました。

変更内容

  • corinfo.h: CorInfoReloc 列挙型に ARM64_PAGEOFFSET_12L を追加(ネイティブ再配置タイプ)
  • jiteeversionguid.h: JIT/EEインターフェース GUID をバージョンアップ(新しい列挙値対応)
  • utilcode.h/util.cpp: Arm64 用 GetArm64Rel12Ldr / PutArm64Rel12Ldr ヘルパー関数を追加
  • emitarm64.cpp/emitarm64.h: TryFoldPageOffsetIntoLdr ピープホール最適化ロジック実装。add 命令を削除して新しい再配置タイプを記録した ldr を生成
  • CorInfoTypes.cs/CorInfoImpl.cs: マネージド側の CorInfoReloc ミラー定義を拡張し、オブジェクトライタへのマッピング追加
  • SuperPMI サポート: spmiutil.h/spmiutil.cpp、compileresult.cpp で ARM64_PAGEOFFSET_12L の再配置パッチと文字列化対応を実装

パフォーマンスへの影響

大幅な削減: libraries.crossgen SPMI 測定で -2.1 MB、System.Private.CoreLib.dll (R2R) で -192 KB の削減。1アクセスあたり1命令削減により、Arm64 R2R コードサイズが x64 相当の効率に近付きます。

関連Issue

#129589

その他

  • 本変更は Arm64 R2R/JIT コンパイラ の内部実装(再配置ロジック)に限定され、公開API への影響なし
  • マネージド AOT オブジェクトライタ側は既に 12L 再配置をサポートしていたが、RyuJIT が未対応だったため、本 PR でその対応を実現
  • JIT/EE バージョン GUID 変更により、新旧の JIT/EE 組み合わせでの互換性確保が必要

#129588 Make Windows system-DLL P/Invokes use only DllImportSearchPath.System32

概要

Windows システム DLL の P/Invoke に対して [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] 属性を追加し、DLL 検索パスを System32 に制限します。これにより、advapi32、kernel32、ntdll、ole32、user32 など OS ライブラリの P/Invoke の安全性と正確性を向上させます。セキュリティ向上と意図しないアセンブリ検索の防止を目的としています。

変更内容

  • src/libraries/Common/src/Interop/Windows/ 配下の全 Windows OS ライブラリ P/Invoke 定義(advapi32、bcrypt、crypt32、kernel32、ntdll、ole32、oleaut32、secur32、shell32、user32、normaliz、ucrtbase、ws2_32、winhttp、api-set forwarder など)に [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] 属性を追加
  • docs/coding-guidelines/interop-guidelines.md: P/Invoke のコーディングガイドラインにドキュメント追加(4 行追加)
  • 計 600+ ファイルが更新される大規模な変更

パフォーマンスへの影響

影響なし。検索パス制限によるパフォーマンス上の改善または低下は無視できる範囲と考えられます。

関連Issue

なし

その他

  • この PR は GitHub Copilot の支援を受けて作成されました
  • 変更ファイル数が 300 を超えるため、Copilot による自動レビュー機能は機能していません
  • SPCL(Single-file Publish Consolidated Library)とライブラリは既に DllImportSearchPath.Assembly と DllImportSearchPath.System32 を指定していますが、本変更により System32 のみに制限することで、アセンブリディレクトリ(シングルファイルの場合はアプリケーションディレクトリ)での検索を排除し、意図しない DLL 置き換えを防止します
  • 破壊的変更なし:内部実装の強化であり、公開 API の変更ではありません

#129342 Fix apphost/bundle creation failure on chmod-hostile filesystems

  • 作成者: @elinor-fung
  • 作成日時: 2026年06月12日 18:47:03(UTC)
  • マージ日時: 2026年06月26日 18:28:18(UTC)
  • ラベル: area-HostModel

概要

rootless podmanなどのchmod非対応ファイルシステムでdotnet buildと単一ファイル発行が失敗する問題を修正します。ファイル作成時に実行可能権限を設定し、事後的なchmodを回避することで、EPERM エラーを防ぎます。HostWriter(apphost)とBundler(単一ファイルバンドル)の両方が同じ問題の影響を受けており、共通ヘルパーで統一的に対応します。

変更内容

  • HostModelUtils.cs(新機能): Unix環境でFileStreamOptions.UnixCreateModeを使用してファイル作成時に0755権限を設定するCreateFileStreamForHostと、必要時のみchmodを適用するSetPermissionsForHostの2つの共有ヘルパーを追加
  • HostWriter.cs: apphost出力ストリーム生成を新ヘルパーに変更し、権限強制を統合
  • Bundler.cs: バンドル出力作成を新ヘルパーに変更し、権限強制を統合
  • UnixUtils.cs: net472専用のchmod P/Invoke shimを削除(net472はWindows上のみで動作するため不要)
  • CreateAppHost.cs(テスト): Unix専用の回帰テストExecutableImageOverwritesExistingNonExecutableFileを追加し、既存の非実行可能apphost上での上書き時に-rwxr-xr-x権限が得られることを確認

パフォーマンスへの影響

影響なし。本変更は権限設定の動作タイミングを変更するもので、パフォーマンスに関連する変更ではありません。

関連Issue

#129040

その他

  • この修正はrootless podmanおよび他のchmod非対応バインドマウントファイルシステムで発生するSystem.UnauthorizedAccessException/System.IO.IOException: Operation not permittedを解決します
  • ファイル作成時に権限を設定することでchmod非対応環境ではchmodをスキップし、通常のLinuxファイルシステムでは制限的なumaskの下でも0755を厳密に強制します
  • HostWriter内の既存try/catchにより、権限設定が本当に失敗した場合は不完全なapphostを削除してエラーを報告します

#128741 Sanitize control/format characters in console logger output across all formatters

概要

コンソールロギングで信頼できないコントロール文字が出力されるセキュリティ脆弱性を修正するPRです。SimpleConsoleFormatterとSystemdConsoleFormatterで Unicode Cc(制御文字)/Cf(形式文字)を \uXXXX 形式にエスケープして出力することで、ターミナルエスケープシーケンスの実行やあいまいな出力を防止します。

変更内容

  • ConsoleControlCharacterSanitizer.cs(新規): 制御文字・形式文字を検出してエスケープする共有サニタイザーを追加
  • SimpleConsoleFormatter.cs: メッセージ/例外/カテゴリ/スコープテキストを出力前にサニタイズ
  • SystemdConsoleFormatter.cs: メッセージ/例外/カテゴリ/スコープテキストを出力前にサニタイズ
  • JsonConsoleFormatter.cs: char値の状態プロパティ処理を調整(サニタイザーは適用されていない)
  • Microsoft.Extensions.Logging.Console.csproj: ValueStringBuilderへの依存を追加
  • ConsoleFormatterTests.cs: サニタイズ動作の単体テストを追加(現在は非JSONフォーマッターのみ対象)

パフォーマンスへの影響

サニタイズ処理により若干のメモリ割り当てと処理時間が増加します。ValueStringBuilderの使用により割り当て最小化に配慮されています。影響なし(セキュリティ上の重要な修正であり、パフォーマンス上の問題報告なし)

関連Issue

#128727

その他

  • 動作変更: コントロール/形式文字は出力時に \uXXXX 形式にエスケープされます。既存のログ解析スクリプトがこれに依存する場合は影響を受ける可能性があります。
  • JSONフォーマッターはサニタイザー適用対象外のため、JSON出力内の制御文字は別途対策が必要な可能性があります。

目次