Skip to content

Commit c42e3cb

Browse files
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.
1 parent 6252a21 commit c42e3cb

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

test/Mono.Linker.Tests.Cases/DataFlow/CompilerGeneratedCodeDataflow.cs

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,113 @@ static IEnumerable<int> FlowAcrossYieldReturnWithBackwardsBranch (int n = 0)
9393
}
9494
}
9595

96+
[ExpectedWarning ("IL2072", nameof (GetWithPublicMethods), nameof (DataFlowTypeExtensions.RequiresAll), CompilerGeneratedCode = true)]
97+
static IEnumerable<object[]> ReturnManyObjects ()
98+
{
99+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
100+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
101+
Type t = GetWithPublicMethods ();
102+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
103+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
104+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
105+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
106+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
107+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
108+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
109+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
110+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
111+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
112+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
113+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
114+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
115+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
116+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
117+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
118+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
119+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
120+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
121+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
122+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
123+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
124+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
125+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
126+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
127+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
128+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
129+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
130+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
131+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
132+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
133+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
134+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
135+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
136+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
137+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
138+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
139+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
140+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
141+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
142+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
143+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
144+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
145+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
146+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
147+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
148+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
149+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
150+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
151+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
152+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
153+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
154+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
155+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
156+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
157+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
158+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
159+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
160+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
161+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
162+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
163+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
164+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
165+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
166+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
167+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
168+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
169+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
170+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
171+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
172+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
173+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
174+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
175+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
176+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
177+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
178+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
179+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
180+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
181+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
182+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
183+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
184+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
185+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
186+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
187+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
188+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
189+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
190+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
191+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
192+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
193+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
194+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
195+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
196+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
197+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
198+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
199+
yield return new object[] { 1, 2, new object[] { 1, 2 }, new object[] { 1, 2 } };
200+
t.RequiresAll ();
201+
}
202+
96203
public static void Test ()
97204
{
98205
FlowAcrossYieldReturn ().GetEnumerator ().MoveNext (); // Has to call MoveNext otherwise AOT will actually remove it
@@ -103,6 +210,8 @@ public static void Test ()
103210
FlowParameterAcrossYieldReturn ();
104211
FlowUnannotatedParameterAcrossYieldReturn ();
105212
FlowAcrossYieldReturnWithBackwardsBranch ();
213+
214+
foreach (var o in ReturnManyObjects ());
106215
}
107216
}
108217

0 commit comments

Comments
 (0)