Detect generic recursion pattern in S.Linq.Parallel (#71802)
authorMichal Strehovský <MichalStrehovsky@users.noreply.github.com>
Fri, 8 Jul 2022 06:19:54 +0000 (15:19 +0900)
committerGitHub <noreply@github.com>
Fri, 8 Jul 2022 06:19:54 +0000 (15:19 +0900)
commitaf63ef1fdbdebfb77f1df8c5f3dcbf783ec38970
tree10541cf6d6e4ece50c724a2453747d2f0e5269e8
parent4a63cb28b69e1c48bccf592150be7ba297b67950
Detect generic recursion pattern in S.Linq.Parallel (#71802)

System.Linq.Parallel has multiple generic cycles in it. We probably hit them all in the System.Linq.Parallel.Tests assembly. We would be compiling the test forever (or until running out of memory) because we didn't detect one of them.

Add detection for the case where the recursion is entered through a generic interface virtual method call. The compiler terminates the infinite expansion after the user-specifiable cutoff point.

The test shows the pattern and the expected behavior.
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/LazyGenerics/GraphBuilder.cs
src/tests/nativeaot/SmokeTests/UnitTests/Generics.cs