Pull Request on 2026年07月16日

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

注意点

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


目次

  1. #130908 Use stdcall for dotnet_execute in dotnet-aot
  2. #130906 Fix ComObject finalizer crash from OLE DB error RCWs
  3. #130882 Make DocumentationSignatureParser in ILLink public
  4. #130853 Enable Wasm.Build.Tests runtimeconfig property tests
  5. #130850 Light up remaining SIMD intrinsics on WASM
  6. #130848 Disable newly added test on clrinterp
  7. #130841 [wasm] Make the finalizer slot callable from R2R before returning it
  8. #130833 [main] Source code updates from dotnet/dotnet
  9. #130819 Remove --forward-console support from wasm/browser app host
  10. #130815 Handle XmlConvert unspecified DateTimeOffset at local time-zone boundaries
  11. #130811 JIT: Make GenTreeCall::Equals compare gtCallMoreFlags and more
  12. #130810 Normalize GetNameInfo under malformed SANs
  13. #130808 Infer System.Text.Json polymorphism from closed type hierarchies
  14. #130807 Implement INumberBase and conversions for the IEEE 754 decimal types
  15. #130806 Run InvalidFriendAssemblyName outside merged runner and disable in R2R
  16. #130804 Fix Duplicate ownership state machine under concurrency for NCrypt handles
  17. #130800 Fix freebsd-arm64 build
  18. #130798 Run Wasm.Build.Tests Helix jobs in parallel
  19. #130784 [browser][CoreCLR] Drop coreVfs resource support from loader
  20. #130782 Use stable net/netframework folders for WebAssembly.Pack.Tasks
  21. #130777 Mark custom continuation resumptions as StackTraceHidden
  22. #130775 Ignore all 5xx responses in Deflate remote server test
  23. #130769 Disable r2r test on Release
  24. #130765 Enable browser CoreCLR interpreter tests disabled under #123011, re-disabling those with real platform limits
  25. #130757 Fix CRLF encoding in EightBitStream
  26. #130744 Derive from Stream in ReadOnlyMemoryStream and WritableMemoryStream
  27. #130733 Bump actions/setup-node from 6 to 7
  28. #130729 [cDAC] Encapsulate loader heap block traversal
  29. #130725 [cDAC] Validate global reads against descriptor types
  30. #130722 Merging internal commits for release/9.0
  31. #130721 Speed up BigInteger conversions to floating-point types
  32. #130720 Skip null elements in [ValidateEnumeratedItems] validation
  33. #130704 Ensure GenAPI can resolve implementation-only assemblies when regenerating ref source
  34. #130674 Skip single-connect test on Apple mobile CoreCLR
  35. #130675 Disable EventSource for Apple mobile NativeAOT test libraries
  36. #130652 [manual] Merge release/9.0-staging into release/9.0
  37. #130651 [manual] Merge release/8.0-staging into release/8.0
  38. #130564 [R2R] Align composite ManifestMetadata and ComponentAssemblies sections to 4 bytes
  39. #130483 Fix config binding generator CS0103 for required/init property with matching ctor param
  40. #130417 JIT: preserve null check for unused GT_BLK arg when inlining
  41. #130403 Preserve HybridCacheEntryOptions.ToDistributedCacheEntryOptions from trimming
  42. #130380 Enable wasm-tools workload for CoreCLR WASM targets
  43. #130370 Consolidate crossgen2-composite and r2r into crossgen2-outerloop pipeline
  44. #130349 Improve breaking-change-doc version detection and issue link
  45. #129717 [WASM] Use relocs for tableBase / imageBase / stackPointer globals
  46. #129615 Allow the GcInfoDumper to report scratch registers at safe points (DECODE_NO_VALIDATION)
  47. #129048 Add HybridCache.GetOrCreateAsync overloads for dynamic setting of options
  48. #128604 JIT, AOT preinit, and CoreLib: Saturate float/double conversions to small integral types

#130908 Use stdcall for dotnet_execute in dotnet-aot

  • 作成者: @elinor-fung
  • 作成日時: 2026年07月16日 19:06:12(UTC)
  • マージ日時: 2026年07月16日 22:51:53(UTC)
  • ラベル: area-Host

概要

dotnet-aot SDKのエントリーポイント dotnet_execute のABI契約をWindows上で __stdcall 呼び出し規約に変更する修正です。fxr muxer、mock AOT SDK、およびドキュメントを更新し、Windowsでの正確な関数エクスポートを確保します。

変更内容

  • src/native/corehost/fxr/fx_muxer.cpp: dotnet_execute 関数ポインタ型定義を __stdcall に更新
  • src/native/corehost/test/mockaotsdk/mockaotsdk.cpp: mock dotnet_execute エントリーポイントを __stdcall に変更
  • src/native/corehost/test/mockaotsdk/mockaotsdk.def: Windows上での dotnet_execute エクスポート定義ファイルを新規追加
  • src/native/corehost/test/mockaotsdk/CMakeLists.txt: Windows buildで.defファイルを組み込むよう更新
  • docs/design/features/sharedfx-lookup.md: dotnet_execute シグネチャのドキュメント更新と呼び出し規約の明確化

パフォーマンスへの影響

影響なし

関連Issue

#130903

その他

この変更は内部実装(native corehost)とテスト インフラに限定される修正です。公開APIへの影響はありません。Windows での ABI契約の厳密性向上を目的としています。


#130906 Fix ComObject finalizer crash from OLE DB error RCWs

概要

OLE DB エラーハンドリング時に、スレッド関連の COM オブジェクト(IErrorInfo/ISQLErrorInfo)がファイナライザースレッドで解放されることで発生していたプロセスクラッシュを修正します。

問題:OleDbError コンストラクタで生成された COM RCW(Runtime Callable Wrapper)が、エラー処理中に例外発生した場合、手動解放がスキップされてファイナライザーで処理されていました。スレッド関連の OLE DB オブジェクトは呼び出し元スレッドでのみ安全に解放可能なため、ファイナライザースレッドでの解放がアクセス違反を引き起こしていました。

修正:try/finally で COM オブジェクトを確実に呼び出し元スレッドで解放します。また、デバッグビルドのみで、FreeThreadedStrategy に COM オブジェクトのスレッド互換性(IAgileObject/フリースレッドマーシャラー)を検証するアサーションを追加し、非互換オブジェクトの早期検出を支援します。

変更内容

  • src/libraries/System.Data.OleDb/src/OleDbError.cs: IErrorInfo および ISQLErrorInfo COM RCW を try/finally でラップし、例外発生時でも確実に呼び出し元スレッドで解放するように変更。
  • src/libraries/System.Runtime.InteropServices/src/System/Runtime/InteropServices/Marshalling/FreeThreadedStrategy.cs: DEBUG ビルド限定で COM オブジェクトのスレッド親和性を検証するプローブ/アサーション機能を追加。リリースビルドではコンパイルアウトされます。

パフォーマンスへの影響

影響なし。デバッグ時のアサーション以外、実行時パフォーマンスに変更なし。[Conditional("DEBUG")] 属性により、リリースビルドではデバッグ用コードは完全に除外されます。

関連Issue

#125221

その他

なし


#130882 Make DocumentationSignatureParser in ILLink public

概要

ILLinkのDocumentationSignatureParserをinternalからpublicに変更し、UnityLinkerなどの外部コンシューマーがドキュメント署名解析機能を再利用できるようにします。

変更内容

  • Mono.Linker.DocumentationSignatureParserクラスのアクセス修飾子をinternalからpublicに変更
  • ITryResolveインターフェースのアクセス修飾子をinternalからpublicに変更

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • API公開範囲の拡大: これまで内部実装だったDocumentationSignatureParserが公開APIとなります。外部ツール(UnityLinkerなど)から直接使用可能になります。
  • 互換性: 既存コードへの破壊的変更はありません。内部実装がpublicになる一方向の変更です。

#130853 Enable Wasm.Build.Tests runtimeconfig property tests

概要

WebAssembly (Wasm) ビルドテストで、runtimeOptions.configProperties(AppContext データ)が正しく処理されることを検証するテストを再度有効化しました。これらのテストは #97449 で無効化されていましたが、関連機能が #115113 で実装・完了されたため、[ActiveIssue] 属性を削除して復活させています。

変更内容

  • WasmBuildAppTest.cs: PropertiesFromRuntimeConfigJson テストと PropertiesFromCsproj テストから [ActiveIssue] 属性を削除(合計2行削除)
  • WasmTemplateTestsBase.cs: 対応する調整を実施(3行追加、1行削除)

パフォーマンスへの影響

影響なし

関連Issue

  • #97449 (元々これでテストが無効化された)
  • #115113 (機能実装による完了)

その他

なし


#130850 Light up remaining SIMD intrinsics on WASM

概要

WASMプラットフォーム上のVector128/Vector SIMD intrinsicsの実装拡大。既存のクロスプラットフォームgtNewSimd*NodeビルダーとWASMのPackedSimd V128プリミティブを活用して、未実装だった要素アクセス、スカラー演算、シャッフル、クロスレーン演算などの intrinsicsをWASMで利用可能にします。

変更内容

  • JITインポーター/ビルダー (gentree.cpp, hwintrinsic.cpp):

    • GetElement/WithElement/ToScalar/CreateScalar/CreateScalarUnsafeのWASM対応
    • 定数インデックス/可変インデックスシャッフル、i8x16.shuffleへの最適化
    • Reverse, Sum, Zip/Unzip, Concat, WidenUpper (float), Narrow, NarrowWithSaturationの実装
    • スカラーMinMaxをV128操作として対応
    • 既存xarchロジックの共有(2ソース共通シャッフルビルダーなど)
  • WASMコード生成 (hwintrinsiccodegenwasm.cpp, lowerwasm.cpp, regallocwasm.cpp):

    • 定数シャッフルのi8x16.shuffle直接発行
    • V128再解釈のノーオプコード生成
    • 可変シャッフルのバイトインデックス展開実装
    • 一時ローカルスロット調整
  • 最適化 (valuenum.cpp, lclmorph.cpp, importercalls.cpp):

    • ExtractMostSignificantBitsおよびConditionalSelectのValue Numberingフォールディング対応
    • SIMD フィールドアクセスの低レベル化有効化
    • スカラーmin/max インポート有効化
  • テスト (PackedSimdTests.cs):

    • 新規有効化intrinsicsの要素操作、シャッフル、削減、min/max、フォールディングパスの回帰テスト追加(583行)

パフォーマンスへの影響

影響なし(機能追加により新規コード生成パスが発生しますが、既存アルゴリズムの再利用で効率化)

関連Issue

なし

その他

以下のintrinsicsは意図的に除外:

  • long↔double変換、Fma、可変per-lane ShiftLeft — WASMに対応ネイティブ命令がないため、ソフトウェアフォールバック継続。コメントで理由を文書化。

コード生成ABI/V128マテリアライゼーションとコード生成ディスパッチギャップは本PRの対象外(エンドツーエンド有効化は別途対応予定)。


#130848 Disable newly added test on clrinterp

概要

CoreCLRプロファイラーの回帰テスト (elttransitions) を更新し、ICorProfiler Enter/Leave フックが未実装である clrinterp 構成でのテスト失敗を防ぐ変更です。プラットフォーム機能チェックに基づいてテストをスキップすることで、既存のプロファイラーテストと一貫性を保ちます。

変更内容

  • src/tests/profiler/elttransitions/elttransitions.cs
    • TestLibrary.PlatformDetection.IsICorProfilerEnterLeaveHooksEnabled の確認を追加
    • Enter/Leave フックが有効でない場合、テストを早期にスキップする処理を実装(+5行)

パフォーマンスへの影響

影響なし

関連Issue

#130639

その他

  • インタープリター (clrinterp) では Enter/Leave 機能が実装されていないため、既存の同類テストと同様の機能チェック機構を採用
  • CI での失敗回避を目的とした防御的な変更

#130841 [wasm] Make the finalizer slot callable from R2R before returning it

概要

WebAssembly(FEATURE_PORTABLE_ENTRYPOINTS)ターゲットで、ReadyToRun(R2R)モードの実行時にファイナライザー呼び出しがRuntimeError: null function or function signature mismatchでトラップする問題を修正します。GCInterface_GetNextFinalizableObject が未準備メソッドの"cold" Portable Entry Point(_pActualCode == 0)を返していたため、call_indirect が無効なワズムテーブルスロット0をターゲットにしていました。この修正により、ファイナライザーのポータブルエントリーポイントが呼び出し可能なコード(ネイティブR2Rコードまたはインタープリタースタブ)に解決されるようになります。

変更内容

  • comutilnative.cpp: ファイナライザー取得後、FEATURE_PORTABLE_ENTRYPOINTS ガード下で MethodDesc::EnsurePortableEntryPointIsCallableFromR2R() を呼び出し、ポータブルエントリーポイントを呼び出し可能な状態に確保
  • callhelpers.cpp・methodtable.cpp: リファクタリングにより、ファイナライザースロットインデックスをローカル変数にキャッシュして冗長性を削除
  • 既存のコンストラクタスロット処理(methodtable.cpp:3579)と同じパターンを適用

パフォーマンスへの影響

影響なし。EnsurePortableEntryPointIsCallableFromR2R は WRAPPER_NO_CONTRACT で GC遷移がないため、ファイナライザー初回呼び出し時のみ軽微なオーバーヘッドが発生しますが、既存のコンストラクタ・P/Invoke呼び出しサイトと同等です。

関連Issue

#130839、#130634

その他

  • 本修正はR2R-on-wasm機能が本流にマージされるまでメイン上でのCI検証ができないため、ドラフトステータスです
  • R2R-on-wasmプロトタイプで検証済み:ファイナライザーテスト(b12795、b38269)がクラッシュから成功に改善、他のテストは影響なし
  • 内部実装変更で公開APIへの影響はありません
  • この変更は公開ドキュメント(clr-abi.md:865-871)に記載されたR2R呼び出しサイトの不変条件に準拠した必須の修正です

#130833 [main] Source code updates from dotnet/dotnet

概要

VMR(Virtual Monolithic Repository)からのコードフロー更新です。複数の依存関係パッケージを最新版に更新します。主な更新は、Microsoft.CodeAnalysis系パッケージ、ビルドタスク、NuGetツール、ランタイムコンポーネント(JIT、Mono LLVM)などです。

変更内容

  • eng/Version.Details.props: 依存関係バージョン情報を更新(68行削除/追加)
  • eng/Version.Details.xml: 依存関係の詳細定義を更新(137行削除/追加)
  • global.json: グローバルNuGetバージョン情報を更新(4行削除/追加)

主要な依存関係更新:

  • Microsoft.CodeAnalysis系: 5.10.0-1.26363.117 → 5.10.0-1.26365.101
  • Microsoft.DotNet.Arcade.Sdk及び関連ビルドタスク: 11.0.0-beta.26363.117 → 11.0.0-beta.26365.101
  • Microsoft.NETCore.App.Ref、System.Reflection.Metadata、System.Text.Json: 11.0.0-preview.7.26363.117 → 11.0.0-preview.7.26365.101
  • NuGet系パッケージ(NuGet.Frameworks、NuGet.Packaging等): 7.10.0-rc.36417 → 7.10.0-rc.36601
  • ランタイム JIT及びMono LLVM ツール(複数プラットフォーム対応): 23.1.0-alpha.1.26329.1 → 23.1.0-alpha.1.26357.1

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • これは自動コードフロー更新(dotnet-maestro[bot]による)で、VMRからのソースコード変更と依存関係更新を含みます
  • 関連リポジトリ(aspnetcore、diagnostics、efcore、msbuild、roslyn、sdk、vstest)の変更も同期されています
  • すべての更新は開発版(preview/beta/rc)のプレリリースバージョンです

#130819 Remove --forward-console support from wasm/browser app host

概要

WebAssemblyアプリホストから--forward-consoleフラグとそれに関連するインフラストラクチャを削除します。このフラグはブラウザコンソールメッセージをWebSocket経由でホストに転送し、標準出力に出力する機能でした(主にFirefoxの対応が目的)。現在ではPlaywrightの標準的なブラウザコンソール転送機能により不要になったため、ホスト側の実装を完全に削除します。

変更内容

ホスト側の削除(完全):

  • BrowserArguments.cs — --forward-console CLI オプション、ForwardConsoleOutput プロパティ、JSON プロパティ解析を削除
  • RunArgumentsJson.cs — forwardConsole フィールドを削除
  • BrowserHost.cs — コンソール接続ワイヤリング、RunConsoleMessagesPump メソッド削除
  • WebServerOptions.cs / DevServer/DevServerOptions.cs — OnConsoleConnected メンバを削除
  • WebServerStartup.cs / DevServer/DevServerStartup.cs — /console WebSocket エンドポイント削除
  • WasmTestMessagesProcessor.cs と WasmLogMessage.cs ファイルを削除

テストの修正:

  • InterpPgoTests と WasmTemplateTests が唯一のホスト側コンシューマー。Chrome/Playwright環境で実行されるため、ホストの標準出力からの読取ではなく、Playwrightの標準的なコンソール転送機能(page.Console)でブラウザコンソール出力をキャプチャするよう修正

意図的に対象外:

  • JS側のconfig.forwardConsole処理(ブラウザランタイムローダー、test-main.mjsなど)
  • xharness側の独自/consoleハンドラ(Firefox関連のコンソール転送はこちら側で対応)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

Firefox環境でのコンソール転送機能は、xharness/JS側に完全に残されているため、Firefox関連のシナリオには影響なし。sendtohelix-browser.targetsとBuildEnvironment.csのFirefox関連コメントはxharness/JSパスを参照しており、本変更の対象外。


#130815 Handle XmlConvert unspecified DateTimeOffset at local time-zone boundaries

  • 作成者: @Copilot
  • 作成日時: 2026年07月15日 19:28:08(UTC)
  • マージ日時: 2026年07月16日 07:01:30(UTC)
  • ラベル: area-System.Xml

概要

XmlConvert.ToDateTimeOffsetがローカルタイムゾーン境界での未指定のDateTime値に対してスローされる問題を修正します。ローカルUTCオフセットを適用する際、値がDateTimeOffsetの表現可能範囲外になる場合にのみクランプし、その他のケースでは既存動作を保持します。

TimeSpan offset = TimeZoneInfo.Local.GetUtcOffset(dt);

if (dt == DateTime.MinValue && offset >= TimeSpan.Zero)
{
    result = DateTimeOffset.MinValue;
}
else if (dt == DateTime.MaxValue && offset <= TimeSpan.Zero)
{
    result = DateTimeOffset.MaxValue;
}
else
{
    result = new DateTimeOffset(dt, offset);
}

変更内容

  • System.Xml.Schema.XsdDateTime.cs: XsdDateTimeKind.Unspecifiedに対するDateTimeOffsetへの暗黙的変換ロジックを更新。DateTime.MinValueと非負のオフセットでアンダーフローする場合、またはDateTime.MaxValueと非正のオフセットでオーバーフローする場合のみ、DateTimeOffsetの最小値/最大値にクランプする処理を追加
  • System.Private.Xml.Tests.csproj: RemoteExecutorを有効化
  • XmlConvertEndOfDayTests.cs: タイムゾーン隔離環境でTZを変更し、正と負のオフセットを含む境界ケース(0001-01-01T00:00:00と9999-12-31T23:59:59.9999999)の回帰テストを追加

パフォーマンスへの影響

影響なし

関連Issue

#130814

その他

  • テスト基盤の強化: RemoteExecutorをSystem.Private.Xmlテストで有効化することで、タイムゾーン依存の処理を独立プロセスで検証可能に
  • 破壊的変更なし:既存の表現可能な境界値については従来の動作(オフセット保持)を継続
  • 修正範囲は公開API XmlConvert.ToDateTimeOffsetの呼び出し時の例外回避に限定

#130811 JIT: Make GenTreeCall::Equals compare gtCallMoreFlags and more

概要

JITコンパイラのGenTreeCall::Equalsメソッドを強化し、呼び出しノードの等価性比較時に追加のセマンティック情報(フラグとメタデータ)を含めるようにしました。これにより、ランタイムで異なる動作をする呼び出し(例:null チェック有無)が誤って同一として扱われるリスクを軽減します。

変更内容

  • src/coreclr/jit/gentree.h: ReturnTypeDesc::Equalsメソッドを追加し、複数レジスタのリターン記述子を構造的に比較できるようにしました。
  • src/coreclr/jit/gentree.cpp: GenTreeCall::Equalsを拡張し、以下の情報を比較対象に追加しました:
    • 選択されたgtFlags
    • すべてのgtCallMoreFlags
    • リターン型メタデータ
    • 非同期メタデータ
    • 引数シグネチャメタデータとレイアウト互換性
    • ReadyToRun エントリポイント等価性チェックを強化(addrのみでなく完全なCORINFO_CONST_LOOKUPを比較)

パフォーマンスへの影響

影響なし(比較ロジックの強化であり、ランタイム性能に直接的な影響なし)

関連Issue

なし

その他

JIT最適化時のツリー構造比較の正確性向上により、意図しない呼び出し命令のマージを防止します。これはコンパイラの正確性を高める内部実装の改善です。


#130810 Normalize GetNameInfo under malformed SANs

  • 作成者: @bartonjs
  • 作成日時: 2026年07月15日 18:55:07(UTC)
  • マージ日時: 2026年07月16日 18:45:54(UTC)
  • ラベル: area-System.Security

概要

X509Certificate2.GetNameInfoのSubject Alternative Name (SAN)エントリがmalformedな場合の動作を正規化します。OpenSSL側ではUPN otherNameの型チェックを強化し、managed decode側ではSAN/IAN デコード失敗時に例外を投げずに空文字列またはSubject/Issuerへのフォールバックを実現します。

変更内容

  • openssl.c: UPN otherName値をASN.1型がUTF8Stringである場合のみ有効と判定し、malformed データの誤解釈/クラッシュを防止
  • CertificateData.ManagedDecode.cs: SAN/IAN デコード失敗時の例外をキャッチし、GetNameInfoが空文字列を返すか Subject/Issuer値にフォールバックできるよう正規化
  • PropsTests.cs: malformed UPN エンコーディング/型、およびSANデコード失敗時のフォールバック動作をカバーするリグレッション テスト(246行)を追加

パフォーマンスへの影響

影響なし

関連Issue

#130810

その他

なし


#130808 Infer System.Text.Json polymorphism from closed type hierarchies

概要

System.Text.Json にクローズド型階層からのポリモーフィズム自動推論機能を追加しました。JsonSerializerOptions.InferClosedTypePolymorphism と JsonSourceGenerationOptionsAttribute.InferClosedTypePolymorphism をオプトイン設定として提供し、コンパイラが生成する System.Runtime.CompilerServices.IsClosedTypeAttribute メタデータを読み込んで、自動的に JsonDerivedType 登録を合成します。リフレクションとソース生成の両方で動作し、アクセシビリティ検証と新しい SYSLIB1240–1242 診断により、サポートされていない推論を報告します。

変更内容

  • 公開 API: JsonSerializerOptions.InferClosedTypePolymorphism プロパティおよび JsonSourceGenerationOptionsAttribute.InferClosedTypePolymorphism プロパティを追加
  • ランタイム実装 (DefaultJsonTypeInfoResolver.Helpers.cs): クローズド型階層の推論、決定的な文字列識別子の合成、アクセシビリティ検証を実装
  • ソース生成実装: JsonSourceGenerator.Parser.cs でクローズド型推論を実行、Roslyn ライトアップ機能とポリフィルで型の検出を実現
  • アクセシビリティ比較 (ReflectionExtensions.cs): Type.IsAtLeastAsVisibleAs メソッド追加で推論型の公開性を検証
  • キャッシング対応: JsonSerializerOptions.Caching.cs で新オプションを等値性・ハッシュ値計算に反映
  • 診断 (SYSLIB1240–1242): 派生型サポート不可、アクセシビリティ違反、識別子衝突時の警告を追加
  • ランタイムガード: ソース生成時にクローズド型向けのランタイムガード排出、メタデータ未生成時の例外メッセージ追加

パフォーマンスへの影響

影響なし

関連Issue

#129041

その他

  • テスト: System.Text.Json の 6 つのテストプロジェクト全体で 130,435 テスト実行、ゼロ失敗、17 件の期待されるスキップ
  • 新規テストファイル: PolymorphicTests.ClosedTypeInference.cs (共有 + ソース生成)、PolymorphicTests.CustomTypeHierarchies.cs に診断検証追加
  • オプションの等値性とハッシュ値計算に InferClosedTypePolymorphism を反映し、キャッシュの適切な動作を確保
  • 多言語リソースファイル (12 種類) に新規診断リソース追加(プレースホルダー)

#130807 Implement INumberBase and conversions for the IEEE 754 decimal types

概要

IEEE 754 decimal types(Decimal32、Decimal64、Decimal128)に対して、INumberBase<TSelf> インターフェース実装と完全な型変換マトリックスを追加します。変換対象は全ての組み込み数値型、System.Decimal、および他の2つのdecimal型です。また、ISpanFormattable、IUtf8SpanFormattable、IUtf8SpanParsable<TSelf> も実装されます。Intel BID参照ベクトルを用いた検証により、Decimal64 が System.Decimal の範囲外に丸まる境界条件を含む非自明な変換が対象となっています。

変更内容

  • Decimal32/64/128.cs: 型変換演算子、INumberBase<TSelf>(CreateChecked/CreateSaturating/CreateTruncating、TryConvertFrom*/TryConvertTo*)、UTF-8インターフェース実装を追加
  • Number.DecimalIeee754.cs: 共有変換ロジック(498行追加、新規)
  • Number.Formatting.cs: shared formatting helpers を追加(19行追加)
  • System.Runtime.cs: 新しいインターフェース・メンバー・演算子の public ref surface を更新(+279行)
  • テストファイル: Intel BID reference vectors に基づく変換テストを追加(計994行、DecimalIeee754IntelTestData.cs に加え、各型のテストに conversion-related ケース)

パフォーマンスへの影響

影響なし

関連Issue

#81376

その他

  • 各型が独自の変換dispatch を実装する設計は System.Half のパターンに準じています(System.Decimal と組み込み型が IEEE 754 decimal types より前に設計されたため)
  • より大規模なインターフェース(INumber、ISignedNumber、IFloatingPoint、IFloatingPointIeee754/IDecimalFloatingPointIeee754、IBinaryInteger スタイルのbit API)は後続PRで対応予定

#130806 Run InvalidFriendAssemblyName outside merged runner and disable in R2R

  • 作成者: @jtschuster
  • 作成日時: 2026年07月15日 18:11:00(UTC)
  • マージ日時: 2026年07月16日 20:09:46(UTC)
  • ラベル: area-ReadyToRun

概要

InvalidFriendAssemblyNameローダー回帰テストの実行構成を調整するPRです。このテストはランタイムJIT段階でのアクセス/可視性チェック例外を期待していますが、Crossgen2(ReadyToRun)ではこのチェックが実装されていません。テストをRequiresProcessIsolationでマークしてマージされたランナーの外で実行し、R2RIncompatibleでマークしてR2R実行時にスキップするようにしました。

変更内容

  • InvalidFriendAssemblyName.csproj: RequiresProcessIsolationとR2RIncompatible属性を追加し、テストがプロセス分離で実行され、R2R実行時にはスキップされるように構成を変更。あわせて、R2R非互換の理由を説明するコメントを追加。

パフォーマンスへの影響

影響なし

関連Issue

#130569、#13392

その他

このテストはCrossgen2では実装されていないILレベルの検証のみをキャッチするため、R2R環境での実行は不適切と判断されています。プロセス分離での実行により、テスト環境の安定性が向上します。


#130804 Fix Duplicate ownership state machine under concurrency for NCrypt handles

  • 作成者: @vcsjones
  • 作成日時: 2026年07月15日 17:56:08(UTC)
  • マージ日時: 2026年07月16日 02:13:10(UTC)
  • ラベル: area-System.Security

概要

CngKey.Handleプロパティアクセス時のNCryptセーフハンドル複製処理における競合状態の修正。複数スレッドが同時にDuplicate()を呼び出すと、両者が同じネイティブハンドルに対して異なるホルダーを生成し、所有権状態遷移時のアサーション失敗またはハンドルリークが発生していた問題を、_ownershipState遷移時のロック導入により解決します。

変更内容

  • NCryptSafeHandles.cs: _ownershipStateをvolatile化し、DuplicateOwnerHandle<T>()メソッドで初回重複時の所有権遷移(Owner → Duplicate)をロック保護。ロックは遅延初期化され、_ownershipState == Ownerの場合のみ使用されます。
  • CngKeyTests.cs: 複数スレッドが同時にCngKey.Handleにアクセスする競合状況をシミュレートする回帰テストを追加。複製後のハンドルが有効であることを検証します。

パフォーマンスへの影響

  • Handleプロパティアクセス時のパフォーマンスにわずかな低下あり。初回複製時(_ownershipState == Ownerの場合)のみロック競合が発生します。
  • 既に複製状態への遷移後は、ロック不要のため追加オーバーヘッドなし。

関連Issue

#130760

その他

修正前の問題: Debug ビルドではアサーション失敗により例外発生;Release ビルドでは複数のホルダーが同じネイティブハンドルを管理し、後発スレッドが先発スレッドのホルダーを上書きすることで、参照カウント不整合やダブルフリーが発生する可能性があります。

このPRは内部実装(SafeHandleクラスの保護機構)の修正であり、公開APIの変更ではありません。


#130800 Fix freebsd-arm64 build

概要

FreeBSD ARM64ビルド失敗を修正します。llvm-libunwindのRegisters.hppでgetauxval()関数が宣言されていないエラーが発生していました。FreeBSD環境ではgetauxval()がサポートされていないため、条件付きコンパイルでこの機能を無効化し、代替実装を提供しています。

変更内容

  • src/native/external/llvm-libunwind/src/Registers.hpp: ARM64アーキテクチャでgetauxval()の使用をFreeBSDで無効化。条件付きコンパイルディレクティブ(#ifdef)を追加し、FreeBSD環境ではAT_HWCAP2取得処理をスキップ
  • src/native/external/llvm-libunwind/CMakeLists.txt: FreeBSD ARM64ビルド用に必要なコンパイルフラグを追加
  • src/coreclr/nativeaot/Runtime/CMakeLists.txt: NativeAOT RuntimeのFreeBSD ARM64ビルド設定を追加
  • src/native/external/llvm-libunwind-version.txt: libunwindバージョン情報を更新

パフォーマンスへの影響

影響なし。本変更はビルド時のコンパイルエラー修正であり、ランタイムパフォーマンスに直接的な影響はありません。

関連Issue

#130800

その他

FreeBSD環境においてNativeAOT RuntimeのARM64ビルドが正常に完了するようになります。getauxval()はLinux固有の機能であり、FreeBSDでは利用不可のため、プラットフォーム固有の条件付きコンパイルで対応しています。


#130798 Run Wasm.Build.Tests Helix jobs in parallel

概要

Wasm.Build.Tests (WBT) の Helix ジョブ送信をシーケンシャルから並列実行に変更するPRです。従来は各ジョブの完了を待ってから次のジョブを送信していたため、全体の実行時間がジョブ数の合計期間に制限されていました。/maxcpucount:8 パラメータを extraHelixArguments に追加することで、既に存在する BuildInParallel=true を機能させ、複数の WBT ジョブコンボを並列送信・並列待機できるようになります。

変更内容

  • browser-wasm-build-tests.yml(Browser Mono用): extraHelixArguments: /maxcpucount:8 を追加
  • browser-wasm-coreclr-build-tests.yml(Browser CoreCLR用): extraHelixArguments: /maxcpucount:8 を追加
  • simple-wasm-build-tests.yml(Mono シングルスレッド用): extraHelixArguments: /maxcpucount:8 を追加

すべての変更は既存の Build ステージ内に留まり、新しいステージ追加や依存関係の変更はなし。MSBuild の BuildInParallel 機能が複数ノード(/maxcpucount)で実際に並列実行されるよう、パイプラインテンプレートレベルで制御します。

パフォーマンスへの影響

実行時間の短縮(予想): WBT ジョブ送信のシリアライゼーション排除により、全体の実行時間が単一ジョブの最長時間程度に短縮される見込みです。具体的な数値はAzure DevOps パイプライン実行による検証が必要とのこと。

  • 改善点: 複数の WBT ジョブコンボ(TestUsingWorkloads × WasmEnableWebcil × WasmFingerprintAssets × bundler-friendly)が並列実行可能に
  • 懸念点: maxcpucount:8 設定により追加のリソース消費が発生する可能性があります

関連Issue

#118938

その他

  • StopOnFirstFailure="false" は既に設定されているため、並列送信でも全失敗が集約されます
  • ジョブごとのタイムアウト設定に変更なし
  • この変更は #130773(WBT を専用ステージに移動する別アプローチ)の代替案として位置づけられています
  • ローカル検証は YAML パース構文とテンプレート構造に限定されており、完全な効果は Azure DevOps パイプライン実行で確認される予定

#130784 [browser][CoreCLR] Drop coreVfs resource support from loader

概要

CoreCLR/Browser ローダーから coreVfs リソースバケットのサポートを削除します。runtimeconfig が boot config に埋め込まれるようになったため、coreVfs は不要になりました。この変更は CoreCLR/Browser ローダーのみに限定され、Mono フレーバーと共有 SDK ビルドタスクは影響を受けません。

変更内容

  • loader/config.ts — mergeResources と normalizeResources から coreVfs を削除
  • loader/run.ts — coreVfs フェッチプロミスとその await を削除
  • loader/assets.ts — coreVfs プリフェッチキューイングを削除
  • types/public-api.ts — Assets インターフェースから coreVfs メンバーを削除
  • loader/dotnet.d.ts — coreVfs を含まない再生成型定義
  • BootJsonData.cs — 互換性のため coreVfs の処理を追加

パフォーマンスへの影響

影響なし

関連Issue

#121486

その他

Mono (src/mono/browser/runtime) および共有 Microsoft.NET.Sdk.WebAssembly.Pack.Tasks はまだ coreVfs を出力・消費するため、CoreCLR ローダーは coreVfs を含む boot config を単に無視します。これにより後方互換性が保たれます。


#130782 Use stable net/netframework folders for WebAssembly.Pack.Tasks

  • 作成者: @akoeplinger
  • 作成日時: 2026年07月15日 13:37:06(UTC)
  • マージ日時: 2026年07月16日 08:40:21(UTC)
  • ラベル: area-Build-mono

概要

Microsoft.NET.Sdk.WebAssembly.Pack.Tasks パッケージのレイアウトを安定化するため、タスク出力をTFMバージョン依存フォルダ(tools/net11.0、tools/net472など)から版非依存フォルダ(tools/net、tools/netframework)に移行します。これにより、.NET Core TFMバージョンの更新時に複数の場所での調整が不要になります。

変更内容

  • Microsoft.NET.Sdk.WebAssembly.Pack.Tasks.csproj: OutputPath/IntermediateOutputPathをオーバーライドして、タスク成果物をnet/およびnetframework/フォルダに出力
  • Microsoft.NET.Sdk.WebAssembly.Browser.targets: タスクアセンブリ解決をtools/netおよびtools/netframewoorkの安定パスに変更
  • WasmApp.InTree.props: 新しい安定タスクディレクトリパスを参照するように更新
  • trimmingTests.targets・project.csproj.template: トリミングテストプロジェクトテンプレートを安定タスクパスに指定

パフォーマンスへの影響

影響なし

関連Issue

#123155

その他

このPRは、ILLink.Tasksと同様のパターンで実装されています。今後のTFMバージョン更新時に、WebAssemblyビルドシステム全体での調整が不要になり、保守性が向上します。


#130777 Mark custom continuation resumptions as StackTraceHidden

概要

非同期メソッドのスタックトレースから内部的な継続再開ヘルパーフレームを隠すため、[StackTraceHidden]属性をマークするPRです。これにより、ユーザーが見るスタックトレースには不要な実装詳細が表示されなくなります。

例:

public static async Task Main()
{
    Task t = ThrowsSoon();
    try
    {
        await t;
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);  // ResumeTaskContinuationが表示されなくなる
    }
}

変更内容

  • RuntimeAsyncTaskContinuation.cs: RuntimeAsyncTaskContinuation.TaskContinuationResume.ResumeTaskContinuationメソッドに[StackTraceHidden]属性を追加
  • AsyncHelpers.ValueTaskSourceContinuation.cs: AsyncHelpers.ValueTaskSourceContinuation.ValueTaskSourceContinuationResume.ResumeValueTaskSourceContinuationメソッドに[StackTraceHidden]属性を追加
  • StackTraceTests.cs: 非同期シナリオ用の新規テストケースを追加し、ResumeTaskContinuationおよびResumeValueTaskSourceContinuationがException.ToString()の出力に含まれないことを検証

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

[StackTraceHidden]属性は公開API(例外スタックトレース表示)に影響する変更ですが、内部実装フレームを隠すだけなので破壊的変更ではありません。TaskとValueTask/IValueTaskSourceの両方の継続パスに対応しています。


#130775 Ignore all 5xx responses in Deflate remote server test

  • 作成者: @Copilot
  • 作成日時: 2026年07月15日 12:26:23(UTC)
  • マージ日時: 2026年07月16日 00:10:57(UTC)
  • ラベル: area-System.Net.Http

概要

httpbin.org/deflateエンドポイントへの依存テストが頻繁な5xx応答で失敗するのを防ぐため、テストのエラー許容ロジックを改善しました。従来は502/504/503の特定ステータスコードのみをスキップしていたものを、すべての5xx応答に対応させることで、外部サーバー由来の一時的なエラーに対する耐性を向上させます。

if ((int)response.StatusCode >= 500)
{
    // Ignore any 5xx server error, the test depends on an external server that is out of our control.
    _output.WriteLine(response.ToString());
    return;
}

変更内容

  • src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTest.RemoteServer.cs
    • GetAsync_SetAutomaticDecompression_ContentDecompressed_Deflateテストの5xx応答チェックを拡張
    • 特定のステータスコード(502/504/503)の個別判定から、汎用的なStatusCode >= 500チェックに変更
    • コメントを更新して、広範な5xxエラーをスキップする意図を明記

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このテストは外部サーバー(httpbin.org)に依存しており、その可用性や応答状況はテスト制御外です。本変更はテストの安定性向上を目的とした、検証ロジックの緩和であって、実装の変更ではありません。


#130769 Disable r2r test on Release

  • 作成者: @BrzVlad
  • 作成日時: 2026年07月15日 10:44:05(UTC)
  • マージ日時: 2026年07月16日 21:35:25(UTC)
  • ラベル: area-ReadyToRun

概要

ReadyToRun(R2R)コンパイラテストスイートのArmThumbBitHotColdRuntimeFunctionsテストをRelease構成で無効化するパッチです。このテストはJitStressProcedureSplitting=1オプションを使用していますが、このオプションはDebug/Checked構成でのみ有効なため、Release構成では失敗していました。

変更内容

  • ILCompiler.ReadyToRun.Tests.csproj: テスト設定の条件分岐変更(2行追加/削除)
  • R2RTestSuites.cs: ArmThumbBitHotColdRuntimeFunctionsテストの条件付き実行ロジック追加(2行追加/1行削除)
  • TestPaths.cs: テスト実行パスの条件判定ロジック修正(3行追加/1行削除)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正はJIT Stressオプションとビルド構成の互換性に関する制限事項です。Release構成ではJitStressProcedureSplittingオプションが無効なため、テスト実行を構成に応じて分岐させることで、不要な失敗を防止しています。


#130765 Enable browser CoreCLR interpreter tests disabled under #123011, re-disabling those with real platform limits

概要

Browser CoreCLR の初期化段階で blanket-disabled されていた 43 個の[ActiveIssue(#123011)]属性を削除し、実際にブラウザ CoreCLR インタープリタで動作するテストを再度有効化します。再度失敗するテストのみ、根本原因に基づく具体的なゲート条件(IsMultithreadingSupported、IsCoreClrInterpreter、SkipOnPlatform(TestPlatforms.Browser)など)で選別して再度無効化しています。

変更内容

  • 25 ファイル / 約 19 テストプロジェクト にわたり、[ActiveIssue(#123011)] 属性をすべて削除(無関連の ActiveIssue 属性は保持)
  • 再度無効化されたテスト に対して、より具体的なゲート条件と根本原因コメントを追加:
    • DI の ServiceProviderCompilationTest.CompilesInLimitedStackSpace: IsMultithreadingSupported で条件付け(シングルスレッド WASM で Thread.Start が PlatformNotSupportedException をスロー)
    • BackgroundWorkerTests.TestFinalization: IsMultithreadingSupported を追加(マルチスレッド要件)
    • Interop COM テスト 6 件: SkipOnPlatform(TestPlatforms.Browser) で永続的にスキップ(WebAssembly では COM/ComWrappers 非サポート)
    • PackedSimdTests: IsCoreCLR && IsBrowser で再度無効化(インタープリタで PackedSimd 未実装)
    • RuntimeFeatureTests.DynamicCode_Jit: IsCoreClrInterpreter で再度無効化(JIT ではなくインタープリタのため)
    • ModuleTests.Name/FullyQualifiedName: IsCoreCLR && IsBrowser で再度無効化(WASM バンドルからのロードで Module.Name が <Unknown>)
    • EnvironmentTests.GetFolderPath_Unix_NonEmptyFolderPaths: IsCoreCLR && IsBrowser で再度無効化(ブラウザでフォルダパス非対応)

パフォーマンスへの影響

影響なし

関連Issue

#123011

その他

  • 検証は Browser CoreCLR インタープリタ を実行する Helix ジョブ WasmTestOnChrome-CLR-ST で実施済み
  • 再度無効化されたテスト群は失敗したテストの完全なセットに対応
  • 再度有効化されたテスト(例:System.Runtime.Tests の GC テスト、System.Collections.Concurrent.Tests、System.Data.Common.Tests など)はすべて合格確認済み
  • PR 説明は GitHub Copilot により生成

#130757 Fix CRLF encoding in EightBitStream

  • 作成者: @rzikm
  • 作成日時: 2026年07月15日 08:05:52(UTC)
  • マージ日時: 2026年07月16日 09:30:21(UTC)
  • ラベル: area-System.Net

概要

System.Net.Mime.EightBitStreamクラスにおいて、CRLFライン終了文字の処理を改善しました。特に、\rと\nが異なるWrite呼び出しで分割された場合でも正しく処理され、SMTP dot-stuffingの動作が保持されるようになります。

変更内容

  • EightBitStream.cs: 前回のWrite呼び出しが\rで終了したかを追跡し、次のバイトが判明するまでその出力を遅延させるロジックを実装。分割されたCRLF(\r\n)シーケンスをCRLFとして認識し、行長をリセット。破棄時に遅延していた単独の\rを出力する処理を追加。
  • EightBitStreamTest.cs: 分割されたCRLF処理を検証するテストケースを新規追加(52行)。

パフォーマンスへの影響

影響なし。処理ロジックの改善であり、パフォーマンスは維持されます。

関連Issue

#130757

その他

本変更はSystem.Net.Mailが依存する内部実装の修正です。SMTP通信時にメール本文中のCRLFが正しく処理されることを保証します。破壊的変更はありません。


#130744 Derive from Stream in ReadOnlyMemoryStream and WritableMemoryStream

  • 作成者: @jozkee
  • 作成日時: 2026年07月15日 00:20:18(UTC)
  • マージ日時: 2026年07月16日 02:37:00(UTC)
  • ラベル: area-System.IO

概要

ReadOnlyMemoryStreamとWritableMemoryStreamをMemoryStreamからの継承からStream直接継承に変更し、MemoryStream固有の機能を削除します。また、WritableMemoryStreamにSetLength(long)を実装し、固定容量のバッキングバッファ内でのサイズ変更をサポートします。これにより、user-buffer mode のMemoryStreamとの仕様の統一を実現します。

変更内容

  • ReadOnlyMemoryStream.cs: Streamを継承する形で再実装し、書き込み操作が例外をスローするように確保
  • WritableMemoryStream.cs: Streamを継承する形で再実装し、内部長トラッキングを追加。SetLength(long)を実装して固定容量内での長さ調整(0埋めを含む)に対応
  • System.Runtime.cs (参照アセンブリ): 公開API契約を更新し、型がStreamから派生するように変更し、MemoryStream固有のメンバーを削除
  • Strings.resx: ストリーム位置範囲検証エラー用の新しいリソース文字列を追加
  • MemoryStream.cs: user-buffer mode の固定容量動作に関連する変更を追加
  • テストファイル群: 固定容量および新しいSetLength動作の検証テストを追加・更新

パフォーマンスへの影響

影響なし

関連Issue

#130330

その他

この変更は公開API契約の変更を含みます。ReadOnlyMemoryStreamとWritableMemoryStreamはMemoryStreamからStreamへの基底クラス変更により、MemoryStream固有のメンバーが削除されます。ただし、基本的なStream機能(Read、Write、Seek等)は変わらず、WritableMemoryStreamの新しいSetLength機能により、user-buffer mode のMemoryStreamとより一貫した動作が実現されます。


#130733 Bump actions/setup-node from 6 to 7

  • 作成者: @dependabot[bot]
  • 作成日時: 2026年07月14日 21:23:13(UTC)
  • マージ日時: 2026年07月16日 20:45:13(UTC)
  • ラベル: area-codeflow

概要

GitHub Actions ワークフロー内で使用している actions/setup-node を v6 から v7 にバンプします。v7.0.0 は ESM への移行、キャッシュ関連の出力追加、複数のバグ修正を含むメジャーアップデートです。

変更内容

  • .github/workflows/ci-eval.yml: actions/setup-node を v6 から v7 に更新
  • .github/workflows/markdownlint.yml: actions/setup-node を v6 から v7 に更新

actions/setup-node v7.0.0 の主な変更:

  • ESM への移行とプロジェクト依存関係のアップグレード
  • キャッシュ出力として cache-primary-key と cache-matched-key を追加
  • ダミーの NODE_AUTH_TOKEN エクスポート削除
  • mirrorToken が提供されていない場合の getManifest での使用を修正
  • @actions/cache を 5.1.0 にアップグレード

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

メジャーバージョンアップデートですが、dotnet/runtime のワークフロー内での使用に関しては互換性上の問題は報告されていません。Dependabot により自動作成されたPRです。


#130729 [cDAC] Encapsulate loader heap block traversal

概要

cDAC(コンパイラデバッグアクセスコンポーネント)のLoaderコントラクトにおいて、ローダーヒープブロックの走査APIをカプセル化しました。生のリンクリストポインタを追跡する複数のAPI(GetFirstLoaderHeapBlock/GetLoaderHeapBlockData)を、アドレスとサイズのみを返す単一のEnumerateLoaderHeapBlocksAPIに統合し、走査ロジックと循環検出を内部に隠蔽しました。これによりAPI消費側は走査ポインタを追跡することなくローダーヒープデータにアクセスできます。

変更内容

  • ILoader.cs: GetFirstLoaderHeapBlock/GetLoaderHeapBlockDataを削除し、EnumerateLoaderHeapBlocksメソッドとLoaderHeapBlock構造体(Address、Sizeプロパティを含む)を追加
  • Loader_1.cs: EnumerateLoaderHeapBlocksの実装により、リンクリスト走査と循環検出を内部で処理。走査順序、最初のブロック標識、8192ブロック制限、S_FALSE動作を保持
  • SOSDacImpl.cs: TraverseLoaderHeapCoreを新しい列挙APIに移行。HRESULT マッピングと制限を維持
  • LoaderHeapTests.cs、LoaderTests.cs: 新しい列挙APIを使用するようユニットテストを更新。循環ヒープカバレッジケースを追加
  • Loader.md: コントラクト仕様とアルゴリズムを新APIに対応するよう更新

パフォーマンスへの影響

影響なし。ローダーヒープブロック走査のロジックは内部に統合されたため、パフォーマンスは変わりません。

関連Issue

なし

その他

  • 全テスト実行結果:2701パス、16スキップ、LoaderHeapTests/LoaderTests対象実行で224パス
  • GitHub Copilotの支援により作成されたPR
  • 破壊的変更:既存のGetFirstLoaderHeapBlock/GetLoaderHeapBlockData APIは廃止され、EnumerateLoaderHeapBlocksに置き換える必要があります

#130725 [cDAC] Validate global reads against descriptor types

概要

cDAC(Contract Data Access Converter)のグローバル読み込み時に、要求された読み込み形式(数値/ポインタ/文字列)がグローバルのディスクリプタ型注釈と一致しているかをデバッグ時に検証する仕組みを追加しました。また、フィールド検証とグローバル検証で共有する型互換性チェックロジックを新しいヘルパークラスに統合しました。

変更内容

  • ContractDescriptorTarget.cs: グローバル読み込みパスにディスクリプタ型互換性の検証アサーションを追加。数値/ポインタ/文字列読み込みの型チェックを強化
  • TargetTypeHelpers.cs: 新規作成。プリミティブ型/ポインタ型/文字列型の互換性検証を行う共有ヘルパーメソッドを追加
  • TargetFieldExtensions.cs: 既存のフィールド型検証を新しい共有ヘルパーメソッドを使用するようにリファクタリング
  • GlobalTypeValidationTests.cs: DEBUG設定でのグローバル読み込み型不一致時の診断テストを追加
  • StressLog関連: StressLogMaxModulesをネイティブのnuint型に合わせるための型修正
  • TargetTests.cs: 既存テストデータを調整(数値解釈も提供される場合、文字列型宣言を回避)

パフォーマンスへの影響

影響なし(デバッグアサーション追加のため、Releaseビルドでは検証コードは除外される)

関連Issue

#126749

その他

  • 本変更はデバッグ設定でのみアサーション検証が有効になります
  • フィールド検証とグローバル検証の型互換性ロジックを統合することで、保守性と一貫性が向上しました
  • cDAC単体テストおよびグローバル型互換性テストで検証済み

#130722 Merging internal commits for release/9.0

概要

release/9.0ブランチの内部コミットをマージするリリース統合PRです。ネットワーク通信、XML処理、暗号化署名など複数のライブラリにおけるバグ修正、パフォーマンス改善、セキュリティ強化が含まれています。

変更内容

System.Net.Http

  • Http2Connection: ストリーム管理とウィンドウハンドリングの修正(+53行)
  • Http2StreamWindowManager: ウィンドウサイズ計算の調整(+1/-1行)
  • テスト追加: 170行の新規ファンクショナルテスト

System.Net.Mail

  • EightBitStream: 57行の大幅なロジック改善(+57/-13行)

System.Net.Security

  • NegotiateAuthentication: 認証処理の改善(+6行)
  • SslStream.IO: ストリーム処理の最適化(+8/-7行)
  • TlsFrameHelper: TLSフレーム処理の修正(+2行)
  • テスト追加: SslStream・NegotiateAuthentication関連テスト追加

System.Private.Xml

  • XmlTextReaderImpl/XmlTextReaderImplHelpers: XML解析ロジック最適化(合計+32/-14行)
  • XPathNodeInfoAtom: XPath処理の改善
  • パフォーマンステスト追加: 183行の属性読み取りベンチマークテスト

System.Security.Cryptography.Xml

  • SecurityTransforms: LocalAppContextSwitch機構の導入により、複数のXML署名・変換処理(Base64Transform、C14NTransform、XPathTransform等)に対する動作制御を可能に
  • CryptoHelpers: 8行の機能強化
  • SignedXml: 6行の改善

パフォーマンスへの影響

  • XML属性読み取り処理の最適化(ベンチマークテスト183行追加で検証)
  • EightBitStreamの効率化(ロジック改善53行)
  • 詳細なベンチマーク数値は提供されていません

関連Issue

なし

その他

  • System.Security.Cryptography.Xmlへのリソース文字列追加(エラーメッセージ3行)により、新しい検証ロジックの導入が示唆されています
  • LocalAppContextSwitchesの追加により、互換性を維持しながら新しい動作を段階的に有効化できる設計になっています

#130721 Speed up BigInteger conversions to floating-point types

概要

BigIntegerから浮動小数点型(double、float、Half、BFloat16)への変換パフォーマンスを改善するPRです。前回の修正(#130565)で正確性を確保した後の追従最適化で、結果は同一のまま速度のみを向上させます。2M値のオラクル検証により0件の不一致を確認済みです。

変更内容

  • BigInteger.cs:

    • 64ビット以下の大きさに対するulong高速パス追加(operator double、operator float、operator BFloat16)
    • ConvertToDoubleを改良し、ターゲット精度(double: 53ビット、float: 24ビット、Half: 11ビット、BFloat16: 8ビット)で直接丸める実装に変更
    • 下位リム走査を遅延実行化(リムド値が丸め位置にある場合のみ実行)
  • cast_from.cs:

    • 64ビット超の丸めテストケースをdouble、float、BFloat16に追加し、高速パス使用時も一般的なリム走査パスが継続カバーされることを保証

パフォーマンスへの影響

小さい値(≤64ビット):

  • double: 4.23ns → 1.57ns(0.37倍、約2.7倍高速化)
  • float: 4.40ns → 1.57ns(0.36倍、約2.7倍高速化)

大きい値(~1024ビット):

  • double: 7.15ns → 4.09ns(0.57倍)
  • float: 7.22ns → 4.08ns(0.57倍、doubleと同等になった)

一般的なケースである≤64ビット値は大幅に高速化。大規模値のfloat変換はdoubleと同等のパフォーマンスに改善。

関連Issue

#130565

その他

  • 動作変更なし:結果は変換前と同一です
  • Halfは2^31以上のすべてのビット配列が無限大にオーバーフローするため、高速パスは実装されていません
  • Round-to-odd方式は廃止され、単一の丸めが直接ターゲット幅で実行されるようになりました

#130720 Skip null elements in [ValidateEnumeratedItems] validation

概要

[ValidateEnumeratedItems]属性を持つプロパティにnull要素が含まれる場合、DataAnnotationValidateOptions<TOptions>がArgumentNullExceptionをスローしていた問題を修正しました。null要素をスキップするようにしながら、インデックスは進めることで、エラーパスの位置情報(例:Parent.Children[2])を正確に保つようにしています。同期と非同期の両方の検証パスに対応しています。

変更内容

  • DataAnnotationValidateOptions.cs:同期のValidateパスでnull要素をスキップするロジックを追加
  • DataAnnotationValidateOptions.Async.cs:非同期のValidateAsyncパスでnull要素をスキップするロジックを追加
  • OptionsBuilderTest.cs:null要素が有効な項目の中でスキップされることを検証するテストを追加(同期・非同期両方)。また、null要素の後の無効な項目が正確なインデックスで報告されることを確認するテスト

パフォーマンスへの影響

影響なし

関連Issue

#130682

その他

null要素をスキップする理由:

  • プロパティレベルでnull値をスキップする既存の動作(if (value is null) continue;)と一貫性がある
  • null要素には検証対象のメンバーやValidationResultがないため、エラーメッセージを生成できない
  • アイテムごとの[Required]セマンティクスがないため、null要素自体が無効になることはない

要素の非null制約を強制することは、このバグ修正とは別の検証ルールとして実装すべきものです。


#130704 Ensure GenAPI can resolve implementation-only assemblies when regenerating ref source

概要

GenAPI が参照ソース再生成時に、ランタイム実装専用アセンブリ(System.Private.CoreLib や System.Private.Uri など)を解決できるようにするMSBuildターゲットを追加します。これまで GenAPI はこれらのアセンブリにアクセスできず、列挙型が整数値として出力される、init アクセッサが set に変換される、System.Enum 制約が削除されるなどの問題が発生していました。

変更内容

  • eng/resolveContract.targets: AddImplementationAssembliesToGenAPIResolutionPath という新しい MSBuild ターゲットを追加
    • ResolveAssemblyReferences の後に実行(AfterTargets="ResolveAssemblyReferences")
    • GenAPILibPath に ReferencePath ディレクトリに加え、CoreLib と共有フレームワークディレクトリを追加
    • Mono 以外のビルドで、GenAPILibPath が明示的に設定されていない場合のみ動作
    • 平行ビルド(/m)でも決定性を保ち、クロスターゲット外側ビルドでは実行されない

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更により、System.Text.Json と Microsoft.Extensions.Hosting.Abstractions に対して検証済み。以下の問題が解決されます:

  • 列挙型が整数値として出力される問題(例:EditorBrowsableAttribute(1) ではなく適切な列挙値)
  • init アクセッサが set に変換される問題
  • DynamicallyAccessedMembers が整数値として出力される問題
  • "Unable to resolve assembly" 警告が 0 に削減

これまで参照ソースに蓄積していた手動修正の大部分を解消し、GenerateReferenceAssemblySource ツールの出力の信頼性を向上させます。


#130674 Skip single-connect test on Apple mobile CoreCLR

概要

Apple mobile CoreCLRにおいて、SingleConnect_ExposeHandle_SecondAttemptThrowsPNSEOnUnixテストをスキップします。このテストは非リッスンソケットへの接続がプラットフォームのTCPタイムアウトを待つため、XHarnessタイムアウトを超過するという問題を回避します。他のプラットフォームとランタイムではテストを継続実行し、PlatformDetection.IsAppleMobileとPlatformDetection.IsCoreCLRでスコープされたActiveIssue属性を使用します。

変更内容

  • src/libraries/System.Net.Sockets/tests/FunctionalTests/Connect.cs: Apple mobile CoreCLRに対してテスト条件を追加し、特定の環境でのテストスキップを実装。

パフォーマンスへの影響

テスト実行時間の短縮(Apple mobile CoreCLRでのテスト実行時のタイムアウト防止)

関連Issue

#124344

その他

  • このテストスキップはテスト専用の変更であり、ランタイム本体への影響なし
  • プラットフォーム固有の問題(Apple mobileでのTCPタイムアウト待機)に対する対処

#130675 Disable EventSource for Apple mobile NativeAOT test libraries

概要

Apple mobile NativeAOT環境でのEventSource登録によるスタック枯渇問題を修正するPRです。System.Net.PrimitivesとSystem.Runtime.Cachingのテストライブラリで、EventSourceサポートを条件付きで無効化しています。Desktop NativeAOTではEventSourceを有効化したままです。

変更内容

  • eng/testing/tests.ioslike.targets: EventSourceサポートの条件付き制御を追加(+2行)
  • src/mono/msbuild/apple/data/ProxyProjectForAOTOnHelix.proj: Apple mobile NativeAOT環境でのEventSourceサポート制御を調整(+5/-1行)

パフォーマンスへの影響

影響なし。スタック枯渇による起動時のクラッシュを防ぎ、Apple mobile NativeAOT環境での安定性を向上させます。

関連Issue

#91762(Apple mobile NativeAOT環境での既知制限)

その他

  • TestNativeAotプロパティがプロジェクト評価後に設定される場合のみEventSourceが無効化されます(Desktop NativeAOTでは前に設定されるため影響なし)
  • EventSourceメタデータアサーション(LoggingTest.EventSource_ExistsWithCorrectId)はNativeAOT+Apple mobile環境でのみスキップされます
  • EventPipe例外処理を通じた再帰的な登録がスタック枯渇の原因でした

#130652 [manual] Merge release/9.0-staging into release/9.0

概要

release/9.0-stagingからrelease/9.0へのサービシングマージです。JITテストの調整、COM相互運用テストの修正、iOSデバイステストの無効化、および依存関係・ツールバージョンの更新を含みます。マージコミットの使用が必須です。

変更内容

  • ARM SVE JITテスト: SveGatherVectorBases、SveGatherVectorFirstFaultingVectorBases、SveScatterVectorBasesテンプレートを修正。アドレスベースポインタの計算時にDebug.Assertで検証を追加し、アドレス入力を要素インデックスとして処理するよう調整。
  • COM相互運用テスト: CrossApartmentQueryInterface_NoDeadlockテストのリソースリーク修正。COM参照解放前にWaitOne()でテスト完了を待機。
  • iOSデバイステスト: ExportManagedSymbolsおよびAOTテストをCI環境で無効化。
  • 依存関係更新: runtime-assets、XHarness、Cecil、ICU transport、MsQuicのバージョン更新。
  • Tar形式ライブラリ: System.Formats.Tarの複数テストケースを削除(理由は提供情報に未記載)。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

なし


#130651 [manual] Merge release/8.0-staging into release/8.0

概要

release/8.0-stagingブランチからrelease/8.0ブランチへのサービシング統合マージです。バージョン情報の更新とTar形式ライブラリのバグ修正、およびテスト調整が含まれています。マージコミットが必須で、スクワッシュは禁止されています。

変更内容

  • バージョン情報: eng/Version.Details.xmlおよびeng/Versions.propsのバージョン番号を更新(各ファイル+2/-2)
  • System.Formats.Tar: TarEntry.csで35行追加・27行削除。ディレクトリ抽出関連のテストケース削除(4つのテストファイルで計28行削除)
  • iOS AOTテスト: iOS.Device.Aot.Test.csprojおよびiOS.Device.ExportManagedSymbols.Test.csprojに各2行追加(テスト設定の調整と思われる)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本マージはサービシング目的の統合であり、release/8.0ブランチの保守リリース対応です。TarEntry.csの実装変更と複数のテストケース削除が含まれていますが、具体的な修正内容の詳細は提供情報に含まれていません。


#130564 [R2R] Align composite ManifestMetadata and ComponentAssemblies sections to 4 bytes

  • 作成者: @simonrozsival
  • 作成日時: 2026年07月11日 21:55:21(UTC)
  • マージ日時: 2026年07月16日 08:45:10(UTC)
  • ラベル: area-ReadyToRun

概要

composite Ready-to-Run(R2R)イメージのマニフェストメタデータセクションとコンポーネントアセンブリセクションを4バイト境界にアライメントする変更です。ARM32では複数のDWORD フィールドの非アライメント読み込みがSIGBUS (BUS_ADRALN)エラーを引き起こします。この修正により、CoreCLRランタイムのPEDecoder::CheckCorHeaderでのメタデータ解析時の失敗を防ぎます(#129017の後続対応)。

変更内容

  • ManifestMetadataTableNode.cs: マニフェストメタデータテーブルのアライメント設定を1から4に変更。メタデータストリームヘッダのDWORDフィールド読み込みを安全にするため。
  • AssemblyTableNode.cs: コンポーネントアセンブリテーブル(READYTORUN_COMPONENT_ASSEMBLIES_ENTRY)の4バイトアライメント要件を追加。
  • R2RResultChecker.cs: コンポジットマニフェストセクションのアライメント検証ヘルパーを追加(メタデータ・コンポーネントアセンブリセクションのRVAが4バイトアライメントであることを確認)。
  • R2RTestSuites.cs: 新しいアライメント制約を検証する回帰テストを追加(Windows上でのみ--pdbパディングトリガー検証を含む)。

パフォーマンスへの影響

影響なし。各セクションはシングルトンであるため、パディングは最大3バイト程度追加されるのみで、実質的なサイズ影響はありません。

関連Issue

#129017(sibling fix)、dotnet/android#12026(android-arm MAUI R2R crash)

その他

  • 互換性への影響: 内部実装(R2Rコンパイラ)の変更であり、生成されるイメージは従前のバージョンと互換性があります。
  • 技術的背景: メタデータルート解析時にSTORAGESTREAMヘッダのiOffset/iSize (2つの連続したDWORD)を単一のLDRD命令に統合するため、ARM32では4バイトアライメントが必須。x64/arm64は非アライメント読み込みに耐性があるため、android-arm composite R2Rで初めて露見しました。
  • アライメント値選択の理由: メタデータルートとコンポーネントアセンブリエントリはすべてDWORDフィールドであり、自然なアライメントは4。ECMA-335はメタデータバージョン文字列をパディングしており、ストリームヘッダは4バイトアライメント済み。

#130483 Fix config binding generator CS0103 for required/init property with matching ctor param

概要

Configuration Binding ソースジェネレータで、required/init プロパティがコンストラクタパラメータにバインドされる際、パラメータ名とプロパティ名のケースが異なる場合に CS0103 コンパイルエラーが発生していた問題を修正します。

生成されるコードの修正例:

// 修正前(エラー)
return new GreetSettings(name)
{
    Name = Name, // CS0103: 'Name' という名前のローカル変数がない
};

// 修正後
return new GreetSettings(name)
{
    Name = name, // コンストラクタパラメータ名を使用
};

変更内容

  • CoreBindingHelpers.cs: コンストラクタパラメータとプロパティを再割り当てする際に、プロパティ名ではなくパラメータ名を値式として使用するよう修正
  • ConfigurationBinderTests.TestClasses.cs: パラメータ名とプロパティ名のケースが異なるテストクラスを追加
  • ConfigurationBinderTests.cs: 新しいテストケース(18行追加)
  • GeneratorTests.cs: ソースジェネレータのテストを拡充(58行追加)
  • GeneratorTests.Helpers.cs: テスト用ヘルパー調整

パフォーマンスへの影響

影響なし

関連Issue

#128390

その他

  • 本修正は GitHub Copilot の支援を受けて作成されました
  • 影響範囲:Microsoft.Extensions.Configuration.Binder ライブラリの内部実装(ソースジェネレータ)
  • required/init プロパティとマッチングコンストラクタパラメータを持つ設定クラスの利用者に対する重要な修正です

#130417 JIT: preserve null check for unused GT_BLK arg when inlining

  • 作成者: @Copilot
  • 作成日時: 2026年07月09日 16:30:49(UTC)
  • マージ日時: 2026年07月16日 00:57:57(UTC)
  • ラベル: area-CodeGen-coreclr

概要

インライン化時に、構造体を値で受け取るが使用しないメソッドのGT_BLK引数からNullReferenceExceptionが誤って除去される問題を修正。GT_BLKの逆参照がフォルト可能な場合、死のコード式ではなくGT_NULLCHECKを発行して、null参照チェックセマンティクスを保持します。

Problem(null); // 修正前:例外なく成功、修正後:NRE発生
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.AggressiveOptimization)]
static unsafe void Problem(S* pA) { Use(*pA); }
static void Use(S s) { } // インライン化、sは未使用
struct S { }

変更内容

  • fginline.cpp: fgInsertInlineeArgumentで、未使用のGT_BLK引数がIndirMayFault()を満たす場合、アドレス表現をGT_NULLCHECKでラップします。これにより、GT_BLKをGT_COMMA配下に配置する(codgenが処理不可)ことなく、null逆参照セマンティクスを保持。
  • Runtime_72808.cs: Problem(null)呼び出しがNullReferenceExceptionをスローすることを検証するJIT回帰テストを新規追加。
  • Regression_o_3.csproj: テストプロジェクトファイルの登録。

パフォーマンスへの影響

影響なし。null チェックは必須のセマンティクス検証であり、除去対象の最適化ではありません。

関連Issue

#72808

その他

  • 互換性: バグ修正により、不正に例外が除去されていたコードが正常にNullReferenceExceptionをスローするようになります。適切なnull チェックを欠いていたコードには破壊的変更となる可能性があります。
  • 技術的詳細: AggressiveOptimization下でインライン化される際に、コンパイラが安全性判定を誤った場合の修正です。

#130403 Preserve HybridCacheEntryOptions.ToDistributedCacheEntryOptions from trimming

概要

.NET 11でフレームワークに含まれるようになったMicrosoft.Extensions.Caching.AbstractionsがILLink-trimされる際に、HybridCacheEntryOptions.ToDistributedCacheEntryOptions()メソッドが誤ってトリム対象になっていた問題を修正します。このメソッドはinternalで、外部アセンブリのMicrosoft.Extensions.Caching.Hybridが[UnsafeAccessor]を通じてアクセスしていますが、トリマーがクロスアセンブリ参照を追跡できないため削除されていました。

変更内容

  • ILLink.Descriptors.xml: ToDistributedCacheEntryOptions()メソッドの保持を明示的に指定する記述子を追加
  • HybridCacheEntryOptionsAccessorTest.cs: UnsafeAccessor経由でのメソッドアクセスをミラーするトリミングテストを追加。メソッド解決時に戻り値100を返す
  • TrimmingTests.proj: トリミングテストプロジェクト設定を追加

パフォーマンスへの影響

影響なし

関連Issue

#130376

その他

本修正は検証済みで、完全なTrimMode=fullパブリッシュで以下を確認:

  • 記述子有り時:アプリは正常終了(Exit code: 100)、トリム後のアセンブリにメソッドが存在
  • 記述子なし時:テストが失敗(Exit code: -532462766 = MissingMethodException)、修正の有効性が確認される

#130380 Enable wasm-tools workload for CoreCLR WASM targets

概要

CoreCLR の browser-wasm ターゲットで既存の wasm-tools workload を使用できるようにするための変更です。Mono ユーザーがすでにインストールしている同じ workload を通じて、ネイティブ再リンク機能を提供します。CoreCLR ランタイムは SDK の KnownRuntimePack 経由で解決されるため、Mono とは異なり CoreCLR 用の独立した workload 定義は不要です。

変更内容

  • SDK ターゲット: RuntimeFlavor=CoreCLR 時に BrowserWasmApp.CoreCLR.targets をインポート(Sdk.targets.in)
  • CoreCLR ビルド targets: Workload パス用の native targets インポートガード追加、静的アセット順序修正(_ComputeWasmBuildCandidates を native relink 前に実行)、nested publish 時のサテライトアセンブリ処理改善(BrowserWasmApp.CoreCLR.targets)
  • Workload マニフェスト: CoreCLR パスで WasmNativeWorkload=true を設定し、Mono 固有のインポートを UseMonoRuntime != false でゲート(WorkloadManifest.targets.in、WorkloadManifest.json.in)
  • SDK パッケージ: BrowserWasmApp.CoreCLR.targets を WebAssembly SDK パッケージに含める(Microsoft.NET.Runtime.WebAssembly.Sdk.pkgproj)
  • テスト修正: CoreCLR pinvoke テーブルのファイル名期待値を callhelpers-pinvoke.cpp に修正(PInvokeTableGeneratorTests.cs)
  • CI パイプライン: browser-wasm ビルド テスト用のパイプライン定義を追加

パフォーマンスへの影響

影響なし

関連Issue

#126100、#130379、#130051、#127073、#128296、#128762

その他

  • この PR は GitHub Copilot の支援により生成されました
  • UseMonoRuntime フラグで Mono と CoreCLR の動作を切り替える設計のため、既存の Mono ユーザーへの影響はありません
  • パブリック API の変更はなく、内部的なビルド ターゲット構成の最適化です

#130370 Consolidate crossgen2-composite and r2r into crossgen2-outerloop pipeline

概要

CoreCLR のクロスジェネレーション2(crossgen2)および ReadyToRun(R2R)テストカバレッジを統合し、パイプラインの冗長性を排除する変更です。crossgen2-composite および r2r パイプラインの機能を crossgen2-outerloop パイプラインに統合し、日次スケジュール実行から手動実行のみに変更します。

変更内容

  • crossgen2-outerloop.yml: linux_arm および windows_x86 の R2R_Composite ジョブ設定、および新しい R2R_Composite_LargeVersionBubble ジョブ(linux_x64、windows_x64)を追加
  • crossgen2-composite.yml: パイプラインのスケジュール設定を削除し、手動実行のみに変更(計8行削除)
  • r2r.yml: ファイル全体を削除(計80行削除)。この冗長なパイプラインは outerloop の非composite R2R ジョブで完全にカバーされている

パフォーマンスへの影響

影響なし。この変更はテストカバレッジの統合であり、実行時パフォーマンスに影響しません。

関連Issue

なし

その他

  • YAML ファイルの削除後、Azure DevOps(ADO)のパイプライン定義が失敗しないよう、runtime-coreclr r2r パイプライン定義は無効化または削除する必要があります
  • crossgen2-composite パイプライン定義も同様に無効化の検討が必要です
  • 変更により、Pri1 優先度で crossgen2-outerloop を通じて日次テストカバレッジが維持されます

#130349 Improve breaking-change-doc version detection and issue link

  • 作成者: @svick
  • 作成日時: 2026年07月08日 11:59:24(UTC)
  • マージ日時: 2026年07月16日 15:27:11(UTC)
  • ラベル: area-skills

概要

breaking-change-doc スキルのヘルパースクリプトを改善し、.NET リリースマイルストーンの正確な検出と GitHub Issue 作成リンク生成の信頼性向上を実現します。従来の不安定なタグ距離ヒューリスティックをリリースブランチベースの検出に置き換え、HTTP 414 エラーを回避するハイブリッドプリフィル戦略を導入します。

変更内容

  • Get-VersionInfo.ps1: リリースブランチ(release/<major>.<minor>-preview<N>など)の存在検出とコミット包含関係に基づくバージョン検出に変更。プレビュー7→RC1、RC2→GA への段階的ロールオーバー(7プレビュー、2RC、GA)に対応。古いメジャーバージョンについてはタグスキャンで正確な最初のプレビュー/RC を復元。バックポートを交差参照グラフから検出し、確認されていない場合は FallbackVersion 付きで暫定マイルストーンを報告。

  • Build-IssueComment.ps1: URL 長が保守的な約8000バイト予算を超える場合、Issue本文を除外し、タイトル/ラベル/アサイニーをプリフィル。本文は PR コメント内のコピペ用コードブロックに埋め込み(GitHub の 414 エラー回避)。ハードコーディングされた Pri1/doc-idea をdotnet/docs の Issue テンプレートからのソース取得に変更。mailto: リンクをプレーンテキスト通知に置き換え。

  • SKILL.md: 新しいバージョン検出と Issue リンク生成の動作に合わせて更新。重複・陳旧なコンテンツを削除。

パフォーマンスへの影響

影響なし

関連Issue

#130184

その他

  • 本 PR はスキルドキュメント生成と PowerShell スクリプト(内部ツール)の改善であり、ランタイム/コンパイラ/公開 API には影響しません。
  • セキュリティスキャンの 400 エラー(Authorization ヘッダー形式異常)は PAT プール設定の問題であり、このスキル自体の問題ではないため対象外。

#129717 [WASM] Use relocs for tableBase / imageBase / stackPointer globals

概要

WebAssembly (WASM) NativeAOT向けに、tableBase/imageBase/stackPointerグローバル変数をハードコードされたインデックスから再配置可能(relocatable)な参照に変更します。新しいJIT-EE API getWasmBaseGlobals を追加し、JITが最大LEB size で再配置を発行し、crossgen2 ObjectWriter が実際のグローバルインデックスに修正します。コードサイズは増加しますが、動作に変更はありません。

変更内容

  • JIT-EE インターフェース追加: corinfo.h に CORINFO_WASM_BASE_GLOBALS 構造体と getWasmBaseGlobals メソッド追加。JIT-EE バージョンGUID更新。
  • JIT側実装: emitwasm.cpp に emitIns_BaseGlobalGet 実装、codegenwasm.cpp でスタックポインタ参照を新パスに切り替え。WASM フォーマット WASM_GLOBAL_INDEX_LEB 再配置形式を追加。
  • コンパイラ側実装: WasmWellKnownGlobalSymbolNode 新規追加、WasmObjectWriter が再配置を自動解決。
  • SuperPMI対応: 新API呼び出しの記録・リプレイ・カウント機能を追加。
  • ReadyToRun テスト: WASM WebCIL テストケースで、発行されたグローバル参照のバイトパターン検証を追加。

パフォーマンスへの影響

コードサイズ増加(LEB size 最大値での再配置発行のため)。実行速度・スループットへの影響なし。

関連Issue

#129712

その他

この実装はJIT インターフェースメソッドとして実現されていますが、ReadyToRun ヘルパーでの実装も検討の余地あり。NativeAOT ObjectWriter は WASM 再配置を emitted object に留め、wasm-ld がリンク時に NativeAOT WASM ランタイムに対して修正します。


#129615 Allow the GcInfoDumper to report scratch registers at safe points (DECODE_NO_VALIDATION)

  • 作成者: @hoyosjs
  • 作成日時: 2026年06月19日 11:16:42(UTC)
  • マージ日時: 2026年07月16日 07:50:06(UTC)
  • ラベル: area-GC-coreclr

概要

GcInfoDumperがセーフポイントで有効なスクラッチレジスタを報告する際に発生していたアサーション失敗を修正します。DECODE_NO_VALIDATIONモードでのダンプ時に、スクラッチレジスタ報告のバリデーションルールを緩和し、デバッグビルドのアサーション失敗を防ぎます。

変更内容

  • gcinfodecoder.cpp: TGcInfoDecoder<...>::ReportRegisterToGCのアサーション条件を修正
    • スクラッチレジスタが報告される際のフラグチェック(_ASSERTE(flags & ActiveStackFrame))を緩和
    • DECODE_NO_VALIDATIONモードでは、ActiveStackFrameフラグがなくてもスクラッチレジスタ報告を許可
    • AMD64、ARM、ARM64、LoongArch64、RISC-V 64の各プラットフォーム実装に同様の調整を適用

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この修正は内部実装(ランタイムのGC情報デコーダー)に限定されており、公開APIへの影響はありません。破壊的変更ではなく、デバッグ時のアサーション失敗を解決する変更です。GcInfoDumperは診断・デバッグ用途のツール(SOSなど)で使用される内部機能です。


#129048 Add HybridCache.GetOrCreateAsync overloads for dynamic setting of options

概要

HybridCache.GetOrCreateAsyncに動的なオプション設定をサポートする新しいオーバーロードを追加します。ファクトリコールバックがHybridCacheEntryContextを受け取り、実行時にキャッシュエントリのオプション(有効期限、フラグ、ローカルサイズなど)を調整できるようになります。これにより、エントリごとに異なるキャッシュ戦略を適用することが可能になります。

変更内容

  • HybridCacheEntryOptions: LocalSizeプロパティ(init)を追加し、ローカルキャッシュエントリのサイズ制御をサポート
  • HybridCacheEntryContext: 新しいsealed型として導入。ファクトリコールバックに渡され、可変なExpiration、LocalCacheExpiration、Flags、LocalSizeプロパティを持つ。Revisionプロパティでプロパティ変更を追跡可能
  • HybridCache: コンテキスト対応の新しい仮想GetOrCreateAsyncオーバーロードを追加(string、ReadOnlySpan<char>、DefaultInterpolatedStringHandlerキー形式に対応、TStateあり・なしの両方)
  • デフォルト実装: 既存のHybridCache実装との後方互換性を保ちながら、ファクトリから提供されたオプションをSetAsyncで反映
  • テスト: 新規のGetOrCreateAsync実装をテストするコントラクトテストを追加
  • Trimming対応: ILLink.Descriptorsに内部メンバー参照を追加
  • 互換性: CompatibilitySuppressions.xmlにinit→set変更用の抑制を追加

パフォーマンスへの影響

影響なし

関連Issue

#121530、#114366

その他

重要: HybridCacheEntryContextのパブリックコンストラクタはAPI レビュー承認待ち状態です。現在承認されているAPIではinternalコンストラクタが規定されていますが、このPRではサードパーティ実装のサポートを考慮してpublicになっており、API レビューで変更される可能性があります。 companion PR: https://github.com/dotnet/extensions/pull/7568


#128604 JIT, AOT preinit, and CoreLib: Saturate float/double conversions to small integral types

  • 作成者: @Copilot
  • 作成日時: 2026年05月26日 20:10:07(UTC)
  • マージ日時: 2026年07月16日 23:38:42(UTC)
  • ラベル: area-CodeGen-coreclr

概要

.NET 9で導入された浮動小数点型(float/double)から小整数型(sbyte、byte、short、ushort、char)への飽和変換の契約を、未チェック(unchecked)キャストで正しく実装します。従来はR → int → smallTの展開で、外側のint → smallTがビット切り詰めのみを行い、飽和されていませんでした。例えば(short)(double)32768.000000000007が-32768を返していたのを、32767に正しく飽和させます。

JIT(xarch、x86、arm64、RISC-V64、LoongArch64、ARM32、WASM)、CoreCLRインタープリタVM、NativeAOT型プレイニシャライザの3箇所で一貫性を確保します。

変更内容

  • JIT cast展開(morph.cpp): R → smallT変換の前に浮動小数点領域のmin/maxクランプを挿入。WASM向けはGT_INTRINSICで変換、ARM32/RISC-V64/LoongArch64は整数領域飽和NI_PRIMITIVE_SaturateTo{Int8,Int16,UInt8,UInt16}を使用
  • 新規JIT組み込み関数: 4つのSaturateTo*組み込みのコスト計算(gentree.cpp)、ターゲット認識(importercalls.cpp)、値番号付け(valuenum.cpp)、範囲分析(assertionprop.cpp)を実装
  • ARM32コード生成: Thumb-2のINS_ssat/INS_usat命令を追加
  • RISC-V64/LoongArch64コード生成: 分岐ベースのクランプで飽和を実装
  • インタープリタ修正(interpexec.cpp): ConvFpHelperが中間型ではなく結果型の範囲で飽和するよう修正
  • NativeAOT型プレイニシャライザ(TypePreinit.cs): 浮動小数点conv_*1/*2を明示的にMath.Clampで飽和化(NaN → 0)
  • CoreLib簡素化(Double.cs、Single.cs等): float/double→小整数型のTryConvert*パスを直接キャストに統一(CoreCLR;MONO向けは従来の手動クランプを保持)
  • テスト: 回帰テスト追加、既存テスト一部有効化、Monoバックエンド対応待機中は[SkipOnMono]マーク

パフォーマンスへの影響

JITの変換パスにmin/maxクランプを追加するため、浮動小数点→小整数型変換のコード生成が増加します。ただしこれは正確性要件の実装であり、パフォーマンス測定値は記載されていません。ネイティブ飽和命令(ARM32のssat/usat等)は単一命令でのサポートのため、複数命令でのクランプと比較して悪化の可能性は限定的です。

関連Issue

#116823、#124344

その他

  • Monoの非対応: Monoランタイムバックエンドはまだ対応されておらず、別途追跡されています。回帰テ

目次