Pull Request on 2026年03月23日

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

注意点

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


目次

  1. #125962 JIT: Fix jit-format break
  2. #125961 [main] Source code updates from dotnet/dotnet
  3. #125954 arm64: Small fixes to GenerateHWIntrinsicTests_Arm.cs
  4. #125948 Add hint for trimming System.Runtime in test109242
  5. #125947 Fix 4 bugs in TypePreinit IL interpreter
  6. #125946 Fix CS4007: ReadOnlySpan across await in TrailingHeadersTest
  7. #125940 Bump WaitOne timeouts in StartCanBeCancelled test from 5s to 30s
  8. #125936 Fix dotnet-pgo dump crash when CallWeights are present
  9. #125934 Fix TestNativeDigits for ur-IN on Apple platforms
  10. #125925 Fix CrlDiskCacheRecovers test flakiness: OuterLoop, longer timeout, retries
  11. #125912 Disable EnsureEnvironmentExitDoesntHang on .NET Framework
  12. #125911 Fix flaky NonPowerOfTwoKeySizeOaepRoundtrip test with retry on transient CryptographicException
  13. #125910 Fix intermittent SystemTrustCertificateWithCustomRootTrust CI failure
  14. #125909 Make TestKeyRing.CreateECDsa resilient to transient macOS OSStatus -50 failures
  15. #125892 [cDAC] Loosen EHInfo test to account for possible optimization of finally clause into fault clause
  16. #125867 Refactor loader heap backout adapter to remove multiple inheritance
  17. #125862 Add support for generalized variable length wasm instructions to the emitter
  18. #125854 Move more things away from PointerMemoryManager
  19. #125844 [release/10.0] Source code updates from dotnet/dotnet
  20. #125755 [release/10.0] Clear RCW cache entries when releasing wrapper objects
  21. #125742 [release/10.0] Add property and event parent lookup table entries in AddPropertyToPropertyMap and AddEventToEventMap
  22. #125616 Fix memory leaks from mono_type_full_name in marshal-shared.c error paths
  23. #124771 Fix localization of ExtendedPropertyDescriptor.DisplayName
  24. #124642 JIT: Fix fgFoldCondToReturnBlock for multi-statement return blocks
  25. #124332 arm64: Fold negative variable eq/ne to 0
  26. #123990 Synchronize PaxTarEntry ExtendedAttributes with property setters
  27. #119564 Annotate System.Speech for nullable reference types

#125962 JIT: Fix jit-format break

  • 作成者: @jakobbotsch
  • 作成日時: 2026年03月23日 14:29:25(UTC)
  • マージ日時: 2026年03月23日 15:18:57(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT最適化エンジンのコード整形ルール(jit-format)違反を修正するPRです。fgFoldCondToReturnBlock関数内のforループの整形を修正し、リポジトリの整形ガイドラインに準拠させます。

変更内容

  • src/coreclr/jit/optimizebools.cpp: fgFoldCondToReturnBlock関数内のforループを単一行のループヘッダーに再整形(+1/-2行の差分)

パフォーマンスへの影響

影響なし(整形変更のみ)

関連Issue

#125962

その他

  • 先行PullRequest #124642でGitHubワークフロー承認を漏らしていた可能性があります
  • JIT貢献者チーム(@dotnet/jit-contrib)による確認が想定されている修正です
  • 機能的な変更はなく、コード整形のみの修正です

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

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年03月23日 13:57:41(UTC)
  • マージ日時: 2026年03月23日 23:06:31(UTC)
  • ラベル: area-codeflow

概要

dotnet/dotnetリポジトリからの定期的なコードフロー更新(Codeflow update)です。主にビルド成果物の依存関係の更新とバージョン情報の同期が含まれます。ソースコードの機能的な変更ではなく、依存パッケージバージョンの更新です。

変更内容

  • eng/Version.Details.props: バージョン詳細プロパティの更新
  • eng/Version.Details.xml: バージョン詳細XMLの更新
  • global.json: グローバル設定ファイルの更新

更新された依存パッケージ(主要なもの):

  • Microsoft.CodeAnalysis関連: 5.6.0-2.26171.106 → 5.6.0-2.26172.108
  • Microsoft.DotNet.* ビルドツール: 11.0.0-beta.26171.106 → 11.0.0-beta.26172.108
  • System.Text.Json、System.Reflection.Metadata: 11.0.0-preview.3.26171.106 → 11.0.0-preview.3.26172.108
  • NuGet.* パッケージ: 7.6.0-rc.17206 → 7.6.0-rc.17308

パフォーマンスへの影響

影響なし(依存関係の更新のみ)

関連Issue

なし

その他

  • このPRはdotnet-maestro[bot]による自動コードフロー更新です
  • dotnet/aspnetcore、dotnet/runtime、dotnet/sdkリポジトリ内の関連変更も含まれます
  • ビルドは2026年3月23日UTC時点のVMR(Virtual Monolithic Repository)のマスターブランチから生成されています
  • 内部ビルド: 20260322.8

#125954 arm64: Small fixes to GenerateHWIntrinsicTests_Arm.cs

  • 作成者: @jonathandavies-arm
  • 作成日時: 2026年03月23日 12:28:54(UTC)
  • マージ日時: 2026年03月23日 17:03:52(UTC)
  • ラベル: area-System.Runtime.Intrinsics community-contribution

概要

ARM64向けハードウェア組み込み関数テスト生成コードのクリーンアップ。重複したProcessInputs呼び出しを削除し、CreateDirectoryの呼び出しを1回に統一して、コードの効率化と可読性を向上させています。

変更内容

  • src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_Arm.cs
    • 重複したProcessInputs呼び出しを削除
    • CreateDirectory呼び出しを統一(複数回の呼び出しを1回に削減)

パフォーマンスへの影響

テスト生成フェーズでの不要な処理削減による軽微な改善(実行時間短縮、重複I/O削減)

関連Issue

なし

その他

テストコード生成時のリファクタリングで、機能的な変更ではなく、コード品質とメンテナンス性の向上を目的とした変更です。


#125948 Add hint for trimming System.Runtime in test109242

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年03月23日 08:10:16(UTC)
  • マージ日時: 2026年03月23日 21:26:29(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

outerloopsテストにおいて、トリミング時にSystem.Runtimeアセンブリが削除されることで発生していたFileNotFoundExceptionを修正します。テストのAssembly.Load("System.Runtime")が成功するよう、トリミングのルートヒントを追加してSystem.Runtimeを保持させます。

変更内容

  • src/tests/Regressions/coreclr/GitHub_109242/test109242.cs: Type.GetType("System.Object, System.Runtime")を追加して、トリミング時にSystem.Runtimeアセンブリをルートとして保持するヒントを提供

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この修正はトリミング対応テストの改善であり、ランタイムのトリミング分析機能に対するメタデータヒントの追加です。内部テスト向けの変更となります。


#125947 Fix 4 bugs in TypePreinit IL interpreter

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年03月23日 07:16:18(UTC)
  • マージ日時: 2026年03月23日 21:40:25(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT TypePreinit IL インタープリータの4つのバグを修正し、定数畳み込みの正確性向上とAOTコンパイラのクラッシュ防止を実現しました。

変更内容

TypePreinit.cs - IL インタープリータのコア修正(内部実装)

  • ceq opcode:浮動小数点数NaN比較をIEEE 754準拠に修正(NaN == NaNが正しくfalseを返すように)
  • TryLoadElement:境界値チェックのオフバイワン修正(>>=に変更し、index == Lengthで範囲外アクセスを防止)
  • 符号付き除算/剰余のオーバーフロー処理:int.MinValue / -1long.MinValue / -1時にStatus.Failを返し、OverflowException がAOTコンパイラをクラッシュさせるのを防止
  • Int64型 shl 演算の実装追加(両方のオペランドがInt64に正規化される場合の例:nint << nint

Preinitialization.cs - テスト追加(新規)

  • 配列ロード境界値チェック、浮動小数点数NaN比較、除算オーバーフロー等をカバーするスモークテストを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正は定数畳み込みの正確性向上が目的で、クリティカルではありませんが重要な修正です。AI(Opus 4.6)がコード検査で発見した問題により改善されました。


#125946 Fix CS4007: ReadOnlySpan across await in TrailingHeadersTest

  • 作成者: @Copilot
  • 作成日時: 2026年03月23日 05:51:54(UTC)
  • マージ日時: 2026年03月23日 13:47:48(UTC)
  • ラベル: area-System.Net.Http

概要

System.Net.Http.WinHttpHandler の機能テストビルドで発生していた CS4007 コンパイルエラーを修正します。Assert.Equal<byte>()ReadOnlySpan<byte> オーバーロードを選択し、await 式と同じステートメント内に存在することで、ReadOnlySpan<byte>await 境界を越えて保持できないという問題を解決します。

// 修正前(エラー):
Assert.Equal<byte>(Array.Empty<byte>(), await response.Content.ReadAsByteArrayAsync());

// 修正後(正常):
byte[] responseBody = await response.Content.ReadAsByteArrayAsync();
Assert.Equal(Array.Empty<byte>(), responseBody);

変更内容

  • TrailingHeadersTest.cs: Http2GetAsync_TrailingHeaders_NoData_EmptyResponseObserved メソッド(220行目付近)で、await 呼び出しを Assert.Equal より前にローカル変数へ抽出し、ReadOnlySpan<byte>await 境界を越えないようにしました。

パフォーマンスへの影響

影響なし

関連Issue

#125952

その他

このコンパイルエラーは、オーバーロード解決が ReadOnlySpan<byte> を引数に取るオーバーロードを選択した際に発生します。await をステートメントの外に出すことで、コンパイラは ReadOnlySpan<byte>await 境界を越えて保持する必要がなくなります。


#125940 Bump WaitOne timeouts in StartCanBeCancelled test from 5s to 30s

  • 作成者: @Copilot
  • 作成日時: 2026年03月23日 01:07:34(UTC)
  • マージ日時: 2026年03月23日 14:30:35(UTC)
  • ラベル: area-Extensions-Hosting

概要

StartCanBeCancelled テストが .NET Framework 4.8.1 x86 Windows で不安定に失敗する問題に対応しています。Host.StartAsync が複数の非同期 ThreadPool ホップを必要とする一方で、Framework の ThreadPool は遅いスレッド立ち上げ速度(約500ms/スレッド)を持つため、並列テスト実行時に 5 秒の WaitOne タイムアウトが不足していました。タイムアウトを 30 秒に引き上げることで、テストの信頼性を向上させます。

変更内容

  • src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Internal/HostTests.cs
    • serviceStarting.WaitOne(TimeSpan.FromSeconds(5))WaitOne(TimeSpan.FromSeconds(30)) — テスト本体での失敗していたアサーション
    • startCancelled.WaitOne(TimeSpan.FromSeconds(5))WaitOne(TimeSpan.FromSeconds(30))FakeHostedService.StartAction 内のペアの待機、一貫性のため引き上げ

パフォーマンスへの影響

影響なし(テスト実行時のタイムアウト値の変更のため、テスト全体の実行時間は失敗時のみ増加)

関連Issue

#125937

その他

  • この変更は内部テストコード(Microsoft.Extensions.Hosting)の修正であり、公開 API や実装に影響しません
  • .NET Framework 4.8.1 x86 環境での flaky テストの解決を目指しており、他のプラットフォーム/ランタイムへの影響はありません
  • テスト構造は変わらず、タイムアウト値のみの変更です

#125936 Fix dotnet-pgo dump crash when CallWeights are present

  • 作成者: @benaadams
  • 作成日時: 2026年03月23日 00:16:24(UTC)
  • マージ日時: 2026年03月23日 11:28:13(UTC)
  • ラベル: area-VM-coreclr community-contribution

概要

dotnet-pgo dump コマンドで CallWeights データを含む .mibc ファイルを処理する際に発生していた InvalidOperationException を修正しました。JSON シリアライザが配列内に直接命名プロパティを書き込もうとしていたのが原因で、各配列要素を適切な JSON オブジェクトでラップすることで解決しています。

変更内容

  • src/coreclr/tools/dotnet-pgo/Program.cs: CallWeights の JSON シリアライゼーション処理で、各配列要素を WriteStartObject() / WriteEndObject() でラップするよう修正(+2行)

パフォーマンスへの影響

影響なし

関連Issue

#125935

その他

修正前は以下のような不正な JSON 構造が生成されていました:

"CallWeights": [
    "Method": "...",
    "Weight": 123
]

修正後は以下の正しい JSON 構造になります:

"CallWeights": [
    {
        "Method": "...",
        "Weight": 123
    }
]

#125934 Fix TestNativeDigits for ur-IN on Apple platforms

  • 作成者: @lewing
  • 作成日時: 2026年03月22日 21:39:40(UTC)
  • マージ日時: 2026年03月23日 02:07:32(UTC)
  • ラベル: area-System.Globalization os-mac-os-x os-ios os-maccatalyst

概要

Apple プラットフォームにおける ICU ロケールデータの差異により、ur-IN カルチャーの NativeDigits テストが失敗する問題を修正します。Apple ICU はラテン数字("0""9")を返しますが、上流の CLDR では Extended Arabic-Indic 数字(arabext, U+06F0–U+06F9)が指定されています。xUnit v3 へのアップグレードにより ConditionalTheory + MemberData が正常に動作し始め、このテストが初めて実行されて Apple プラットフォーム固有の差異が露呈しました。

変更内容

  • src/libraries/System.Runtime/tests/System.Globalization.Tests/NumberFormatInfo/NumberFormatInfoTests.cs
    • NativeDigitTestData() メソッドの ur-IN テストデータに PlatformDetection.IsApplePlatform による条件分岐を追加
    • Apple プラットフォーム上ではラテン数字を、その他のプラットフォームでは Extended Arabic-Indic 数字を期待値として設定
    • CLDR と Apple ICU の差異を説明するコメントを追加

パフォーマンスへの影響

影響なし

関連Issue

#125933

その他

  • この修正は既存の globalization テスト内での実装パターン(NumberFormatInfoData.csRegionInfoTests.cs など)に従っています
  • テスト自体は以前から存在していましたが、xUnit v2 では実行されていませんでした
  • Microsoft.DotNet.XUnitAssert の 2.9.3 から 3.2.2 へのアップグレードが契機となり、テスト実行により問題が発見されました

#125925 Fix CrlDiskCacheRecovers test flakiness: OuterLoop, longer timeout, retries

  • 作成者: @Copilot
  • 作成日時: 2026年03月22日 14:38:41(UTC)
  • マージ日時: 2026年03月23日 18:43:50(UTC)
  • ラベル: area-System.Security

概要

CrlDiskCacheRecoversテストの不安定性を改善するPR。このテストはhttps://get.dot.net/への生のHTTPSリクエストを含むため、CI環境の負荷下でDNS・TCP・TLS・リダイレクト処理がタイムアウト(元々10秒)を超過し、TaskCanceledExceptionが頻発していました。[OuterLoop]属性の追加、タイムアウト延長(10秒→60秒)、リトライロジック(最大3回)を導入して、トランジェントなネットワーク障害に対する耐性を強化します。

変更内容

  • src/libraries/System.Security.Cryptography/tests/X509Certificates/X509FilesystemTests.Unix.cs
    • [OuterLoop]属性を追加:テストがデフォルトのinner-loopスイートから除外される(内部実装の変更)
    • HTTPSリクエストのタイムアウトを60秒に延長
    • RetryHelper.ExecuteAsyncを用いた最大3回のリトライロジックを実装
    • リトライ時のSocketsHttpHandlerHttpClientを毎回新規作成
    • リトライループ内でgetDotNetCertを破棄・リセット(リソースリーク防止)

パフォーマンスへの影響

影響なし。テストの実行時間は増加する可能性がありますが(OuterLoopに移動、タイムアウト延長)、パフォーマンスの低下ではなくテストの安定性向上を目的としています。

関連Issue

#125905

その他

  • 本変更は非推奨化や破壊的変更を含まず、テスト自体の改善のみ
  • Copilotの指摘にて、最終的なリトライ失敗時にgetDotNetCertの破棄漏れの可能性が言及されていますが、本PRに含まれるコード例ではfinallyブロックによる保護がないため、リソースリークの潜在的リスクが存在する

#125912 Disable EnsureEnvironmentExitDoesntHang on .NET Framework

  • 作成者: @Copilot
  • 作成日時: 2026年03月22日 04:26:54(UTC)
  • マージ日時: 2026年03月23日 03:00:20(UTC)
  • ラベル: area-Extensions-Hosting

概要

ConsoleLifetimeExitTests.EnsureEnvironmentExitDoesntHang テストが .NET Framework で失敗する問題を解決します。.NET Framework のシャットダウン時に System.Console.ControlCHooker.Unhook()IOException をスローし、プロセス終了時に未処理例外(終了コード -532462766 / EXCEPTION_COMPLUS)が発生するという既知の制限に対応するため、テストを .NET Framework でスキップします。

変更内容

  • ConsoleLifetimeExitTests.cs: テストメソッドに [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "NET Framework shutdown issue")] 属性を追加
  • 関連テスト EnsureEnvironmentExitCode と同じスキップ手法を適用
  • テストボディを簡潔化:expectedExitCode = PlatformDetection.IsNetFramework ? 0 : 125 の条件分岐を削除し、期待終了コード 125 をインライン化

パフォーマンスへの影響

影響なし

関連Issue

#119545

その他

  • .NET Framework の既知のシャットダウン制限によるテスト不安定性の対応
  • 修正前:プロセス終了時に System.Console.ControlCHooker.Unhook() が例外をスロー → 終了コード -532462766
  • 修正後:.NET Framework ターゲットではテストをスキップ、.NET Core/.NET 5+ では通常通り実行

#125911 Fix flaky NonPowerOfTwoKeySizeOaepRoundtrip test with retry on transient CryptographicException

  • 作成者: @Copilot
  • 作成日時: 2026年03月22日 04:20:13(UTC)
  • マージ日時: 2026年03月23日 00:45:56(UTC)
  • ラベル: area-System.Security

概要

Linux CI環境でNonPowerOfTwoKeySizeOaepRoundtripテストが不安定に失敗する問題を修正します。RSAFactory.Create(3072)時にInterop.Crypto.RsaGenerateKey内で一時的なCryptographicExceptionが発生する(リソース枯渇やエントロピー不足が原因と推測)ため、テスト本体をRetryHelper.Executeでラップし、最大5回の再試行(指数バックオフ)を行うようにしました。

変更内容

  • src/libraries/Common/tests/System/Security/Cryptography/AlgorithmImplementations/RSA/EncryptDecrypt.cs
    • NonPowerOfTwoKeySizeOaepRoundtripテストメソッドをRetryHelper.Execute(..., retryWhen: e => e is CryptographicException)でラップ
    • retryWhen述語はCryptographicException全般をキャッチするが、テストケース生成時にRSAFactory.SupportsSha3RSAFactory.SupportsSha2Oaepチェックが既に行われているため、未サポートアルゴリズムの失敗をマスクする危険性はなし

パフォーマンスへの影響

影響なし(テストの安定性向上が主目的)

関連Issue

#120606

その他

  • 破壊的変更なし(テスト内部の修正のみ)
  • 一時的なCryptographicExceptionのみを対象としており、永続的なプラットフォーム非対応の失敗は検知可能

#125910 Fix intermittent SystemTrustCertificateWithCustomRootTrust CI failure

  • 作成者: @Copilot
  • 作成日時: 2026年03月22日 03:54:49(UTC)
  • マージ日時: 2026年03月23日 19:14:49(UTC)
  • ラベル: area-System.Security

概要

SystemTrustCertificateWithCustomRootTrust テストの間欠的な失敗(CI月8回程度)を修正しました。Linux Bionic がシステム信頼ストアに「DigiCert Global Root G2」を含まないため、AIA HTTP ダウンロードに依存していました。ローカル解決とネットワーク依存性の排除により、すべてのプラットフォームで決定的な動作を実現します。

変更内容

src/libraries/System.Security.Cryptography/tests/X509Certificates/ChainTests.cs

  • microsoft.com ルート証明書を X509ChainPolicy.ExtraStore に追加し、チェーンをローカルで完全に解決可能に
  • X509ChainPolicy.DisableCertificateDownloads = true を設定してネットワーク依存性を完全に排除

テストのセマンティクスは変わらず:ルートは ExtraStore を通じて検出可能(信頼可能)ですが、CustomTrustStore には含まれていない(信頼されていない)ため、chain.Build() はすべてのプラットフォームで UntrustedRoot で確定的に false を返します。

パフォーマンスへの影響

影響なし

関連Issue

#123843

その他

テスト内部実装への変更で、公開 API には影響ありません。Linux 特有のプラットフォーム間の違いに由来する環境依存性が排除されます。


#125909 Make TestKeyRing.CreateECDsa resilient to transient macOS OSStatus -50 failures

  • 作成者: @Copilot
  • 作成日時: 2026年03月22日 03:54:22(UTC)
  • マージ日時: 2026年03月23日 18:47:46(UTC)
  • ラベル: area-System.Security

概要

macOSのApple Security frameworkが断続的に返すOSStatus error -50エラーに対応するため、TestKeyRing.CreateECDsaにリトライロジックを追加しました。このエラーはEC鍵インポート時に発生し、COSE テストスイート全体で月21回の頻度でテスト失敗を引き起こしていました。すべてのテストがTestKeyRing経由で鍵を共有しているため、この改善により全体的なCI信頼性が向上します。

ECDsa? result = null;
RetryHelper.Execute(
    () => result = ECDsa.Create(parametersLocalCopy),
    maxAttempts: 3,
    retryWhen: e => RuntimeInformation.IsOSPlatform(OSPlatform.OSX) && e is CryptographicException { HResult: -50 });
return result!;

変更内容

  • src/libraries/System.Security.Cryptography.Cose/tests/TestKeyRing.cs: CreateECDsaメソッドにRetryHelper.Executeを使用したリトライロジックを追加。最大3回の再試行を実施し、macOS上でのみHResult -50エラーに対してリトライを行います。リトライスコープを厳密に制限することで、決定的な失敗は隠蔽されません。永続的な失敗時は、RetryHelperがすべての試行を含むAggregateExceptionをスロー。

パフォーマンスへの影響

影響なし。既存のスレッド単位での鍵キャッシング機構(CoseTestHelpers[field: ThreadStatic]TestKeyRingfield ??=)により、リトライパスはスレッドあたり鍵タイプごとに1回のみ実行されるため、オーバーヘッドは無視できるレベルです。

関連Issue

#121902

その他

RuntimeInformation.IsOSPlatformOperatingSystem.IsMacOS()の代わりに使用しているのは、このテストプロジェクトが.NET Framework 4.8.1ターゲットもビルド対象としているため互換性を維持するためです。


#125892 [cDAC] Loosen EHInfo test to account for possible optimization of finally clause into fault clause

  • 作成者: @rcj1
  • 作成日時: 2026年03月21日 19:03:20(UTC)
  • マージ日時: 2026年03月23日 21:40:42(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDAC(Common Data Access Component)のダンプベース統合テストを緩和するもの。JITコンパイラがtry/finallytry/faultに最適化する可能性に対応するため、ExecutionManager EH句列挙テストの assertion を更新し、両方の句タイプを受け入れるようにしました。

変更内容

  • ExceptionHandlingInfoDumpTests.cs: テストをリネーム(FinallyFaultの両方に対応)し、ExceptionClauseFlags.FinallyまたはExceptionClauseFlags.Faultのいずれかを受け入れるよう assertion を更新。最適化の理由を説明するコメント を追加。
  • ExecutionManager.md: ドキュメント更新(仕様または設計説明の追加)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は、JITコンパイラのCompiler::fgCloneFinally()による最適化に対応するテストの堅牢性向上を目的としています。finally句がfault句に変換される可能性があるため、テストがその両方のケースを許容する必要があります。これはテストの実装詳細の変更であり、.NETランタイムの実装には影響しません。


#125867 Refactor loader heap backout adapter to remove multiple inheritance

  • 作成者: @noahfalk
  • 作成日時: 2026年03月20日 21:49:18(UTC)
  • マージ日時: 2026年03月23日 18:11:31(UTC)
  • ラベル: area-VM-coreclr

概要

ローダーヒープのバックアウトアダプターをリファクタリングし、多重継承を削除しています。これは #125129 での議論に基づいた変更例を示すPRで、同様の変更を #125129 に組み込むか、このPRをマージするかのいずれかの対応が予定されています。

変更内容

  • src/coreclr/inc/loaderheap.h: ローダーヒープのバックアウトアダプター実装をリファクタリング(69行追加/11行削除)
  • src/coreclr/utilcode/loaderheap_shared.cpp: 細微な追加(1行追加)

多重継承の構造を削除する設計変更が実施されています。

パフォーマンスへの影響

影響なし

関連Issue

#125129

その他

このPRは設計パターンの改善提案という位置づけで、#125129 への最終的な変更方針の決定に影響する可能性があります。


#125862 Add support for generalized variable length wasm instructions to the emitter

  • 作成者: @davidwrighton
  • 作成日時: 2026年03月20日 20:31:22(UTC)
  • マージ日時: 2026年03月23日 20:28:00(UTC)
  • ラベル: area-CodeGen-coreclr

概要

WASM JIT命令エンコーディングを拡張し、WebAssemblyの仕様に沿った可変長ULEB128サブオプコード形式のプリフィックス付き命令をサポートしました。従来の2バイト固定形式から、任意のサイズの可変長命令(uint16_t範囲内)の定義と生成が可能になります。

変更内容

  • instrswasm.h: INST2(prefix, opcode) マクロを導入し、プリフィックス付きWASM命令(例:0xFCプリフィックス)の定義形式を統一
  • instr.h: WASM命令列挙型生成時にINST2形式を対応
  • instr.cpp: 命令名テーブル生成時にINST2形式を対応
  • emitwasm.cpp: プリフィックス/サブオプコードテーブルを追加し、プリフィックス + ULEB128形式でのオプコード出力に対応。命令サイジングと出力処理も更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は仕様準拠のWASM命令定義を実現するための内部実装改善であり、JITコンパイラの命令エミッタが扱える命令の柔軟性を向上させます。前回の修正(2バイト命令のみ対応)の拡張として、WebAssemblyの仕様で定義されるより大きな可変長命令にも対応するもの。


#125854 Move more things away from PointerMemoryManager

  • 作成者: @vcsjones
  • 作成日時: 2026年03月20日 19:30:42(UTC)
  • マージ日時: 2026年03月23日 18:55:33(UTC)
  • ラベル: area-System.Security reduce-unsafe

概要

Apple プラットフォーム上の PKCS#12/PFX コンテンツ スニッフィング処理をリファクタリングし、スタックのみの ASN.1 Value* ref-struct デコーダーを使用するように変更。unsafe なピニング処理と PointerMemoryManager への依存を削減します。

変更内容

  • X509Pal.macOS.cs, AppleCertificatePal.ImportExport.iOS.cs: PKCS#12 スニッフィング処理を ValuePfxAsn.Decode() を使用した span ベースのパースに変更し、unsafe なメモリ操作を排除
  • PfxAsn.xml.cs, MacData.xml.cs, DigestInfoAsn.xml.cs: ASN.1 スキーマ生成で emitType="both" を設定し、従来のクラス型と Value* ref-struct 型の両方を生成
  • PfxAsn.xml, MacData.xml, DigestInfoAsn.xml: ASN.1 スキーマ定義に valueTypeName マッピングを追加して ref-struct 型の生成を指定

パフォーマンスへの影響

スタックベースの ref-struct デコーダーを使用することでヒープ割り当てが削減され、メモリ効率が向上。ただしベンチマーク結果は提供されていません。

関連Issue

なし

その他

このリファクタリングは、.NET の ASN.1 処理を安全な span ベースの実装へ段階的に移行する継続的な取り組みの一部です("Move more things away from PointerMemoryManager" テーマ)。生成された ref-struct 型により、Apple プラットフォームでの PKCS#12 証明書インポート処理がスタックのみで完結し、unsafe コードブロックの削減につながります。


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

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年03月20日 16:42:15(UTC)
  • マージ日時: 2026年03月23日 12:04:08(UTC)
  • ラベル: Servicing-approved area-codeflow

概要

dotnet/dotnetリポジトリからのコードフロー更新PRです。VMRからのソースコード変更と依存関係更新を含みます。主にMicrosoft.CodeAnalysis、Microsoft.DotNetビルドツール、NuGetパッケージ、WebAssemblyランタイムなど複数の開発ツール・ライブラリの依存バージョンが更新されています。

変更内容

  • NuGet.config: NuGetフィード設定の更新(1行追加/削除)
  • eng/Version.Details.props/xml: 依存パッケージのバージョン情報を37行更新
  • global.json: グローバルツールバージョン設定を3行更新

主な依存パッケージ更新:

  • Microsoft.CodeAnalysis関連: 5.0.0-2.26167.104 → 5.0.0-2.26170.102
  • Microsoft.DotNet.Arcade.Sdk他ビルドツール: 10.0.0-beta.26167.104 → 10.0.0-beta.26170.102
  • NuGet.Frameworks/Packaging/ProjectModel/Versioning: 7.0.2-rc.16804 → 7.0.2-rc.17102
  • WebAssemblyランタイム(複数プラットフォーム対応): 10.0.0-alpha.1.26152.2 → 10.0.0-alpha.1.26167.2
  • System.Text.Json、System.Reflection.Metadata他システムライブラリ: 10.0.6(変動なし)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 対象ブランチ: release/10.0.1xx
  • ビルド日時: 2026年3月20日
  • 関連する上流リポジトリ: aspnetcore、efcore、emsdk、roslyn、sdk、source-build-reference-packages、templatingの各リポジトリからの変更を含みます

#125755 [release/10.0] Clear RCW cache entries when releasing wrapper objects

  • 作成者: @github-actions[bot]
  • 作成日時: 2026年03月18日 22:55:58(UTC)
  • マージ日時: 2026年03月23日 17:54:59(UTC)
  • ラベル: Servicing-approved area-System.Runtime.InteropServices

概要

WinRT XAMLシナリオにおいて、RCW(Runtime Callable Wrapper)がスレッド終了後に無効化される際のキャッシュ管理の問題を修正しました。修正前は、ユーザーコードが無効化されたRCWを受け取ることがあり、XAML スレッド終了後に予期しない例外が発生していました。本修正により、ComWrappersがラッパーオブジェクトのリリース時にRCWキャッシュエントリを適切にクリアするようになります。

変更内容

  • System.Runtime.InteropServices.ComWrappers.cs: RCWキャッシュ管理ロジックを強化し、ラッパーオブジェクト解放時のキャッシュクリア処理を追加(+32行)
  • System.Runtime.InteropServices.TrackerObjectManager.cs: オブジェクトトラッキング機構を改善し、無効化されたRCWの追跡を改善(+19行)
  • GlobalInstance.cs(テスト): RCWキャッシュ動作を検証する単体テストを追加(+32行)

パフォーマンスへの影響

影響なし。変更は主にメモリ管理とキャッシュの正確性を改善するものであり、パフォーマンスは低下しません。

関連Issue

#125754

その他

  • 対象バージョン: .NET 10.0(release/10.0ブランチへのバックポート)
  • リスク評価: 低リスク。変更はWinRT XAMLシナリオのみに限定され、単一スレッドのWinRT XAMLアプリケーションには影響なし
  • 回帰情報: .NET Core 3.1の組み込みWinRTサポートおよび.NET Nativeからの回帰
  • 検証: Microsoft Storeチームによる内部検証済み。単体テストを追加して動作を検証

#125742 [release/10.0] Add property and event parent lookup table entries in AddPropertyToPropertyMap and AddEventToEventMap

  • 作成者: @github-actions[bot]
  • 作成日時: 2026年03月18日 19:31:59(UTC)
  • マージ日時: 2026年03月23日 17:56:56(UTC)
  • ラベル: Servicing-approved area-Diagnostics-coreclr

概要

Hot Reloadで複数の連続編集(特にASP.NET Core プロジェクトの.cshtmlまたは.csファイル)時に発生するArgumentOutOfRangeExceptionを修正するバックポート。メタデータエディタ内モジュール(Enc)で、プロパティとイベントをプロパティマップに追加する際に、親参照ルックアップテーブルのエントリが不足していたことが原因。

変更内容

  • src/coreclr/md/enc/metamodelrw.cpp: AddPropertyToPropertyMapおよびAddEventToEventMap関数にプロパティとイベントの親参照ルックアップテーブルエントリを追加(+16行)
  • これにより、Hot Reload時のメタデータ更新処理で親要素への適切な参照解決が確保される(内部実装の修正)

パフォーマンスへの影響

影響なし

関連Issue

#125534dotnet/sdk#48182

その他

  • .NET 9で回帰した問題
  • Visual Studio内部テストが更新済み
  • リスク評価:Low
  • 元のPR:#125536のrelease/10.0ブランチへのバックポート

#125616 Fix memory leaks from mono_type_full_name in marshal-shared.c error paths

  • 作成者: @Copilot
  • 作成日時: 2026年03月16日 14:23:33(UTC)
  • マージ日時: 2026年03月23日 09:52:23(UTC)
  • ラベル: area-VM-meta-mono

概要

mono_type_full_name()が返すヒープ割り当てされた文字列が、marshal-shared.cの複数のエラーパスでg_strdup_printfに直接渡され、解放されずにメモリリークしていた問題を修正。AOT コンパイル時に無効なマーシャル設定を持つアセンブリを処理する際に、これらパスが繰り返し実行されて累積的なメモリ増加を引き起こしていた。

修正パターン:

// 修正前
char *msg = g_strdup_printf("Type %s ...", mono_type_full_name(m_class_get_byval_arg(klass)));

// 修正後
char *type_name = mono_type_full_name(m_class_get_byval_arg(klass));
char *msg = g_strdup_printf("Type %s ...", type_name);
g_free(type_name);

変更内容

  • src/mono/mono/metadata/marshal-shared.c: エラーパス内の4箇所でmono_type_full_name()の結果をローカル変数に格納し、使用後にg_free()で明示的に解放
    • 自動レイアウト構造体チェック(1箇所)
    • 非ブリッタブル汎用フィールドチェック(1箇所)
    • 構造体フィールド型チェック(2箇所のmono_type_full_name呼び出し)
    • 注:explicit-layout g_errorパスは変更なし(g_errorは致命的で戻らず、WASM/WASI ビルドでの未使用変数エラー回避のため)

パフォーマンスへの影響

メモリ効率の改善。特にAOT コンパイル時に無効なマーシャル設定を持つ多数の型を処理する際の、累積的なメモリ成長を削減。

関連Issue

#125576

その他

  • プレビルド済みエラーパスのみの変更であり、ロジック変更なし
  • リスク:非常に低い。変更はg_free呼び出しの追加に限定され、Mono ランタイムの内部実装(非公開API)に影響
  • テスト:エラーパスのため既存テストインフラは限定的だが、変更は機械的かつ検査可能

#124771 Fix localization of ExtendedPropertyDescriptor.DisplayName

  • 作成者: @Zurisen
  • 作成日時: 2026年02月23日 23:10:45(UTC)
  • マージ日時: 2026年03月23日 08:19:13(UTC)
  • ラベル: area-System.ComponentModel community-contribution

概要

ExtendedPropertyDescriptor.DisplayNameのローカライゼーションバグを修正します。トリミングまたはWASM環境でSR.UsingResourceKeys()trueを返す場合、ハードコードされた英語文字列"{0} on {1}"にフォールバックされていたため、既にローカライズされたSR.MetaExtenderNameリソースがバイパスされていました。不要なターナリ演算子を削除し、SR.Format(SR.MetaExtenderName, ...)が全環境で正しく機能するようにしました。

変更内容

  • src/libraries/System.ComponentModel.TypeConverter/src/System/ComponentModel/ExtendedPropertyDescriptor.cs
    • SR.UsingResourceKeys()のチェックを含む不要なターナリ演算子を削除
    • ローカライズされたリソース文字列SR.MetaExtenderNameを直接使用するようにシンプル化

パフォーマンスへの影響

影響なし

関連Issue

#108422

その他

  • System.ComponentModel.TypeConverterの既存テストすべてがパス
  • 非英語ロケール環境でextenderプロパティの表示名(例:"Error on errorProvider")が正しく翻訳されるようになります

#124642 JIT: Fix fgFoldCondToReturnBlock for multi-statement return blocks

  • 作成者: @yykkibbb
  • 作成日時: 2026年02月20日 14:39:47(UTC)
  • マージ日時: 2026年03月23日 05:34:01(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution

概要

JITコンパイラのfgFoldCondToReturnBlock最適化を改善し、短絡評価&&式で定数がnon定数の後に現れる場合に、インライン化による死亡ローカル変数の割り当てが存在しても条件をブランチレスな戻り値へ折りたたむことができるようにしました。これにより、より効率的なコード生成(ARM64ではcmp+cset+ret)が実現されます。

変更内容

  • src/coreclr/jit/optimizebools.cpp: isReturnBoolラムダ関数のhasSingleStmt()制約を緩和。先行ステートメントがGTF_GLOBALLY_VISIBLE_SIDE_EFFECTSフラグを持たない場合は許可することで、インライン化による死亡ローカル変数が存在しても最適化が実行されるように対応
  • テストファイル追加: Runtime_123621.csおよびRuntime_123621.csprojを追加し、元の問題パターンのリグレッションテストを実装

パフォーマンスへの影響

改善あり

  • コード生成の最適化: 従来はブランチ分岐(bne+複数のmov+ret)が生成されていましたが、最適化後は条件セット命令(cset)を使用したブランチレスコード(cmp+cset+ret)に改善
  • 分岐予測のオーバーヘッド削減により、実行効率が向上

関連Issue

#123621

その他

  • 既存のDevDiv_168744リグレッションテストが引き続き通過することを確認済み
  • 副作用のあるブロックは正しく最適化の対象外に除外される設計
  • HoistedInline_BeforeInline_Afterの全インライン化パターンで同等のブランチレスコード生成を検証済み

#124332 arm64: Fold negative variable eq/ne to 0

  • 作成者: @jonathandavies-arm
  • 作成日時: 2026年02月12日 10:01:41(UTC)
  • マージ日時: 2026年03月23日 10:07:00(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution

概要

arm64およびx64アーキテクチャで、負の値の比較演算を最適化する変換を実装しました。(-(x)) == 0 という式を x == 0 にfolding(値の変更なし、式の簡略化)する最適化です。これにより、不要な否定演算(negx命令)を削除でき、生成コードのサイズとパフォーマンスを改善します。

変更内容

  • src/coreclr/jit/morph.cpp: 否定演算を含む等値比較(==, !=)の最適化ロジックを追加(+32行)

    • JITコンパイラの内部実装変更(公開APIへの影響なし)
    • 折り畳み処理時に、-(x) == 0 パターンを認識して x == 0 に簡略化
  • src/tests/JIT/opt/InstructionCombining/Neg.cs: テストケースを大幅追加・改善(+1360/-115行)

    • 否定演算の最適化パターンをカバーする包括的なテスト

パフォーマンスへの影響

arm64: 全体で40バイト削減(-0.09%)

  • FullOpts: -40バイト、PerfScore -0.09%改善
  • 複数のメソッドで命令削減(4バイト改善が複数件)
  • 例:negs + add の組み合わせが adds 1命令に最適化

x64: 全体で116バイト削減(-0.04%)

  • FullOpts: -102バイト(-16.74% PerfScore改善)
  • MinOpts: -14バイト(-1.28% PerfScore改善)
  • 特にTestNegプログラムで大きな改善(8-7バイト削減、29%削減率)
  • 命令数削減に伴うパフォーマンス向上を確認

関連Issue

なし

その他

  • 変更は内部JITコンパイラ最適化のみで、ランタイムの動作や公開APIに影響なし
  • 互換性への懸念なし
  • 複数アーキテクチャで一貫した改善効果を確認

#123990 Synchronize PaxTarEntry ExtendedAttributes with property setters

  • 作成者: @Copilot
  • 作成日時: 2026年02月04日 09:37:26(UTC)
  • マージ日時: 2026年03月23日 08:21:19(UTC)
  • ラベル: area-System.Formats.Tar

概要

PaxTarEntryの公開プロパティ(ModificationTimeNameUserNameなど)のセッターとExtendedAttributes辞書の同期を実装します。プロパティ変更時にExtendedAttributesが更新されず、値が矛盾する問題を解決します。プロパティセッターが常に優先され、コンストラクタで競合する場合はプロパティ値でExtendedAttributesを正規化します(既存の拡張属性は読み込み時に削除されず、ラウンドトリップの忠実性を保持)。

var attrs = new Dictionary<string, string> { { "mtime", "1234567890.0" } };
var entry = new PaxTarEntry(TarEntryType.RegularFile, "test.txt", attrs);
entry.ModificationTime = DateTimeOffset.FromUnixTimeSeconds(9876543210);
// After: entry.ExtendedAttributes["mtime"] == "9876543210" (同期済み)

変更内容

  • TarHeader.cs: ExtendedAttributes同期用ヘルパーメソッドを追加(SyncStringExtendedAttributeSyncTimestampExtendedAttributeSyncNumericExtendedAttribute)、共通ロジックAddOrUpdateStandardFieldExtendedAttributesを抽出
  • TarEntry.cs・PosixTarEntry.cs: 9つのプロパティセッター(Name、LinkName、UserName、GroupName、Uid、Gid、DeviceMajor、DeviceMinor、ModificationTime)を更新し、セッター内で同期ヘルパーを呼び出す
  • PaxTarEntry.cs: コンストラクタでentryNameがExtendedAttributesのpathに優先(例外は発生しない)、ReplaceNormalAttributesWithExtended後にpathを同期
  • TarHeader.Read.cs・TarHeader.Write.cs: 読み込み時・書き込み時のExtendedAttributes処理をリファクタリング、octal定数を再利用可能に
  • テスト: 新規テストファイルPaxTarEntry.ExtendedAttributes.Tests.csで同期・ラウンドトリップ・コンストラクタ競合を検証、既存テストを整理・パラメータ化

パフォーマンスへの影響

影響なし

関連Issue

#76405

その他

  • 互換性: コンストラクタで競合するpathに対して例外を発生させず、プロパティ値で正規化することで破壊的変更を回避
  • 内部実装: ExtendedAttributes初期化時のみ同期処理が実行される(PAX形式のみ)
  • XML文書: コンストラクタとプロパティセッターのドキュメントを更新し、同期動作を明記

#119564 Annotate System.Speech for nullable reference types

  • 作成者: @RenderMichael
  • 作成日時: 2025年09月11日 05:35:59(UTC)
  • マージ日時: 2026年03月23日 06:48:28(UTC)
  • ラベル: area-System.Speech community-contribution

概要

System.Speech ライブラリのすべての公開APIとRef構造に対して、Nullable Reference Types(NRT)のアノテーションを追加しました。これにより、null許容性に関するコンパイル時の型安全性チェックが可能になります。

変更内容

  • Ref定義(System.Speech.cs): 公開API署名に ? および ! のnull許容性アノテーションを適用
  • 複数の内部実装ファイル: AlphabetConverter、AsyncSerializedWorker、GrammarBuilding関連クラス、ObjectToken関連クラス、PhonemeConverter、RBListなど計100ファイル以上にnull許容性アノテーションを追加
  • プロジェクトファイル(System.Speech.csproj): NRT関連の設定を調整
  • 主に引数のnull許容性、戻り値のnull許容性、プロパティのnull許容性を明示化

パフォーマンスへの影響

影響なし(コンパイル時のアノテーション追加のため、ランタイムパフォーマンスへの影響なし)

関連Issue

#90400

その他

  • 広範な修正のため、複数回のレビューを経て改善が加えられています
  • Ref構造の変更により、既存の型チェック警告が有効化される可能性があり、ライブラリ利用者がコンパイル警告を受ける場合があります(警告はNRT関連の潜在的なnull参照リスクを示すもの)

目次