2 Test tailcall-generic-cast-il.il.
5 Jay Krell (jaykrell@microsoft.com)
7 Copyright 2018 Microsoft
8 Licensed under the MIT license. See LICENSE file in the project root for full license information.
10 This derived from nearby tailcall-generic-cast-cs.cs.
13 .assembly extern mscorlib { }
15 .assembly 'tailcall-generic-cast-nocrash-il' { }
21 .method public instance void .ctor ( )
24 tail. call instance void [mscorlib]System.Object::.ctor ( )
31 .field private static int32 i
33 .method public static void
34 check (int64 stack1, int64 stack2) noinlining
50 ldstr "{0} tailcall failure"
52 box [mscorlib]System.Int32
53 call void [mscorlib]System.Console::WriteLine (string, object)
55 tail. call void [mscorlib]System.Environment::Exit (int32)
61 .method public static !!T
62 cast1<T> (object o, int32 counter, int64 stack) noinlining
64 .locals init (int32 V_0)
77 tail. call !!0 C::cast1<!!0> (object, int32, int64)
85 call void C::check (int64, int64)
91 .method public static class B
92 cast2 (object o, int32 counter, int64 stack) noinlining
94 .locals init (int32 V_0)
107 tail. call class B C::cast2 (object, int32, int64)
115 call void C::check (int64, int64)
120 tail. call !!0 C::cast1<class B> (object, int32, int64)
124 .method public static !!T
125 cast3<T> (object o, int32 counter, int64 stack) noinlining
127 .locals init (int32 V_0)
140 tail. call !!0 C::cast3<!!0> (object, int32, int64)
148 call void C::check (int64, int64)
153 tail. call !!0 C::cast1<!!0> (object, int32, int64)
157 .method public static class B[]
158 cast4 (object o, int32 counter, int64 stack) noinlining
160 .locals init (int32 V_0)
173 tail. call class B[] C::cast4 (object, int32, int64)
181 call void C::check (int64, int64)
186 tail. call !!0 C::cast1<class B[]> (object, int32, int64)
190 .method public static !!T[]
191 cast5<T> (object o, int32 counter, int64 stack) noinlining
193 .locals init (int32 V_0)
206 tail. call !!0[] C::cast5<!!0> (object, int32, int64)
214 call void C::check (int64, int64)
219 tail. call !!0 C::cast1<!!0[]> (object, int32, int64)
224 .class public D`1<T1>
226 .method public static void
227 check (int64 stack1, int64 stack2) noinlining
231 tail. call void C::check (int64, int64)
235 .method public static !!T
236 cast1<T> (object o, int32 counter, int64 stack) noinlining
238 .locals init (int32 V_0)
251 tail. call !!0 class D`1<!T1>::cast1<!!0> (object, int32, int64)
259 call void class D`1<!T1>::check (int64, int64)
265 .method public static class B
266 cast2 (object o, int32 counter, int64 stack) noinlining
268 .locals init (int32 V_0)
281 tail. call class B class D`1<!T1>::cast2 (object, int32, int64)
289 call void class D`1<!T1>::check (int64, int64)
294 tail. call !!0 class D`1<!T1>::cast1<class B> (object, int32, int64)
298 .method public static !!T
299 cast3<T> (object o, int32 counter, int64 stack) noinlining
301 .locals init (int32 V_0)
314 tail. call !!0 class D`1<!T1>::cast3<!!0> (object, int32, int64)
322 call void class D`1<!T1>::check (int64, int64)
327 tail. call !!0 class D`1<!T1>::cast1<!!0> (object, int32, int64)
331 .method public static class B[]
332 cast4 (object o, int32 counter, int64 stack) noinlining
334 .locals init (int32 V_0)
347 tail. call class B[] class D`1<!T1>::cast4 (object, int32, int64)
355 call void class D`1<!T1>::check (int64, int64)
360 tail. call !!0 class D`1<!T1>::cast1<class B[]> (object, int32, int64)
364 .method public static !!T[]
365 cast5<T> (object o, int32 counter, int64 stack) noinlining
367 .locals init (int32 V_0)
380 tail. call !!0[] class D`1<!T1>::cast5<!!0> (object, int32, int64)
388 call void class D`1<!T1>::check (int64, int64)
393 tail. call !!0 class D`1<!T1>::cast1<!!0[]> (object, int32, int64)
397 .method public static !T1
398 cast6 (object o, int32 counter, int64 stack) noinlining
400 .locals init (int32 V_0)
413 tail. call !0 class D`1<!T1>::cast6 (object, int32, int64)
421 call void class D`1<!T1>::check (int64, int64)
426 tail. call !!0 class D`1<!T1>::cast1<!0> (object, int32, int64)
430 .method public static !T1
431 cast7<T> (object o, int32 counter, int64 stack) noinlining
433 .locals init (int32 V_0)
446 tail. call !0 class D`1<!T1>::cast7<!!0> (object, int32, int64)
454 call void class D`1<!T1>::check (int64, int64)
459 tail. call !!0 class D`1<!T1>::cast1<!0> (object, int32, int64)
463 .method public static !T1[]
464 cast8 (object o, int32 counter, int64 stack) noinlining
466 .locals init (int32 V_0)
479 tail. call !0[] class D`1<!T1>::cast8 (object, int32, int64)
487 call void class D`1<!T1>::check (int64, int64)
492 tail. call !!0 class D`1<!T1>::cast3<!0[]> (object, int32, int64)
496 .method public static !T1[]
497 cast9<T> (object o, int32 counter, int64 stack) noinlining
499 .locals init (int32 V_0)
512 tail. call !0[] class D`1<!T1>::cast9<!!0> (object, int32, int64)
520 call void class D`1<!T1>::check (int64, int64)
525 tail. call !!0 class D`1<!T1>::cast3<!0[]> (object, int32, int64)
530 instance void .ctor ( )
533 tail. call instance void [mscorlib]System.Object::.ctor ( )
540 .field private static int32 i
542 .method private static void
543 print (object o) noinlining
552 .method public static void
553 Main (string[] args) noinlining
557 newobj instance void B::.ctor ( )
561 call class B C::cast2 (object, int32, int64)
562 call void E::print (object)
564 newobj instance void B::.ctor ( )
568 call !!0 C::cast3<class B> (object, int32, int64)
569 call void E::print (object)
576 call !!0 C::cast3<class B[]> (object, int32, int64)
577 call void E::print (object)
584 call class B[] C::cast4 (object, int32, int64)
585 call void E::print (object)
592 call !!0[] C::cast5<class B> (object, int32, int64)
593 call void E::print (object)
595 newobj instance void B::.ctor ( )
599 call class B class D`1<class A>::cast2 (object, int32, int64)
600 call void E::print (object)
602 newobj instance void B::.ctor ( )
606 call !!0 class D`1<class A>::cast3<class B> (object, int32, int64)
607 call void E::print (object)
614 call !!0 class D`1<class A>::cast3<class B[]> (object, int32, int64)
615 call void E::print (object)
622 call class B[] class D`1<class A>::cast4 (object, int32, int64)
623 call void E::print (object)
630 call !!0[] class D`1<class A>::cast5<class B> (object, int32, int64)
631 call void E::print (object)
633 newobj instance void B::.ctor ( )
637 call !0 class D`1<class B>::cast6 (object, int32, int64)
638 call void E::print (object)
640 newobj instance void B::.ctor ( )
644 call !0 class D`1<class B>::cast7<class A> (object, int32, int64)
645 call void E::print (object)
652 call !0 class D`1<class B[]>::cast7<class A[]> (object, int32, int64)
653 call void E::print (object)
660 call !0[] class D`1<class B>::cast8 (object, int32, int64)
661 call void E::print (object)
669 call !0[] class D`1<class B>::cast9<class A> (object, int32, int64)
670 tail. call void E::print (object)