Skip to content

AccessViolationException or InvalidOperationException thrown in local method with .NET 8 preview 7 nightly #88842

Closed
@martincostello

Description

@martincostello

Description

To check some fresh changes in the aspnetcore repo for Request Delegate Generator with interceptors, @captainsafia asked me to do some tests with the preview 7 nightlies.

In the course of that testing I updated a codebase that is working correctly .NET 7 and with 8.0.100-preview.6.23330.14 to version 8.0.100-preview.7.23363.2 of the SDK.

When pushing the changes to GitHub Actions CI, there's some weird failures happening only Linux. There's some code that's alternating between either failing with an AccessViolationException and crashing the test process, or throwing InvalidOperationException and making the HTTP server "go a bit weird".

The code for the method where the exceptions are coming from can be found here (don't judge it too harshly 😄).

Reproduction Steps

  1. Clone martincostello/adventofcode@51f7c63 on Linux
  2. Run build.ps1

Expected behavior

The application is successfully compiled and all the tests pass.

Actual behavior

Either an AccessViolationException is thrown and the test process crashes:

The active test run was aborted. Reason: Test host process crashed : Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
   at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22.<Reboot>g__Reboot|8_1(System.Collections.Generic.List`1<System.ValueTuple`2<Cuboid,Boolean>>)
   at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22.Reboot(System.Collections.Generic.IList`1<System.String>, Boolean)
   at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22+<SolveCoreAsync>d__9.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[MartinCostello.AdventOfCode.Puzzles.Y2021.Day22+<SolveCoreAsync>d__9, AdventOfCode, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<SolveCoreAsync>d__9 ByRef)
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Start[[MartinCostello.AdventOfCode.Puzzles.Y2021.Day22+<SolveCoreAsync>d__9, AdventOfCode, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<SolveCoreAsync>d__9 ByRef)
   at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22.SolveCoreAsync(System.String[], System.Threading.CancellationToken)
   at MartinCostello.AdventOfCode.Puzzle+<SolveAsync>d__18.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[MartinCostello.AdventOfCode.Puzzle+<SolveAsync>d__18, AdventOfCode, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<SolveAsync>d__18 ByRef)
   at MartinCostello.AdventOfCode.Puzzles.PuzzleTest+<SolvePuzzleAsync>d__8`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[MartinCostello.AdventOfCode.Puzzles.PuzzleTest+<SolvePuzzleAsync>d__8`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AdventOfCode.Tests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<SolvePuzzleAsync>d__8`1<System.__Canon> ByRef)
   at MartinCostello.AdventOfCode.Puzzles.PuzzleTest.SolvePuzzleAsync[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.String[])
   at MartinCostello.AdventOfCode.Puzzles.PuzzleTest+<SolvePuzzleAsync>d__7`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[MartinCostello.AdventOfCode.Puzzles.PuzzleTest+<SolvePuzzleAsync>d__7`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AdventOfCode.Tests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<SolvePuzzleAsync>d__7`1<System.__Canon> ByRef)
   at MartinCostello.AdventOfCode.Puzzles.PuzzleTest.SolvePuzzleAsync[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]()
   at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22Tests+<Y2021_Day22_Solve_Returns_Correct_Solution>d__4.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[MartinCostello.AdventOfCode.Puzzles.Y2021.Day22Tests+<Y2021_Day22_Solve_Returns_Correct_Solution>d__4, AdventOfCode.Tests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<Y2021_Day22_Solve_Returns_Correct_Solution>d__4 ByRef)
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[[MartinCostello.AdventOfCode.Puzzles.Y2021.Day22Tests+<Y2021_Day22_Solve_Returns_Correct_Solution>d__4, AdventOfCode.Tests, Version=8.0.0.0, Culture=neutral, PublicKeyToken=9a192a7522c9e1a0]](<Y2021_Day22_Solve_Returns_Correct_Solution>d__4 ByRef)
   at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22Tests.Y2021_Day22_Solve_Returns_Correct_Solution()
   at System.RuntimeMethodHandle.InvokeMethod(System.Object, Void**, System.Signature, Boolean)
   at System.Reflection.MethodInvoker.Invoke(System.Object, IntPtr*, System.Reflection.BindingFlags)
   at System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
   at Xunit.Sdk.TestInvoker`1+<>c__DisplayClass48_0+<<InvokeTestMethodAsync>b__1>d[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.TestInvoker`1+<>c__DisplayClass48_0+<<InvokeTestMethodAsync>b__1>d[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], xunit.execution.dotnet, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<<InvokeTestMethodAsync>b__1>d<System.__Canon> ByRef)
   at Xunit.Sdk.TestInvoker`1+<>c__DisplayClass48_0[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<InvokeTestMethodAsync>b__1()
   at Xunit.Sdk.ExecutionTimer+<AggregateAsync>d__4.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.ExecutionTimer+<AggregateAsync>d__4, xunit.execution.dotnet, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<AggregateAsync>d__4 ByRef)
   at Xunit.Sdk.ExceptionAggregator+<RunAsync>d__9.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.ExceptionAggregator+<RunAsync>d__9, xunit.core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<RunAsync>d__9 ByRef)
   at Xunit.Sdk.TestInvoker`1+<InvokeTestMethodAsync>d__48[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.TestInvoker`1+<InvokeTestMethodAsync>d__48[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], xunit.execution.dotnet, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<InvokeTestMethodAsync>d__48<System.__Canon> ByRef)
   at Xunit.Sdk.TestInvoker`1+<<RunAsync>b__47_0>d[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.TestInvoker`1+<<RunAsync>b__47_0>d[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], xunit.execution.dotnet, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<<RunAsync>b__47_0>d<System.__Canon> ByRef)
   at Xunit.Sdk.TestInvoker`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<RunAsync>b__47_0()
   at Xunit.Sdk.ExceptionAggregator+<RunAsync>d__10`1[[System.Decimal, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.ExceptionAggregator+<RunAsync>d__10`1[[System.Decimal, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], xunit.core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<RunAsync>d__10`1<System.Decimal> ByRef)
   at Xunit.Sdk.XunitTestRunner+<InvokeTestAsync>d__4.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Xunit.Sdk.XunitTestRunner+<InvokeTestAsync>d__4, xunit.execution.dotnet, Version=2.5.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c]](<InvokeTestAsync>d__4 ByRef)
   at Xunit.Sdk.ExceptionAggregator+<RunAsync>d__10`1[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()

Or an InvalidOperationException is thrown from some tests and then the HTTP server stops responding:

 System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
    at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22.<Reboot>g__Reboot|8_1(List`1 cuboids) in /_/src/AdventOfCode/Puzzles/Y2021/Day22.cs:line 74
    at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22.Reboot(IList`1 instructions, Boolean initialize) in /_/src/AdventOfCode/Puzzles/Y2021/Day22.cs:line 46
    at MartinCostello.AdventOfCode.Puzzles.Y2021.Day22.SolveCoreAsync(String[] args, CancellationToken cancellationToken) in /_/src/AdventOfCode/Puzzles/Y2021/Day22.cs:line 146
    at MartinCostello.AdventOfCode.Puzzle.SolveAsync(String[] args, CancellationToken cancellationToken) in /_/src/AdventOfCode/Puzzle.cs:line 57
    at MartinCostello.AdventOfCode.Site.PuzzlesApi.SolvePuzzleAsync(Int32 year, Int32 day, HttpRequest request, IFormFile resource, PuzzleFactory factory, ILogger`1 logger, CancellationToken cancellationToken) in /_/src/AdventOfCode.Site/PuzzlesApi.cs:line 117

Regression?

Yes - the same code works in .NET 7 and .NET 8 preview 6.

Known Workarounds

Set DOTNET_JitEnablePhysicalPromotion=0.

#88842 (comment)

Configuration

.NET SDK 8.0.100-preview.7.23363.2

Other information

No response

Edit: Turns out the "weird server" bits aren't new, I just hadn't spotted them before.

Metadata

Metadata

Assignees

Labels

area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions