Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/linker.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Strehovský <MichalStrehovsky@users.noreply.github.com>2022-08-17 18:58:46 +0300
committerGitHub <noreply@github.com>2022-08-17 18:58:46 +0300
commitc42e3cb42f354b13cd0414d0a4a1729146042583 (patch)
tree8abc94737c257d7ba4408b046c17325ed210a273
parent6252a2194dd32911db2c0669fc818555687d5570 (diff)
Add test for dotnet/runtime#73048 (#2977)
Running dataflow analysis on the added test takes about 20 seconds. Double the number of `yield returns` and it will take several minutes. In the runtime repo we're running into this on https://github.com/dotnet/runtime/blob/main/src/libraries/System.Runtime.Serialization.Formatters/tests/BinaryFormatterTestData.cs (method `SerializableObjects()`). That one has even more `yield returns` and I lost patience waiting for it to finish.
-rw-r--r--test/Mono.Linker.Tests.Cases/DataFlow/CompilerGeneratedCodeDataflow.cs109
1 files changed, 109 insertions, 0 deletions
diff --git a/test/Mono.Linker.Tests.Cases/DataFlow/CompilerGeneratedCodeDataflow.cs b/test/Mono.Linker.Tests.Cases/DataFlow/CompilerGeneratedCodeDataflow.cs
index abed4646c..53032ae72 100644
--- a/test/Mono.Linker.Tests.Cases/DataFlow/CompilerGeneratedCodeDataflow.cs
+++ b/test/Mono.Linker.Tests.Cases/DataFlow/CompilerGeneratedCodeDataflow.cs
@@ -93,6 +93,113 @@ namespace Mono.Linker.Tests.Cases.DataFlow
}
}
+ [ExpectedWarning ("IL2072", nameof (GetWithPublicMethods), nameof (DataFlowTypeExtensions.RequiresAll), CompilerGeneratedCode = true)]
+ static IEnumerable<object[]> 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 @@ namespace Mono.Linker.Tests.Cases.DataFlow
FlowParameterAcrossYieldReturn ();
FlowUnannotatedParameterAcrossYieldReturn ();
FlowAcrossYieldReturnWithBackwardsBranch ();
+
+ foreach (var o in ReturnManyObjects ());
}
}