Revert some changes which don't have proper dependencies.
[mono-project.git] / mono / tests / twopassvariance.il
blob1bc29f421b059d5db344e51daae97d4effc4e88b
1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
5 .assembly extern mscorlib { }
7 .assembly twopassvariance { }
9 .class Base { }
11 .class Derived extends Base { }
13 .class SuperDerived extends Derived { }
15 .class MegaSuperDerived extends SuperDerived { }
17 .class interface IFoo<-T>
19     .method public newslot virtual instance class [mscorlib]System.Type Gimme()
20     {
21         ldtoken class IFoo<!0>
22         call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
23         ret
24     }
27 .class interface IBar<T> implements class IFoo<!T>
29     .method public virtual final instance class [mscorlib]System.Type Gimme()
30     {
31         .override method instance class [mscorlib]System.Type class IFoo<!T>::Gimme()
32         ldtoken class IBar<!0>
33         call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
34         ret
35     }
38 .class interface IBaz<T> implements class IFoo<!T>
40     .method public virtual final instance class [mscorlib]System.Type Gimme()
41     {
42         .override method instance class [mscorlib]System.Type class IFoo<!T>::Gimme()
43         ldtoken class IBar<!0>
44         call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
45         ret
46     }
49 .class interface IQux implements class IFoo<class Base>, class IFoo<class Derived>
51     .method public virtual final instance class [mscorlib]System.Type Gimme()
52     {
53         .override method instance class [mscorlib]System.Type class IFoo<class Base>::Gimme()
54         ldtoken IQux
55         call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
56         ret
57     }
60 .class Fooer1
61     implements class IFoo<class Base>, class IFoo<class Derived>
63     .method public specialname rtspecialname instance void .ctor()
64     {
65         ldarg.0
66         call instance void [mscorlib]System.Object::.ctor()
67         ret
68     }
71 .class Fooer2
72     implements class IFoo<class Derived>, class IFoo<class Base>
74     .method public specialname rtspecialname instance void .ctor()
75     {
76         ldarg.0
77         call instance void [mscorlib]System.Object::.ctor()
78         ret
79     }
82 .class Fooer3
83     implements class IBaz<class Base>, class IBar<class Derived>, class IFoo<object>
85     .method public specialname rtspecialname instance void .ctor()
86     {
87         ldarg.0
88         call instance void [mscorlib]System.Object::.ctor()
89         ret
90     }
93 .class Fooer4
94     implements IQux, class IBar<class Derived>
96     .method public specialname rtspecialname instance void .ctor()
97     {
98         ldarg.0
99         call instance void [mscorlib]System.Object::.ctor()
100         ret
101     }
104 .class Fooer5
105     implements class IBar<class Derived>, IQux
107     .method public specialname rtspecialname instance void .ctor()
108     {
109         ldarg.0
110         call instance void [mscorlib]System.Object::.ctor()
111         ret
112     }
115 .class Fooer6
116     implements class IFoo<class Base>, class IBar<class Base>
118     .method public specialname rtspecialname instance void .ctor()
119     {
120         ldarg.0
121         call instance void [mscorlib]System.Object::.ctor()
122         ret
123     }
126 .class Fooer7
127     implements class IBar<class Base>, class IFoo<class Base>
129     .method public specialname rtspecialname instance void .ctor()
130     {
131         ldarg.0
132         call instance void [mscorlib]System.Object::.ctor()
133         ret
134     }
137 .class Fooer8<T>
138     implements class IFoo<class Base>, class IFoo<class Derived>
140     .method public specialname rtspecialname instance void .ctor()
141     {
142         ldarg.0
143         call instance void [mscorlib]System.Object::.ctor()
144         ret
145     }
148 .class Fooer9<T>
149     implements class IFoo<class Derived>, class IFoo<class Base>
151     .method public specialname rtspecialname instance void .ctor()
152     {
153         ldarg.0
154         call instance void [mscorlib]System.Object::.ctor()
155         ret
156     }
159 .method static int32 main()
161     .entrypoint
163     newobj instance void Fooer1::.ctor()
164     castclass class IFoo<class SuperDerived>
165     callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme()
166     dup
167     callvirt instance string [mscorlib]System.Object::ToString()
168     call void [mscorlib]System.Console::WriteLine(string)
169     ldtoken class IFoo<class Base>
170     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
171     ceq
172     brtrue Fooer1_IFoo_SuperDerivedOK
173     ldc.i4.1
174     ret
176 Fooer1_IFoo_SuperDerivedOK:
177     ldstr      "Fooer1_IFoo_SuperDerivedOK"
178     call       void [mscorlib]System.Console::WriteLine(string)
179     newobj instance void Fooer2::.ctor()
180     castclass class IFoo<class SuperDerived>
181     callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme()
182     dup
183     callvirt instance string [mscorlib]System.Object::ToString()
184     call void [mscorlib]System.Console::WriteLine(string)
185     ldtoken class IFoo<class Derived>
186     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
187     ceq
188     brtrue Fooer2_IFoo_SuperDerivedOK
189     ldc.i4.2
190     ret
192 Fooer2_IFoo_SuperDerivedOK:
193     ldstr      "Fooer2_IFoo_SuperDerivedOK"
194     call       void [mscorlib]System.Console::WriteLine(string)
195     newobj instance void Fooer3::.ctor()
196     castclass class IFoo<class Base>
197     callvirt instance class [mscorlib]System.Type class IFoo<class Base>::Gimme()
198     dup
199     callvirt instance string [mscorlib]System.Object::ToString()
200     call void [mscorlib]System.Console::WriteLine(string)
201     ldtoken class IBar<class Base>
202     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
203     ceq
204     brtrue Fooer3_IFoo_BaseOK
205     ldc.i4.3
206     ret
208 Fooer3_IFoo_BaseOK:
209     ldstr      "Fooer3_IFoo_BaseOK"
210     call       void [mscorlib]System.Console::WriteLine(string)
212     newobj instance void Fooer3::.ctor()
213     castclass class IFoo<class Derived>
214     callvirt instance class [mscorlib]System.Type class IFoo<class Derived>::Gimme()
215     dup
216     callvirt instance string [mscorlib]System.Object::ToString()
217     call void [mscorlib]System.Console::WriteLine(string)
218     ldtoken class IBar<class Derived>
219     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
220     ceq
221     brtrue Fooer3_IFoo_DerivedOK
222     ldc.i4.4
223     ret
225 Fooer3_IFoo_DerivedOK:
226     ldstr      "Fooer3_IFoo_DerivedOK"
227     call       void [mscorlib]System.Console::WriteLine(string)
228     newobj instance void Fooer3::.ctor()
229     castclass class IFoo<class SuperDerived>
230     callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme()
231     dup
232     callvirt instance string [mscorlib]System.Object::ToString()
233     call void [mscorlib]System.Console::WriteLine(string)
234     ldtoken class IBar<class Base>
235     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
236     ceq
237     brtrue Fooer3_IFoo_SuperDerivedOK
238     ldc.i4.5
239     ret
241 Fooer3_IFoo_SuperDerivedOK:
242     ldstr      "Fooer3_IFoo_SuperDerivedOK"
243     call       void [mscorlib]System.Console::WriteLine(string)
244     newobj instance void Fooer4::.ctor()
245     castclass class IFoo<class Base>
246     callvirt instance class [mscorlib]System.Type class IFoo<class Base>::Gimme()
247     dup
248     callvirt instance string [mscorlib]System.Object::ToString()
249     call void [mscorlib]System.Console::WriteLine(string)
250     ldtoken IQux
251     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
252     ceq
253     brtrue Fooer4_IFoo_BaseOK
254     ldc.i4.6
255     ret
257 Fooer4_IFoo_BaseOK:
258     ldstr      "Fooer4_IFoo_BaseOK"
259     call       void [mscorlib]System.Console::WriteLine(string)
260     newobj instance void Fooer4::.ctor()
261     castclass class IFoo<class Derived>
262     callvirt instance class [mscorlib]System.Type class IFoo<class Derived>::Gimme()
263     dup
264     callvirt instance string [mscorlib]System.Object::ToString()
265     call void [mscorlib]System.Console::WriteLine(string)
266     ldtoken class IBar<class Derived>
267     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
268     ceq
269     brtrue Fooer4_IFoo_DerivedOK
270     ldc.i4.7
271     ret
273 Fooer4_IFoo_DerivedOK:
274     ldstr      "Fooer4_IFoo_DerivedOK"
275     call       void [mscorlib]System.Console::WriteLine(string)
277     newobj instance void Fooer4::.ctor()
278     castclass class IFoo<class SuperDerived>
279     callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme()
280     dup
281     callvirt instance string [mscorlib]System.Object::ToString()
282     call void [mscorlib]System.Console::WriteLine(string)
283     ldtoken IQux
284     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
285     ceq
286     brtrue Fooer4_IFoo_SuperDerivedOK
287     ldc.i4.8
288     ret
290 Fooer4_IFoo_SuperDerivedOK:
291     ldstr      "Fooer4_IFoo_SuperDerivedOK"
292     call       void [mscorlib]System.Console::WriteLine(string)
293     newobj instance void Fooer5::.ctor()
294     castclass class IFoo<class SuperDerived>
295     callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme()
296     dup
297     callvirt instance string [mscorlib]System.Object::ToString()
298     call void [mscorlib]System.Console::WriteLine(string)
299     ldtoken class IBar<class Derived>
300     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
301     ceq
302     brtrue Fooer5_IFoo_SuperDerivedOK
303     ldc.i4 9
304     ret
306 Fooer5_IFoo_SuperDerivedOK:
307     ldstr      "Fooer5_IFoo_SuperDerivedOK"
308     call       void [mscorlib]System.Console::WriteLine(string)
309     newobj instance void Fooer6::.ctor()
310     castclass class IFoo<class Base>
311     callvirt instance class [mscorlib]System.Type class IFoo<class Base>::Gimme()
312     dup
313     callvirt instance string [mscorlib]System.Object::ToString()
314     call void [mscorlib]System.Console::WriteLine(string)
315     ldtoken class IBar<class Base>
316     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
317     ceq
318     brtrue Fooer6_IFoo_BaseOK
319     ldc.i4 10
320     ret
322 Fooer6_IFoo_BaseOK:
323     ldstr      "Fooer6_IFoo_BaseOK"
324     call       void [mscorlib]System.Console::WriteLine(string)
325     newobj instance void Fooer6::.ctor()
326     castclass class IFoo<class Derived>
327     callvirt instance class [mscorlib]System.Type class IFoo<class Derived>::Gimme()
328     dup
329     callvirt instance string [mscorlib]System.Object::ToString()
330     call void [mscorlib]System.Console::WriteLine(string)
331     ldtoken class IBar<class Base>
332     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
333     ceq
334     brtrue Fooer6_IFoo_DerivedOK
335     ldc.i4 11
336     ret
338 Fooer6_IFoo_DerivedOK:
339     ldstr      "Fooer6_IFoo_DerivedOK"
340     call       void [mscorlib]System.Console::WriteLine(string)
341     newobj instance void Fooer7::.ctor()
342     castclass class IFoo<class Base>
343     callvirt instance class [mscorlib]System.Type class IFoo<class Base>::Gimme()
344     dup
345     callvirt instance string [mscorlib]System.Object::ToString()
346     call void [mscorlib]System.Console::WriteLine(string)
347     ldtoken class IBar<class Base>
348     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
349     ceq
350     brtrue Fooer7_IFoo_BaseOK
351     ldc.i4 12
352     ret
354 Fooer7_IFoo_BaseOK:
355     ldstr      "Fooer7_IFoo_BaseOK"
356     call       void [mscorlib]System.Console::WriteLine(string)
357     newobj instance void Fooer7::.ctor()
358     castclass class IFoo<class Derived>
359     callvirt instance class [mscorlib]System.Type class IFoo<class Derived>::Gimme()
360     dup
361     callvirt instance string [mscorlib]System.Object::ToString()
362     call void [mscorlib]System.Console::WriteLine(string)
363     ldtoken class IBar<class Base>
364     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
365     ceq
366     brtrue Fooer7_IFoo_DerivedOK
367     ldc.i4 13
368     ret
370 Fooer7_IFoo_DerivedOK:
371     ldstr      "Fooer7_IFoo_DerivedOK"
372     call       void [mscorlib]System.Console::WriteLine(string)
373     newobj instance void class Fooer8<class Base>::.ctor()
374     castclass class IFoo<class SuperDerived>
375     callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme()
376     dup
377     callvirt instance string [mscorlib]System.Object::ToString()
378     call void [mscorlib]System.Console::WriteLine(string)
379     ldtoken class IFoo<class Base>
380     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
381     ceq
382     brtrue Fooer8_IFoo_SuperDerivedOK
383     ldc.i4.1
384     ret
386 Fooer8_IFoo_SuperDerivedOK:
387     ldstr      "Fooer8_IFoo_SuperDerivedOK"
388     call       void [mscorlib]System.Console::WriteLine(string)
389     newobj instance void class Fooer9<class Base>::.ctor()
390     castclass class IFoo<class SuperDerived>
391     callvirt instance class [mscorlib]System.Type class IFoo<class SuperDerived>::Gimme()
392     dup
393     callvirt instance string [mscorlib]System.Object::ToString()
394     call void [mscorlib]System.Console::WriteLine(string)
395     ldtoken class IFoo<class Derived>
396     call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
397     ceq
398     brtrue Fooer9_IFoo_SuperDerivedOK
399     ldc.i4.2
400     ret
402 Fooer9_IFoo_SuperDerivedOK:
403     ldstr      "Fooer9_IFoo_SuperDerivedOK"
404     call       void [mscorlib]System.Console::WriteLine(string)
405     ldc.i4 0
406     ret