diff --git a/test/Mono.Linker.Tests.Cases/DataFlow/CompilerGeneratedCodeDataflow.cs b/test/Mono.Linker.Tests.Cases/DataFlow/CompilerGeneratedCodeDataflow.cs index abed4646c595..53032ae723e4 100644 --- a/test/Mono.Linker.Tests.Cases/DataFlow/CompilerGeneratedCodeDataflow.cs +++ b/test/Mono.Linker.Tests.Cases/DataFlow/CompilerGeneratedCodeDataflow.cs @@ -93,6 +93,113 @@ static IEnumerable FlowAcrossYieldReturnWithBackwardsBranch (int n = 0) } } + [ExpectedWarning ("IL2072", nameof (GetWithPublicMethods), nameof (DataFlowTypeExtensions.RequiresAll), CompilerGeneratedCode = true)] + static IEnumerable ReturnManyObjects () + { + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + Type t = GetWithPublicMethods (); + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } }; + t.RequiresAll (); + } + public static void Test () { FlowAcrossYieldReturn ().GetEnumerator ().MoveNext (); // Has to call MoveNext otherwise AOT will actually remove it @@ -103,6 +210,8 @@ public static void Test () FlowParameterAcrossYieldReturn (); FlowUnannotatedParameterAcrossYieldReturn (); FlowAcrossYieldReturnWithBackwardsBranch (); + + foreach (var o in ReturnManyObjects ()); } }