Description
In #73055 I've encountered a very strange bug: an assert that should definitely not be failing, was failing.
The tests were failing with Encountered infinite recursion while looking up resource 'Word_At' in System.Private.CoreLib.
:
The callstack was quite long, but it showed that failure was starting from WidenAsciiToUtf16_Vector256
method:
at System.Diagnostics.Debug.Fail(System.String, System.String)
at System.Text.ASCIIUtility.WidenAsciiToUtf16_Vector256(Byte*, Char*, UIntPtr)
at System.Text.ASCIIUtility.WidenAsciiToUtf16(Byte*, Char*, UIntPtr)
This method had 3 debug asserts:
runtime/src/libraries/System.Private.CoreLib/src/System/Text/ASCIIUtility.cs
Lines 1753 to 1757 in 20a2f23
And the only place where it was called from had exactly the same guards:
runtime/src/libraries/System.Private.CoreLib/src/System/Text/ASCIIUtility.cs
Lines 1581 to 1584 in 20a2f23
Based on suggestions from @stephentoub I've narrowed it down to Debug.Assert(Vector256.IsHardwareAccelerated);
assert and R2R (when I disable R2R, the failures are gone).
To repro the bug please checkout specific commit from my fork, as I want to remove this particular assert to make progress with the PR itself:
git clone https://github.com/adamsitnik/runtime.git --branch WidenAsciiToUtf16 repro
cd repro
git reset --hard 20a2f2313c34d2c48052336167895f66916e9cb5
.\build.cmd -c Checked -subset clr+libs+libs.tests
.\dotnet.cmd build .\src\libraries\System.Text.Encoding\tests\System.Text.Encoding.Tests.csproj /p:Configuration=Checked /t:Test