Skip to content

Conversation

github-actions[bot]
Copy link
Contributor

@github-actions github-actions bot commented Aug 5, 2025

Backport of #118355 to release/9.0-staging

/cc @lewing @pavelsavara

Customer Impact

Fixes incorrect AOT codegen on Wasm that could lead to memory corruption and hard to isolate failures.

  • Customer reported
  • Found internally

[Select one or both of the boxes. Describe how this issue impacts customers, citing the expected and actual behaviors and scope of the issue. If customer-reported, provide the issue number.]

Regression

  • Yes
  • No

[If yes, specify when the regression was introduced. Provide the PR or commit if known.]

This case regressed in 9.0 development.

Testing

  • Automated test System.Buffers.Text.Tests.Base64ValidationUnitTests.ValidateWithOnlyCharsToBeIgnoredChars
  • manual testing in chrome dev tools debugger

Risk

Medium - AOT codegen is complex but the change impacts WASM AOT only, and only in the case of an empty struct, the previous codegen is known to be incorrect.

Copy link
Contributor

Tagging subscribers to 'arch-wasm': @lewing
See info in area-owners.md if you want to be subscribed.

@pavelsavara
Copy link
Member

/azp run runtime-wasm

Copy link

Azure Pipelines could not run because the pipeline triggers exclude this branch/path.

@pavelsavara pavelsavara added the Servicing-consider Issue for next servicing release review label Aug 20, 2025
@pavelsavara pavelsavara requested a review from lewing August 20, 2025 16:09
@rbhanda rbhanda added this to the 9.0.10 milestone Aug 21, 2025
@rbhanda rbhanda added Servicing-approved Approved for servicing release and removed Servicing-consider Issue for next servicing release review labels Aug 21, 2025
@pavelsavara
Copy link
Member

The fix worked
image

System.Text.RegularExpressions.Tests failure is known #117557
DiagnosticMethodInfoTests.Create_StackFrame is #117165
NaN in System.Tests.HalfTests is #103347
There are also some infra failures.

Log

[20:51:53] info: Starting:    System.Runtime.Intrinsics.Tests.dll
[20:51:55] info: [FAIL] System.Runtime.Intrinsics.Wasm.Tests.PackedSimdTests.ComparisonWithNaNTest
[20:51:55] info: Assert.Equal() Failure: Values differ
[20:51:55] info: Expected: -Infinity
[20:51:55] info: Actual:   1
[20:51:55] info:    at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
[20:51:55] info: [FAIL] System.Runtime.Intrinsics.Wasm.Tests.PackedSimdTests.ComparisonOperationsTest
[20:51:55] info: Assert.Equal() Failure: Values differ
[20:51:55] info: Expected: <1, 2, 2, 1>
[20:51:55] info: Actual:   <4, 3, 3, 4>
[20:51:55] info:    at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
[20:51:55] info: [FAIL] System.Runtime.Intrinsics.Wasm.Tests.PackedSimdTests.MinMaxSignedUnsignedTest
[20:51:55] info: Assert.Equal() Failure: Values differ
[20:51:55] info: Expected: -1
[20:51:55] info: Actual:   0
[20:51:55] info:    at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)

I don't know about packed SIMD, @lewing does it ring any bell ?

@pavelsavara
Copy link
Member

/ba-g known CI issues for Net9

@pavelsavara pavelsavara merged commit 76ece90 into release/9.0-staging Aug 24, 2025
35 of 48 checks passed
@jkotas jkotas deleted the backport/pr-118355-to-release/9.0-staging branch August 28, 2025 21:06
@github-actions github-actions bot locked and limited conversation to collaborators Sep 28, 2025
@pavelsavara
Copy link
Member

Validation

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices.JavaScript;
using System.Threading.Tasks;
using System.Text;
using System.Buffers.Text;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;


class Program
{
    public static void Main()
    {
        Test(new string('\u0009', 1));
        Test(new string('\u0009', 3));
        Test(new string('\u000A', 1));
        Test(new string('\u000A', 3));
        Test(new string('\u000D', 1));
        Test(new string('\u000D', 3));
        Test(new string(' ', 1));
        Test(new string(' ', 3));
    }

    [MethodImpl(MethodImplOptions.NoInlining)]
    public static void Test(string utf8WithByteToBeIgnored){
        ReadOnlySpan<char> utf8BytesWithByteToBeIgnored = utf8WithByteToBeIgnored.AsSpan();
        bool isValid2 = Base64.IsValid(utf8BytesWithByteToBeIgnored, out int decodedLength);
        Console.WriteLine($"IsValid2: {isValid2}, DecodedLength: {decodedLength}");
    }
}
<Project Sdk="Microsoft.NET.Sdk.WebAssembly">
  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    <RunAOTCompilation>true</RunAOTCompilation>
    <WasmNativeDebugSymbols>true</WasmNativeDebugSymbols>
    <WasmNativeStrip>false</WasmNativeStrip>
  </PropertyGroup>
</Project>

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasm WebAssembly architecture area-Codegen-AOT-mono os-browser Browser variant of arch-wasm Servicing-approved Approved for servicing release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants