Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / tests / gsharing-valuetype-layout.il
1 .assembly extern mscorlib
2 {
3   .ver 4:0:0:0
4   .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
5 }
6 .assembly 'gsharing-valuetype-layout'
7 {
8   .hash algorithm 0x00008004
9   .ver  0:0:0:0
10 }
11 .module 'gsharing-valuetype-layout.exe'
12
13
14 .namespace TestMonoAsyncGenerics
15 {
16         .class private auto ansi beforefieldinit TestMonoAsyncGenerics extends [mscorlib]System.Object
17         {
18
19         .field public static int32 ldfld_res
20
21         .method public static hidebysig  default class [mscorlib]System.Threading.Tasks.Task`1<!!METHOD_ARG> AsyncWithAwait<METHOD_ARG> (int32 a)  cil managed 
22         {
23                 .maxstack 2
24                 .locals init (
25                         valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!!METHOD_ARG> V_0,
26                         valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!!METHOD_ARG> V_1)
27                 ldloca.s 0
28                 ldarg.0 
29                 stfld int32 valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!!0>::special_field  
30                 ldloca.s 0
31                 call valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!0> valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!!METHOD_ARG>::Create()
32                 stfld valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!0> valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!!0>::'<>t__builder'
33                 ldloca.s 0
34                 ldc.i4.m1 
35                 stfld int32 valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!!0>::'<>1__state'
36                 ldloca.s 0
37                 ldfld valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!0> valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!!0>::'<>t__builder'
38                 stloc.1 
39                 ldloca.s 1
40                 ldloca.s 0
41                 call instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!!METHOD_ARG>::Start<valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!!0>> ([out] !!0&)
42                 ldloca.s 0
43                 ldflda valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!0> valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!!0>::'<>t__builder'
44                 call instance class [mscorlib]System.Threading.Tasks.Task`1<!0> valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!!METHOD_ARG>::get_Task()
45                 ret 
46         }
47
48         .method private static hidebysig default int32 Main (string[] args) cil managed 
49         {
50                 .entrypoint
51                 .maxstack 8
52                 ldc.i4.s 0x30
53                 call class [mscorlib]System.Threading.Tasks.Task`1<!!0> class TestMonoAsyncGenerics.TestMonoAsyncGenerics::AsyncWithAwait<object> (int32)
54                 pop
55
56                 ldsfld int32 TestMonoAsyncGenerics.TestMonoAsyncGenerics::ldfld_res
57                 ldc.i4.s 0x30
58                 ceq
59                 ldc.i4.1
60                 sub
61                 ret
62         }
63
64         .method public hidebysig specialname rtspecialname instance default void '.ctor' ()  cil managed 
65         {
66                 .maxstack 8
67                 ldarg.0 
68                 call instance void object::'.ctor'()
69                 ret 
70         }
71
72         .class nested private auto ansi sealed beforefieldinit '<AsyncWithAwait>d__0`1'<TYPE_ARG> extends [mscorlib]System.ValueType
73                 implements [mscorlib]System.Runtime.CompilerServices.IAsyncStateMachine  {
74
75                 .field  public  int32 '<>1__state'
76                 .field  public  valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!0> '<>t__builder'
77
78                 //we store/load from this field from very different contexts and thus triggering the runtime codepath that gives them
79                 //different runtime layouts.
80                 .field  public  int32 special_field
81                 .field  private  valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter '<>u__$awaiter1'
82                 .field  private  object '<>t__stack'
83
84                 .method private final virtual hidebysig newslot instance default void MoveNext ()  cil managed 
85                 {
86                         .override class [mscorlib]System.Runtime.CompilerServices.IAsyncStateMachine::MoveNext
87                         .maxstack 3
88                         .locals init (
89                                 bool V_0,
90                                 !TYPE_ARG V_1,
91                                 class [mscorlib]System.Exception V_2,
92                                 int32 V_3,
93                                 valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter V_4,
94                                 valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter V_5,
95                                 !TYPE_ARG V_6)
96                         .try {
97                                 ldc.i4.1 
98                                 stloc.0 
99                                 ldarg.0 
100                                 ldfld int32 valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::'<>1__state'
101                                 stloc.3 
102                                 ldloc.3 
103                                 ldc.i4.0 
104                                 beq.s LABEL_1
105
106                                 ldstr "AsyncWithAwait {0}"
107                                 ldarg.0 
108                                 ldfld int32 valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::special_field
109                                 dup
110                                 stsfld int32 TestMonoAsyncGenerics.TestMonoAsyncGenerics::ldfld_res
111                                 box [mscorlib]System.Int32
112                                 call void class [mscorlib]System.Console::WriteLine(string, object)
113                                 ldc.i4.s 0x64
114                                 call class [mscorlib]System.Threading.Tasks.Task class [mscorlib]System.Threading.Tasks.Task::Delay(int32)
115                                 callvirt instance valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter class [mscorlib]System.Threading.Tasks.Task::GetAwaiter()
116                                 stloc.s 4
117                                 ldloca.s 4
118                                 call instance bool valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter::get_IsCompleted()
119                                 brtrue.s LABEL_2
120
121                                 ldarg.0 
122                                 ldc.i4.0 
123                                 stfld int32 valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::'<>1__state'
124                                 ldarg.0 
125                                 ldloc.s 4
126                                 stfld valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::'<>u__$awaiter1'
127                                 ldarg.0 
128                                 ldflda valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!0> valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::'<>t__builder'
129                                 ldloca.s 4
130                                 ldarg.0 
131                                 call instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!TYPE_ARG>::AwaitUnsafeOnCompleted<valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter, valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>> ([out] !!0&, [out] !!1&)
132                                 ldc.i4.0 
133                                 stloc.0 
134                                 leave.s LABEL_3
135 LABEL_1:
136                                 ldarg.0 
137                                 ldfld valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::'<>u__$awaiter1'
138                                 stloc.s 4
139                                 ldarg.0 
140                                 ldloca.s 5
141                                 initobj [mscorlib]System.Runtime.CompilerServices.TaskAwaiter
142                                 ldloc.s 5
143                                 stfld valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::'<>u__$awaiter1'
144                                 ldarg.0 
145                                 ldc.i4.m1 
146                                 stfld int32 valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::'<>1__state'
147 LABEL_2:
148                                 ldloca.s 4
149                                 call instance void valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter::GetResult()
150                                 ldloca.s 4
151                                 initobj [mscorlib]System.Runtime.CompilerServices.TaskAwaiter
152                                 ldloca.s 6
153                                 initobj !0
154                                 ldloc.s 6
155                                 stloc.1 
156                                 leave.s LABEL_3
157                         }
158                         catch class [mscorlib]System.Exception {
159                                 stloc.2 
160                                 ldarg.0 
161                                 ldc.i4.s 0xfffffffe
162                                 stfld int32 valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::'<>1__state'
163                                 ldarg.0 
164                                 ldflda valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!0> valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::'<>t__builder'
165                                 ldloc.2 
166                                 call instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!TYPE_ARG>::SetException(class [mscorlib]System.Exception)
167                                 leave.s LABEL_3
168                         }
169                         ldarg.0 
170                         ldc.i4.s 0xfffffffe
171                         stfld int32 valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::'<>1__state'
172                         ldarg.0 
173                         ldflda valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!0> valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::'<>t__builder'
174                         ldloc.1 
175                         call instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!TYPE_ARG>::SetResult(!0)
176 LABEL_3:
177                         ret
178                 }
179
180                 .method private final virtual hidebysig newslot instance default void SetStateMachine (class [mscorlib]System.Runtime.CompilerServices.IAsyncStateMachine param0)  cil managed 
181                 {
182                         .override class [mscorlib]System.Runtime.CompilerServices.IAsyncStateMachine::SetStateMachine
183                         .maxstack 8
184                         ldarg.0 
185                         ldflda valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!0> valuetype TestMonoAsyncGenerics.TestMonoAsyncGenerics/'<AsyncWithAwait>d__0`1'<!0>::'<>t__builder'
186                         ldarg.1 
187                         call instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<!TYPE_ARG>::SetStateMachine(class [mscorlib]System.Runtime.CompilerServices.IAsyncStateMachine)
188                         ret
189                 }
190                 }
191         }
192 }