Pull Request on 2026年05月22日

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

注意点

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



#128493 [Android] Remove unnecessary X509Chain memory leak test

概要

Android固有の長時間実行X509Chain単体テストを削除するフォローアップPRです。#128284で追加された不要なAndroid専用ストレステスト BuildChainRepeatedly_DoesNotExhaustGlobalReferences をテストスイートから削除します。

変更内容

  • src/libraries/System.Security.Cryptography/tests/X509Certificates/ChainTests.cs
    • Android専用ストレステスト BuildChainRepeatedly_DoesNotExhaustGlobalReferences とそのヘルパーローカル関数を削除(77行削除)

パフォーマンスへの影響

テスト実行時間の短縮(約10分間のストレステストを削除)

関連Issue

#128284、#128385

その他

削除されたテストはAndroid固有のJNIグローバル参照リーク回帰シナリオの唯一の明示的なテストカバレッジでした。Copilotの指摘によると、削除後に使用されていないusing System.Security.Cryptography.X509Certificates.Tests.Common;ディレクティブがビルドエラーの原因になる可能性があります(CS8019警告)。


#128486 Remove redundant #if/#else blocks with identical branches

  • 作成者: @Copilot
  • 作成日時: 2026年05月22日 14:17:13(UTC)
  • マージ日時: 2026年05月22日 22:20:29(UTC)
  • ラベル: area-Meta

概要

#128464で特定されたパターンに従い、同一の分岐内容を持つ冗長な#if/#elseプリプロセッサブロックを削除するコードクリーンアップです。複数のC++ヘッダーファイルとC#ソースファイル全体で、条件分岐の両側が同じコードを持つ#if/#else/#endif構造を除去しています。

変更内容

  • coreclr/debug系: rcthread.cpp、dbgipcevents.h内の冗長な#if/#elseブロックを削除
  • coreclr/gc系: gc.cpp内の冗長な条件付きコンパイルブロックを削除
  • coreclr/jit系: lsra.cpp、lsrabuild.cpp内の冗長な#if/#elseブロックを削除
  • coreclr/vm系: codeman.h、riscv64/asmconstants.hの冗長なブロックを削除
  • System.Private.CoreLib: CollectionHelpers.cs、ResourceReader.cs、RuntimeResourceSet.csの冗長なブロックを削除
  • mono系: handle.c、mini-x86.hの冗長なブロックを削除
  • テスト: ByteMark.csの冗長なブロックを削除

全体で46行の削除(追加なし)

パフォーマンスへの影響

影響なし(コード生成に関係ない、コードクリーンアップのみ)

関連Issue

なし

その他

このPRは自動生成(Copilot)によるコードクリーンアップで、以前のPR #128464で特定されたパターンの追加検出です。


#128485 JIT: Propagate class handle when split tree

概要

JIT コンパイラのgtSplitTree関数を改善し、ツリー分割時に生成される一時ローカル変数により正確なクラスハンドルメタデータを伝播させることで、後続のdevirtualization最適化がより正確な型情報を利用できるようにします。結果として、不要な仮想呼び出しが排除され、生成コードサイズが削減されます。

変更内容

src/coreclr/jit/gentree.cpp

  • gtNewTempStoreが生成する一時ローカル変数をlvSingleDef(単一定義)とマークします
  • 値が参照型(TYP_REF)の場合、lvaSetClassを使用して一時変数にクラスハンドルを伝播させます
  • 分割ロジックをリファクタリングし、名前付きvalue一時変数を使用して可読性を向上させます

パフォーマンスへの影響

  • コードサイズ削減: サンプルコードでは45バイトから21バイトに削減(約53%削減)、仮想呼び出しがConsole.WriteLine直接呼び出しに最適化されました
  • devirtualization最適化の向上: クラスハンドル情報の伝播により、後続の最適化パスがより正確な型情報に基づいて仮想呼び出しの削除判断が可能になります

関連Issue

#128483

その他

Copilot レビュアーによる懸念事項として、以下の点が指摘されています:

  • isNonNullが計算されるが使用されていない可能性
  • lvSingleDefの直接変更が後続フェーズとの一貫性を保つために、より一元化されたメカニズム経由で行うべき可能性

#128475 Disable ExpressionsUnwrapeExternallyThrownRuntimeWrappedException on Wasm CoreCLR

概要

Wasm CoreCLR環境で失敗するExpressionsUnwrapeExternallyThrownRuntimeWrappedExceptionテストをスキップするため、[ActiveIssue]属性を追加しました。PlatformDetection.IsBrowserとPlatformDetection.IsCoreCLRの条件ゲートを使用して、ブラウザ環境のCoreCLR実行時のみテストを無効化します。

[Theory, ClassData(typeof(CompilationTypes))]
[ActiveIssue("https://github.com/mono/mono/issues/14925", TestRuntimes.Mono)]
[ActiveIssue("https://github.com/dotnet/runtime/issues/128164", typeof(PlatformDetection), nameof(PlatformDetection.IsBrowser), nameof(PlatformDetection.IsCoreCLR))]
public void ExpressionsUnwrapeExternallyThrownRuntimeWrappedException(bool useInterpreter)

変更内容

  • src/libraries/System.Linq.Expressions/tests/ExceptionHandling/ExceptionHandlingExpressions.cs: Wasm CoreCLR環境向けの新しい[ActiveIssue]属性を追加(#128164を参照)。既存のMono向け[ActiveIssue]属性は保持。

パフォーマンスへの影響

影響なし

関連Issue

#128164、#128475

その他

既存のMono用[ActiveIssue]属性は変更されず、Wasm CoreCLR環境向けの除外ルールはリポジトリ内の他の慣例に合致しています。


#128472 [Wasm RyuJIT] Implement contained bitcast operands

概要

WebAssemblyのRyuJITコード生成で、GT_BITCASTノードの被演算子がcontained状態の場合の処理を実装しました。これにより、スタックローカル変数のbitcastを独立した演算子ノードなしで直接生成できるようになります。

変更内容

  • src/coreclr/jit/codegenwasm.cpp: CodeGen::genCodeForBitCast内のNYI_WASM("Contained bitcast operands")フォールバックを削除し、contained状態のGT_LCL_VAR演算子に対するコード生成ロジックを実装しました。

パフォーマンスへの影響

影響なし(既存の未実装パスを機能実装したもので、性能特性の変化は報告されていません)

関連Issue

#128382

その他

  • このPRはWasm(WebAssembly)ターゲット向けのRyuJITコンパイラの内部実装です。
  • contained operands最適化により、不要な中間ノード生成を削減し、コード生成の効率化につながります。

#128464 Remove redundant #if NET in CollectionHelpers.ValidateCopyToArguments

概要

CollectionHelpers.ValidateCopyToArgumentsメソッドの冗長な条件付きコンパイル指令を削除しました。両方の分岐で同じArgumentNullException.ThrowIfNull(array);呼び出しが存在していたため、#if NET / #else / #endifディレクティブを削除して処理を統一しました。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Collections/ObjectModel/CollectionHelpers.cs
    • 冗長な#if NET条件付きコンパイル指令4行を削除
    • 単一のArgumentNullException.ThrowIfNull(array);呼び出しに統一

パフォーマンスへの影響

影響なし(コード動作に変更なし)

関連Issue

なし

その他

内部実装(CoreLib)の簡潔化を目的とした変更です。動作に影響なく、コード保守性が向上します。


#128462 NativeAOT: allow full-width 0x/0X-prefixed 64-bit hex env config values

  • 作成者: @Copilot
  • 作成日時: 2026年05月21日 22:27:45(UTC)
  • マージ日時: 2026年05月22日 06:58:12(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

PR #127644で0x/0Xプレフィックスのサポートが追加されましたが、CONFIG_VAL_MAXLENが16のままだったため、0xFFFFFFFFFFFFFFFFのような18文字のフル幅64ビット16進値が拒否されていました。このPRは定数を18に増やし、プレフィックス+16桁の16進数値を受け入れるよう修正します。

// RhConfig.h
#define CONFIG_VAL_MAXLEN 18  // "0x" prefix + 64-bit uint in hex

変更内容

  • src/coreclr/nativeaot/Runtime/RhConfig.h: CONFIG_VAL_MAXLENを16から18に増加
  • src/coreclr/nativeaot/Runtime/RhConfig.cpp: ローカルバッファのコメントを「16進数字数」から「テキスト形式の最大整数値」の説明に更新

パフォーマンスへの影響

影響なし。バッファサイズの拡大は固定サイズで、環境変数パースのみに関連します。

関連Issue

#127644(親PR)

その他

  • 修正により、0xFFFFFFFFFFFFFFFFおよび0XFFFFFFFFFFFFFFFFが受け入れられます
  • プレフィックス+16桁を超える値は既存のバッファ長チェック(cchResult >= cchBuffer)で引き続き拒否されます
  • Copilotレビュアーが、0xFFFFFFFFFFFFFFFFのようなフル幅プレフィックス値をカバーする専用テストの追加を提案しています

#128461 Add DependencyKind.DisablePrivateReflectionRequirement to methodreasons and typereasons to fix tests.

概要

ILLinkのMarkStepにおいて、Debug builds/testsで DependencyKind.DisablePrivateReflectionRequirement がアサーション失敗の原因となっていた問題を修正します。このDependencyKindを型およびメソッドマーキングの許可リスト(_typeReasons、_methodReasons)に追加し、linkerが DisablePrivateReflectionAttribute をroot化する際にDEBUG検証をスキップさせないようにします。

変更内容

  • src/tools/illink/src/linker/Linker.Steps/MarkStep.cs: _typeReasons および _methodReasons allowlistに DependencyKind.DisablePrivateReflectionRequirement を追加(内部実装の変更、公開APIへの影響なし)
  • src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/RequiresUnsafeAnalyzerTests.cs: テスト関連の修正

パフォーマンスへの影響

影響なし

関連Issue

#128349のテスト失敗に対応するもの

その他

この変更はDebug onlyの検証ロジック(アサーション)に関するもので、Releaseビルドには影響しません。ILLink unit testsの実行時のアサーション失敗を解決するための修正です。


#128457 [cDAC] Implement IsValidObject for cDAC

  • 作成者: @barosiak
  • 作成日時: 2026年05月21日 18:23:20(UTC)
  • マージ日時: 2026年05月22日 23:34:25(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Diagnostic Access Component)の RuntimeTypeSystem コントラクトを拡張し、DacDbiImpl.IsValidObject メソッドを実装しました。新しいグローバルポインタ ContinuationSingletonEEClass を追加し、MethodTable/EEClass クエリ用の新しいAPI(GetClassPointer、IsCanonicalMethodTable、IsContinuationWithoutMetadata)を IRuntimeTypeSystem コントラクトに追加しています。これにより、デバッガがランタイムオブジェクトの有効性を適切に検証できるようになります。

変更内容

  • CoreCLR ネイティブ側 (datadescriptor.inc): g_singletonContinuationEEClass を新しい cDAC グローバルポインタとして公開
  • IRuntimeTypeSystem インターフェース (IRuntimeTypeSystem.cs): 3つの新しいAPI(GetClassPointer、IsCanonicalMethodTable、IsContinuationWithoutMetadata)を追加
  • RuntimeTypeSystem_1 実装 (RuntimeTypeSystem_1.cs): 新しいグローバルの読み込みと上記3つのAPI実装を追加
  • DacDbiImpl.IsValidObject (DacDbiImpl.cs): レガシー実装を置き換え、cDAC コントラクトを使用した新しい実装に更新
  • テスト強化 (MethodTableTests.cs, MockDescriptors.RuntimeTypeSystem.cs): 新しいAPI用のパラメータ化テストと mock グローバルストレージを追加
  • ドキュメント更新 (RuntimeTypeSystem.md): 新しいAPI仕様を追加
  • その他 (TypeValidation.cs, AsyncContinuationDumpTests.cs, DacDbiObjectDumpTests.cs): 関連する補助実装とテスト

パフォーマンスへの影響

影響なし

関連Issue

#128457

その他

  • 内部実装変更: 本PR は主に cDAC(診断アクセスコンポーネント)の内部コントラクトと実装の拡張で、公開API への影響はありません。
  • レビュー指摘: Copilot による低信頼度コメント:GetClassPointer が非MethodTable型の TypeHandle に対する入力検証(typeHandle.IsMethodTable() チェック)を行っていない可能性が指摘されており、KeyNotFoundException の回避が推奨されています。

#128454 Cleanup some of the intrinsic fallback implementations to make it easier to add support for new types

概要

SIMD内在関数のフォールバック実装をリファクタリングし、スカラー型分類ロジックをScalar<T>に集約化します。Shuffle/ShuffleNative実装を統一し、コード重複を削減し、新しい型(char、Half)やベクトル幅(nint/nuintシャッフルオーバーロード)の追加を容易にします。

変更内容

  • Scalar.cs: IsSupported、IsUnsigned、IsFloatingPointヘルパーを追加し、スカラー型分類を集約化
  • Vector64/128/256/512.cs: 各ベクトル幅ごとのShuffle/ShuffleNativeフォールバック実装を統合し、ヘルパーメソッドで共有化。重複コードを削減(例:Vector128.csで388行削減)
  • Vector64/128/256/512_1.cs: IsSupportedをScalar<T>.IsSupportedに統一
  • Vector.cs: typeof(T)による型分類チェックをScalar<T>ヘルパーに置き換え
  • ref sources: System.Numerics.Vectors、System.Runtime.Intrinsicsの参照ソースを再生成(フォーマット・アルファベット順化)
  • 未使用using削除: ISimdVector_2.cs、SimdVectorExtensions.csのコード整理

パフォーマンスへの影響

影響なし。リファクタリングはコード構成とメンテナンス性の改善を目的とした変更です。

関連Issue

#128454

その他

  • nint/nuintシャッフルオーバーロードの追加により、以前の提案の承認内容が完全に実装されます
  • 内部実装(フォールバック)の変更で、公開APIには影響はありません

#128432 Fix RuntimeMethodHandle cache key for async variants

概要

NativeAOT TypeLoaderのRuntimeMethodHandleキャッシュが、async-variant bitをキーに含めていなかったため、同じメソッドのasync/non-async変種が同じキャッシュエントリにエイリアスされ、誤ったメソッド変種が解決される問題を修正します。async-variant bitをハンドル識別に含めることで、キャッシュの誤りを防ぎます。

// 修正前: asyncフラグがキーに含まれていない
RuntimeMethodHandleKey key = new RuntimeMethodHandleKey(declaringTypeHandle, handle, genericMethodArgs);

// 修正後: asyncフラグがキーの識別に含まれる
RuntimeMethodHandleKey key = new RuntimeMethodHandleKey(declaringTypeHandle, handle, genericMethodArgs, isAsyncVariant);

変更内容

  • TypeLoaderEnvironment.LdTokenResultLookup.cs

    • RuntimeMethodHandleKeyコンストラクタにisAsyncVariantパラメータを追加
    • Equals()メソッドをasync-variant状態の一致判定に更新
    • GetHashCode()メソッドにVersionResilientHashCode.CombineTwoValuesIntoHashを使用してasync-variant状態を組み込み
    • NativeAOTビルド互換性のため、ハッシュ結合呼び出しに明示的なunchecked int/uintキャストを追加
    • メソッドハンドルキー生成時にasync-variant情報を渡すように更新
  • tests.proj

    • System.Text.Json.SourceGeneration.Roslyn4.4.TestsプロジェクトのNativeAOT除外エントリを削除
    • プラットフォーム/アーキテクチャ固有の除外設定は維持

パフォーマンスへの影響

影響なし(キャッシュの正確性向上により、デバッグビルド後の動作が改善される可能性)

関連Issue

#128286 #128291

その他

  • この修正はNativeAOTランタイムの内部実装(TypeLoader)に関わる変更です
  • 公開APIへの直接的な影響はありません
  • System.Text.Json SourceGeneration テストが再度有効化されます

#128427 [release/10.0] Source code updates from dotnet/dotnet

概要

dotnet/dotnetリポジトリからのコードフロー更新です。VMRの最新コミット(f7a0202)に基づいており、複数のビルドツール、コンパイラ、フレームワークパッケージおよび関連依存パッケージの更新が含まれています。release/10.0.1xxブランチの同期です。

変更内容

  • 依存パッケージの更新:

    • Microsoft.CodeAnalysis関連(5.0.0-2.26257.101 → 5.0.0-2.26270.134)
    • Microsoft.DotNet.Build.Tasks群(10.0.0-beta.26257.101 → 10.0.0-beta.26270.134)
    • NuGet.Frameworks等(7.0.3-rc.25801 → 7.0.3-rc.27134)
    • Wasm.Node.Transportランタイムパッケージ(複数プラットフォーム)
  • System.Formats.Tar関連の変更:

    • TarEntry.cs、TarHeader.Read.csに修正を実装
    • Windows向けのTarFile抽出テストケース追加
  • ビルド設定の更新:

    • NuGet.config、Version.Details.props/xmlの同期
    • global.jsonの更新
    • dotnet-runtime-depsインストーラー設定追加
  • テストプロジェクト設定:

    • LibraryImportGenerator.Unit.Tests.csprojの構成更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは自動コードフロー更新(dotnet-maestro[bot]による)であり、複数のdotnet下流リポジトリ(aspnetcore、efcore、fsharp、roslyn、sdk等)の変更も同期されています。


#128419 Fix for index out of bounds in sve scatter test

概要

SVE scatter テストのセットアップロジックで、生成されたインデックス値がoutput bufferの長さを超えることによるIndex Out of Bounds例外を修正するテスト修正です。SveScatterVectorBases.templateのMakeDistinctメソッドにおいて、重複排除時のインデックス調整処理を修正し、インデックス値を常に配列の有効範囲[0, OutElementCount)内に保つようにしました。

変更内容

  • src/tests/JIT/HardwareIntrinsics/Arm/Shared/SveScatterVectorBases.template
    • MakeDistinctメソッドの重複処理ロジック修正:重複排除時に+= sizeof(...)で調整していた処理を+ 1の剰余演算に変更し、インデックスが配列長を超えないように制御
    • コメント文法の軽微な修正

パフォーマンスへの影響

影響なし(テスト修正のため)

関連Issue

#128311

その他

このバグはOSX arm64環境でSve_Scatter8BitNarrowing_long_ulongテストが断続的に失敗する現象に対応するものです。作成者はローカルで再現できず、複数のパイプラインで異なるScatterNBitNarrowingテストが散発的に失敗していたとのことです。既にSveScatterVector.templateで同様の修正が施されており、本PRではそれと同じ修正をSveScatterVectorBases.templateに適用しています。


#128414 Add ProjectReference for crossgen2 in tests project

概要

ReadyToRunテストプロジェクトにcrossgen2プロジェクトへのプロジェクト参照を追加し、ローカルでのビルド・実行時に最新のcrossgen2の変更が確実に反映されるようにしました。

変更内容

  • ILCompiler.ReadyToRun.Tests.csproj: crossgen2_inbuild.csprojへのProjectReference を追加(ReferenceOutputAssembly="false")

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更により、テストプロジェクトのビルド時にcrossgen2の依存関係が明示的に管理され、crossgen2への変更がテスト実行に正しく反映されるようになります。ReferenceOutputAssembly="false"属性により、出力アセンブリとしては参照されず、ビルド依存関係のみが確立されます。


#128411 Platform specific docs analyzer

概要

プラットフォーム固有のTFM(例:net11.0-windows)を対象とするライブラリで、コンパイラ生成ドキュメントXMLを使用する場合、XMLドキュメントコメントの配置が一貫していないことを検出・修正するRoslyn アナライザ「PlatformDocAnalyzer」を追加します。このアナライザは、部分的なソースファイルに分割された型のドキュメント配置規約を強制し、プラットフォーム非依存ビルドの規定ドキュメントとの一貫性を検証します。

変更内容

  • PlatformDocAnalyzer(新規) — 4つの診断ルール(PLATDOC001〜004)を実装:

    • PLATDOC001: 公開型にTypeName.csという名前のソースファイルがない
    • PLATDOC002: 部分ファイルがTypeName.Something.cs命名規約に従っていない
    • PLATDOC003: 非プライマリ部分ファイルの公開メンバーのXMLドキュメントがTypeName.csに移動すべき
    • PLATDOC004: 公開APIのドキュメントが規定(プラットフォーム非依存)ビルドと異なる
  • ビルド統合 — eng/intellisense.targetsでプラットフォーム固有TFMの規定TFMを導出(例:net11.0-windows→net11.0)し、そのドキュメントXMLをアナライザにAdditionalFileとして渡す。eng/generators.targetsでソースプロジェクトビルドにアナライザを接続。

  • 抑制 — System.Private.Xmlの5つのファイルに#pragma warning disableを追加(既存の非プラットフォーム固有パターンに対応)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

新たに追加される診断ルール(PLATDOC001〜004)は警告レベルです。アナライザはUseCompilerGeneratedDocXmlFile=trueかつプラットフォーム固有TFMを対象とするプロジェクトでのみ有効化されます。ドキュメント配置ガイドはdocs/coding-guidelines/adding-api-guidelines.mdに新規記載されています。


#128388 [cDAC] : Implement DacDBI GetThreadHandle and GetThreadAllocInfo

  • 作成者: @Copilot
  • 作成日時: 2026年05月20日 00:17:12(UTC)
  • マージ日時: 2026年05月22日 21:14:30(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Common Data Access Contract)Thread契約にOSスレッドハンドルを追加し、レガシDacDbi実装でIDacDbiInterface::GetThreadHandleとGetThreadAllocInfoをcDAC対応データを使用して実装しました。新しい公開契約は導入されていません。

変更内容

  • コアCLR側: src/coreclr/vm/threads.hとdatadescriptor.incにThread::m_ThreadHandleオフセットを公開し、Thread データディスクリプタにThreadHandleフィールドを追加
  • cDAC管理型側:
    • IThread.csのThreadDataレコード構造体に新しいThreadHandleフィールドを追加
    • Thread_1.csでThreadHandleをGetThreadDataが返すThreadDataにプロット
    • Thread.csでThread型ディスクリプタからThreadHandleフィールドを読み込み
  • レガシDacDbi実装: DacDbiImpl.csでGetThreadHandleとGetThreadAllocInfoをcDAC契約を使用して実装(DEBUG時にはパリティチェック付き)
  • テスト・ドキュメント: モックディスクリプタ更新、契約レベルテスト追加、Thread.mdドキュメント更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • この変更は既存のIDacDbiInterface.csのCOMシグネチャを精製し、ハンドルへのポインタ出力形状に改善しています
  • 12ファイルすべてがレビュー済み(Copilot 6件のコメント生成)
  • DEBUGビルド時のパリティチェックにより、レガシ実装との互換性を検証しています

#128385 [release/10.0] Release Android X509 chain certificate GREFs

概要

Android プラットフォームにおいて、X509Chain クラスの JNI グローバル参照テーブルオーバーフローに起因するメモリリークを修正するバックポートです。

X509Chain の証明書チェーンビルド処理でグローバル参照が適切に解放されていなかった問題を修正し、メモリリークを防止します。

変更内容

  • src/libraries/Common/src/Interop/Android/System.Security.Cryptography.Native.Android/Interop.X509Chain.cs: グローバル参照の管理を改善。証明書チェーンビルド時に使用されるグローバル参照を適切に解放する処理を追加(+24/-6 行)。
  • 関連する単体テスト「ChainTests.BuildChainRepeatedly_DoesNotExhaustGlobalReferences」が追加されており、Android エミュレータで検証済み。

パフォーマンスへの影響

影響なし。メモリリーク修正のため、グローバル参照テーブルの不要なエントリが蓄積されなくなり、長期的にはメモリ使用量が安定化します。

関連Issue

#128284(元の修正PR)

その他

  • 対象: Android プラットフォームのみ
  • リスク評価: Low。変更範囲が限定的で、テストで十分カバーされている
  • 顧客報告による実装(カスタマーサポート対応)

#128229 [Wasm RyuJIT] Packed Simd Encodings

概要

WebAssembly RyuJIT バックエンドの Packed SIMD (v128/0xFD-prefix) 命令セットに対するエミッター レベルのサポートを追加します。SIMD 命令テーブル、新しい命令フォーマット (IF_V128/IF_LANE/IF_MEMARG_LANE) および対応する記述子型を実装し、DEBUG のみのエミッター ユニット テストで新しいエンコーディング パスの動作検証を可能にします。

変更内容

  • instrswasm.h: 完全な v128 SIMD 命令リスト(IF_OPCODE/IF_MEMARG/IF_V128/IF_LANE/IF_MEMARG_LANE フォーマットおよび 0xFD プリフィックス)を追加
  • emitfmtswasm.h: 3 つの新しい SIMD エンコーディング フォーマットを定義
  • emit.h: Wasm 上で _idIns を 9 ビットに拡幅し、idIsV128Imm/idIsMemargLaneImm アクセッサおよび instrDescV128Imm/instrDescMemargLane 宣言を追加
  • emitwasm.h: 新しいエミット ヘルパーおよび SIMD 記述子アクセッサを宣言
  • emitwasm.cpp: 新しいフォーマットの emit/size/output/display パスを実装
  • codegen.h/codegenwasm.cpp: DEBUG のみの genWasmEmitterUnitTestsSimd を実装し、すべての新規フォーマットを網羅したテストを追加
  • codegenlinear.cpp: Wasm 上の simd ユニット テスト セクションをルーティングし、INS_block/INS_br を使用してテストをスキップ

パフォーマンスへの影響

影響なし(変更はエミッター インフラストラクチャの追加であり、実コードジェネレーションはまだ SIMD 命令を利用していません)

関連Issue

なし

その他

  • この変更は実験的 Wasm RyuJIT バックエンドの内部実装(JIT コンパイラ基盤)に限定されます
  • ユニット テストは DEBUG ビルドのみで有効
  • 命令テーブルは現時点では実コードジェネレーションで消費されていないため、エミッターのエンコーディング パスをテストするためにユニット テストが導入されています

#128225 [Wasm] Write barriers

  • 作成者: @kg
  • 作成日時: 2026年05月14日 20:11:15(UTC)
  • マージ日時: 2026年05月22日 03:06:26(UTC)
  • ラベル: arch-wasm area-VM-coreclr

概要

WebAssemblyターゲットにおいて、メモリ管理の正確性を確保するため、ライトバリア機構を実装しました。JITが期待する呼び出し規約の不一致を修正し、新たにFCDECL2_RAW/FCIMPL2_RAWマクロを導入してWasm用のインラインアセンブリでライトバリア処理を実装しています。

変更内容

  • jithelpers.h: 新規マクロFCDECL2_RAW/FCIMPL2_RAWの追加(裸の呼び出し規約対応)
  • fcall.h: ライトバリア関連の宣言追加
  • wasm/writebarriers.cpp: チェック済み・未チェック状態のライトバリアをWasm向けインラインアセンブリで新規実装(126行)
  • codegenwasm.cpp: RhpByRefAssignRefの使用を削除し、ライトバリア呼び出し方式を更新
  • 各プラットフォームのWriteBarriers.S/asm: コメント整理とRhpByRefAssignRefの署名修正(ARM64, LoongArch64, RISC-V64)
  • portable/WriteBarriers.cpp: RhpByRefAssignRefの署名修正
  • jitinterface.h: ライトバリア関連の定義更新
  • CMakeLists.txt: Wasm用writebarriers.cppの追加

パフォーマンスへの影響

影響なし(ランタイムの正確性確保のための機構実装であり、パフォーマンス指標への直接的な変更なし)

関連Issue

なし

その他

  • WebAssemblyでのマネージメモリ参照フィールド書き込み時のガベージコレクション追跡を正しく機能させるための変更
  • 呼び出し規約の不一致が修正される前は、提供されたサンプルコードのWasm版がクラッシュしていた状態を解決

#128179 Implement cDAC DACDBI GetObjectFields and rework signature to UINT64

  • 作成者: @Copilot
  • 作成日時: 2026年05月14日 04:46:23(UTC)
  • マージ日時: 2026年05月22日 17:59:09(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC DAC-DBI層でGetObjectFieldsを実装し、ネイティブインターフェースの署名をCOR_TYPEIDからUINT64(メソッドテーブルポインタ)に変更しました。RuntimeTypeSystemコントラクトとECMAメタデータデコーディングを使用してフィールドオフセットとフィールド型の解決を行います。

変更内容

  • DacDbiImpl.cs: GetObjectFieldsを管理cDACに実装。ランタイムコントラクトを使用してフィールド情報を取得し、メタデータからフィールド型を解決
  • IDacDbiInterface.cs: マネージドCOM投影のGetObjectFields署名をulongパラメータに更新
  • ネイティブインターフェース更新: dacdbi.idl、dacdbiinterface.h、dacdbiimpl.cpp/.h で署名をUINT64に変更
  • RuntimeTypeSystemHelpers: 拡張メソッドのクラス可視性をpublicに変更し、クロスアセンブリ利用を実現
  • RuntimeTypeSystem.md: RuntimeTypeSystemコントラクト設計ドキュメントを更新
  • テスト追加: DacDbiObjectDumpTests.csでGetObjectFieldsの成功ケースとエラー/クエリシナリオをカバー

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRはデバッグサポート機能の改善で、パブリックAPI(デバッグインターフェース)の署名変更を含みます
  • COR_TYPEIDのtoken1フィールドのみが使用されていたため、より効率的なUINT64型への変更により、API呼び出しの簡潔性が向上します
  • ネイティブ側(C++)とマネージド側(C#、cDAC)の両方の実装が対応されており、一貫性が保たれています

#128058 Change VMPTR IPC events to ensure endianness consistency

  • 作成者: @rcj1
  • 作成日時: 2026年05月12日 00:44:56(UTC)
  • マージ日時: 2026年05月22日 18:00:45(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

PR #127943による副作用として、VMPTRがIPC層だけでなくDBI/DAC/EE全体で little-endian として伝播されていた問題を修正します。VMPTRを host endianness のラッパーに変更し、IPC層ではPortable<VMPTR>として little-endian をワイヤ上で保持しながら、アクセス時に host endianness に変換する設計に改めます。

変更内容

  • src/coreclr/inc/dbgportable.h: Portable<T>にポインタライクなヘルパーメソッドのフォワーダーを追加し、Portable<VMPTR_*>フィールドの使用を容易にしました。
  • src/coreclr/debug/inc/dbgipcevents.h: VMPTR_Baseの格納形式をPortable<CORDB_ADDRESS>からCORDB_ADDRESSに変更し、多くのIPC event フィールドをVMPTR_*からPortable<VMPTR_*>に更新しました。
  • src/coreclr/debug/ee/debugger.cpp: DebuggerIPCE_BasicTypeDataのvmAssemblyフィールドの null 初期化をNullPtr()を使用して更新し、新しいPortable<VMPTR_*>フィールド型に対応させました。
  • その他 (breakpoint.cpp, process.cpp, rsthread.cpp): IPC event の VMPTR フィールドアクセス時のアドレス変換に対応しました(内部実装の変更)。

パフォーマンスへの影響

影響なし。本変更は endianness の正確性を確保する設計修正であり、パフォーマンス特性に変化はありません。

関連Issue

#127943

その他

  • 本変更はデバッガー IPC 境界でのVMPTR値の表現を調整するもので、ランタイムのデバッグ機能の内部実装に限定されます。
  • エンディアン変換は IPC層(ワイヤレベル)で little-endian を保ちながら、host 側でのアクセス時に自動的に host endianness に変換される設計です。

#127818 Handle minimal MethodTables in dotnet-pgo trace processing

概要

dotnet-pgo のトレース処理において、Reflection.Emit や IL スタブキャッシュで使用される "minimal" MethodTables が生成する BulkType ETW イベントを適切に処理できるようにする変更です。これまで無効な TypeDef トークン(rid 0 など)が有効なものとして扱われ、メタデータアクセス時に BadImageFormatException が発生していた問題を修正します。

変更内容

  • TraceRuntimeDescToTypeSystemDesc.cs: TypeDef 行 ID を TypeNameID から抽出し、TypeDef テーブルの範囲に対して検証するロジックを追加
    • rid 0 または テーブル範囲外の rid を検出した場合、null を返して解決不可能な動的型として扱う
    • dependsOnKnownNonLoadableType フラグを設定

パフォーマンスへの影響

影響なし

関連Issue

#126330、#125352

その他

この問題は SDK トレーニングパイプラインで、COM スタブの IL スタブへの移行と構造体マーシャリングのトランジェント IL への移行により、新しいカテゴリのスタブが minimal-MT パスを通るようになり、BulkType イベントがトレースに追加されるようになった後に顕在化しました。


目次