[threads] Don't ignore abort requests in abort protected blocks
[mono.git] / mono / tests / verifier / make_tests.sh
1 #! /bin/sh
2
3 # Stack Size Tests
4 for OP in 'starg.s 0'
5 do
6   ./make_stack_0_test.sh invalid "$OP"
7 done
8
9 for OP in 'stloc.0' 'stloc.s 0' 'stfld int32 Class::fld' pop ret
10 do
11   ./make_stack_0_test.sh invalid "$OP"
12 done
13
14 for OP in add and 'box [mscorlib]System.Int32' 'brfalse branch_target' ceq cgt clt conv.i4 conv.r8 div dup 'ldfld int32 Class::fld' 'ldflda int32 Class::fld' mul not or rem shl shr sub xor
15 do
16   ./make_stack_0_pop_test.sh "$OP"
17 done
18
19 for OP in add and ceq cgt clt div dup mul or rem shl shr sub xor 'stfld int32 Class::fld'
20 do
21   ./make_stack_1_pop_test.sh "$OP" int32
22 done
23
24 # Table 2: Binary Numeric Operators
25 I=1
26 for OP in add div mul rem sub
27 do
28   if [ "$OP" = "div" ] || [ "$OP" = "rem" ]; then
29         INIT="yes";
30   else
31         INIT="no";
32   fi
33         
34   ./make_bin_test.sh bin_num_op_32_${I} valid $OP int32 int32 "ldc.i4.1" "${INIT}"
35   ./make_bin_test.sh bin_num_op_33_${I} valid $OP int32 'native int' "ldc.i4.1" "${INIT}"
36   ./make_bin_test.sh bin_num_op_34_${I} valid $OP int64 int64 "ldc.i8 1" "${INIT}"
37   ./make_bin_test.sh bin_num_op_35_${I} valid $OP 'native int' int32 "ldc.i4.1" "${INIT}"
38   ./make_bin_test.sh bin_num_op_36_${I} valid $OP 'native int' 'native int' "ldc.i4.1" "${INIT}"
39   ./make_bin_test.sh bin_num_op_37_${I} valid $OP float64 float64 "ldc.r8 0" "${INIT}"
40   ./make_bin_test.sh bin_num_op_38_${I} valid $OP float32 float64 "ldc.r8 0" "${INIT}"
41   ./make_bin_test.sh bin_num_op_39_${I} valid $OP float64 float32 "ldc.r4 0" "${INIT}"
42   ./make_bin_test.sh bin_num_op_40_${I} valid $OP float32 float32 "ldc.r4 0" "${INIT}"
43   
44   ./make_bin_test.sh bin_num_op_1_${I} unverifiable $OP int32 int64 "ldc.i8 1" "${INIT}"
45   ./make_bin_test.sh bin_num_op_2_${I} unverifiable $OP int32 float64 "ldc.r8 0" "${INIT}"
46   ./make_bin_test.sh bin_num_op_3_${I} unverifiable $OP int32 object "ldnull" "${INIT}"
47
48   ./make_bin_test.sh bin_num_op_4_${I} unverifiable $OP int64 int32 "ldc.i4.1" "${INIT}"
49   ./make_bin_test.sh bin_num_op_5_${I} unverifiable $OP int64 'native int' "ldc.i4.1" "${INIT}"
50   ./make_bin_test.sh bin_num_op_6_${I} unverifiable $OP int64 float64 "ldc.r8 0" "${INIT}"
51   ./make_bin_test.sh bin_num_op_7_${I} unverifiable $OP int64 'int64&' "ldnull" "${INIT}"
52   ./make_bin_test.sh bin_num_op_8_${I} unverifiable $OP int64 object "ldnull" "${INIT}"
53
54   ./make_bin_test.sh bin_num_op_9_${I} unverifiable $OP 'native int' int64 "ldc.i8 1" "${INIT}"
55   ./make_bin_test.sh bin_num_op_10_${I} unverifiable $OP 'native int' float64 "ldc.r8 0" "${INIT}"
56   ./make_bin_test.sh bin_num_op_11_${I} unverifiable $OP 'native int' object "ldnull" "${INIT}"
57
58   ./make_bin_test.sh bin_num_op_12_${I} unverifiable $OP float64 int32 "ldc.i4.1" "${INIT}"
59   ./make_bin_test.sh bin_num_op_13_${I} unverifiable $OP float64 int64 "ldc.i8 1" "${INIT}"
60   ./make_bin_test.sh bin_num_op_14_${I} unverifiable $OP float64 'native int' "ldc.i4.1" "${INIT}"
61   ./make_bin_test.sh bin_num_op_15_${I} unverifiable $OP float64 'float64&' "ldnull" "${INIT}"
62   ./make_bin_test.sh bin_num_op_16_${I} unverifiable $OP float64 object "ldnull" "${INIT}"
63
64   ./make_bin_test.sh bin_num_op_17_${I} unverifiable $OP 'int64&' int64 "ldc.i8 1" "${INIT}"
65   ./make_bin_test.sh bin_num_op_18_${I} unverifiable $OP 'float64&' float64 "ldc.r8 0" "${INIT}"
66   ./make_bin_test.sh bin_num_op_19_${I} unverifiable $OP 'object&' object "ldnull" "${INIT}"
67
68   ./make_bin_test.sh bin_num_op_20_${I} unverifiable $OP object int32 "ldc.i4.1" "${INIT}"
69   ./make_bin_test.sh bin_num_op_21_${I} unverifiable $OP object int64 "ldc.i8 1" "${INIT}"
70   ./make_bin_test.sh bin_num_op_22_${I} unverifiable $OP object 'native int' "ldc.i4.1" "${INIT}"
71   ./make_bin_test.sh bin_num_op_23_${I} unverifiable $OP object float64 "ldc.r8 0" "${INIT}"
72   ./make_bin_test.sh bin_num_op_24_${I} unverifiable $OP object 'object&' "ldnull" "${INIT}"
73   ./make_bin_test.sh bin_num_op_25_${I} unverifiable $OP object object "ldnull" "${INIT}"
74   I=`expr $I + 1`
75 done
76
77 I=1
78 for OP in div mul rem sub
79 do
80   ./make_bin_test.sh bin_num_op_26_${I} unverifiable $OP int32 'int32&'
81   ./make_bin_test.sh bin_num_op_27_${I} unverifiable $OP 'native int' 'native int&'
82   I=`expr $I + 1`
83 done
84
85 for OP in add
86 do
87   ./make_bin_test.sh bin_num_op_26_${I} unverifiable $OP int32 'int32&'
88   ./make_bin_test.sh bin_num_op_27_${I} unverifiable $OP 'native int' 'native int&'
89   I=`expr $I + 1`
90 done
91
92 I=1
93 for OP in div mul rem
94 do
95   if [ "$OP" = "div" ] || [ "$OP" = "div" ]; then
96         INIT="yes";
97   else
98         INIT="no";
99   fi
100   ./make_bin_test.sh bin_num_op_28_${I} unverifiable $OP 'int32&' int32 "ldc.i4.1" "${INIT}"
101   ./make_bin_test.sh bin_num_op_29_${I} unverifiable $OP 'native int&' 'native int' "ldc.i4.1" "${INIT}"
102   I=`expr $I + 1`
103 done
104
105 for OP in add sub
106 do
107   ./make_bin_test.sh bin_num_op_28_${I} unverifiable $OP 'int32&' int32
108   ./make_bin_test.sh bin_num_op_29_${I} unverifiable $OP 'native int&' 'native int'
109   I=`expr $I + 1`
110 done
111
112 I=1
113 for OP in div mul rem add
114 do
115   if [ "$OP" = "div" ] || [ "$OP" = "div" ]; then
116         INIT="yes";
117   else
118         INIT="no";
119   fi
120   ./make_bin_test.sh bin_num_op_30_${I} unverifiable $OP 'int32&' 'int32&' "ldnull" "${INIT}"
121   I=`expr $I + 1`
122 done
123
124 for OP in sub
125 do
126   ./make_bin_test.sh bin_num_op_30_${I} unverifiable $OP 'int32&' 'int32&'
127   I=`expr $I + 1`
128 done
129
130 # Table 4: Binary Comparison or Branch Operations
131 I=1
132 for OP in ceq cgt clt
133 do
134   ./make_bin_test.sh bin_comp_op_1_${I} unverifiable $OP int32 int64
135   ./make_bin_test.sh bin_comp_op_2_${I} unverifiable $OP int32 float64
136   ./make_bin_test.sh bin_comp_op_3_${I} unverifiable $OP int32 'int32&'
137   ./make_bin_test.sh bin_comp_op_4_${I} unverifiable $OP int32 object
138
139   ./make_bin_test.sh bin_comp_op_5_${I} unverifiable $OP int64 int32
140   ./make_bin_test.sh bin_comp_op_6_${I} unverifiable $OP int64 'native int'
141   ./make_bin_test.sh bin_comp_op_7_${I} unverifiable $OP int64 float64
142   ./make_bin_test.sh bin_comp_op_8_${I} unverifiable $OP int64 'int64&'
143   ./make_bin_test.sh bin_comp_op_9_${I} unverifiable $OP int64 object
144
145   ./make_bin_test.sh bin_comp_op_10_${I} unverifiable $OP 'native int' int64
146   ./make_bin_test.sh bin_comp_op_11_${I} unverifiable $OP 'native int' float64
147   ./make_bin_test.sh bin_comp_op_12_${I} unverifiable $OP 'native int' object
148
149   ./make_bin_test.sh bin_comp_op_13_${I} unverifiable $OP float64 int32
150   ./make_bin_test.sh bin_comp_op_14_${I} unverifiable $OP float64 int64
151   ./make_bin_test.sh bin_comp_op_15_${I} unverifiable $OP float64 'native int'
152   ./make_bin_test.sh bin_comp_op_16_${I} unverifiable $OP float64 'float64&'
153   ./make_bin_test.sh bin_comp_op_17_${I} unverifiable $OP float64 object
154
155   ./make_bin_test.sh bin_comp_op_18_${I} unverifiable $OP 'int32&' int32
156   ./make_bin_test.sh bin_comp_op_19_${I} unverifiable $OP 'int64&' int64
157   ./make_bin_test.sh bin_comp_op_20_${I} unverifiable $OP 'float64&' float64
158   ./make_bin_test.sh bin_comp_op_21_${I} unverifiable $OP 'object&' object
159
160   ./make_bin_test.sh bin_comp_op_22_${I} unverifiable $OP object int32
161   ./make_bin_test.sh bin_comp_op_23_${I} unverifiable $OP object int64
162   ./make_bin_test.sh bin_comp_op_24_${I} unverifiable $OP object 'native int'
163   ./make_bin_test.sh bin_comp_op_25_${I} unverifiable $OP object float64
164   ./make_bin_test.sh bin_comp_op_26_${I} unverifiable $OP object 'object&'
165   I=`expr $I + 1`
166 done
167
168 I=1
169 for OP in cgt clt
170 do
171   ./make_bin_test.sh bin_comp_op_27_${I} unverifiable $OP 'native int' 'native int&'
172   ./make_bin_test.sh bin_comp_op_28_${I} unverifiable $OP 'native int&' 'native int'
173   ./make_bin_test.sh bin_comp_op_29_${I} unverifiable $OP object object
174   I=`expr $I + 1`
175 done
176
177 #tests for the difference between cgt.un and others
178 I=1
179 for TYPE in string object
180 do
181         ./make_bin_test.sh bin_cgt_un_a_${I} valid 'cgt.un' "${TYPE}" 'object'
182         ./make_bin_test.sh bin_cgt_un_b_${I} valid 'cgt.un' 'object' "${TYPE}"
183   I=`expr $I + 1`
184 done
185
186
187 for TYPE in int32 float32 int64 "int32&" "native int" 
188 do
189         ./make_bin_test.sh bin_cgt_un_a_${I} unverifiable 'cgt.un' "${TYPE}" 'object'
190         ./make_bin_test.sh bin_cgt_un_b_${I} unverifiable 'cgt.un' 'object' "${TYPE}"
191   I=`expr $I + 1`
192 done
193
194 for OP in ceq
195 do
196   ./make_bin_test.sh bin_comp_op_27_${I} unverifiable $OP 'native int' 'native int&'
197   ./make_bin_test.sh bin_comp_op_28_${I} unverifiable $OP 'native int&' 'native int'
198   I=`expr $I + 1`
199 done
200
201 # Table 5: Integer Operations
202 I=1
203 for OP in and or xor
204 do
205   ./make_bin_test.sh bin_int_op_1_${I} unverifiable "$OP" int32 int64
206   ./make_bin_test.sh bin_int_op_2_${I} unverifiable "$OP" int32 float64
207   ./make_bin_test.sh bin_int_op_3_${I} unverifiable "$OP" int32 'int32&'
208   ./make_bin_test.sh bin_int_op_4_${I} unverifiable "$OP" int32 object
209
210   ./make_bin_test.sh bin_int_op_5_${I} unverifiable "$OP" int64 int32
211   ./make_bin_test.sh bin_int_op_6_${I} unverifiable "$OP" int64 'native int'
212   ./make_bin_test.sh bin_int_op_7_${I} unverifiable "$OP" int64 float64
213   ./make_bin_test.sh bin_int_op_8_${I} unverifiable "$OP" int64 'int64&'
214   ./make_bin_test.sh bin_int_op_9_${I} unverifiable "$OP" int64 object
215
216   ./make_bin_test.sh bin_int_op_10_${I} unverifiable "$OP" 'native int' int64
217   ./make_bin_test.sh bin_int_op_11_${I} unverifiable "$OP" 'native int' float64
218   ./make_bin_test.sh bin_int_op_12_${I} unverifiable "$OP" 'native int' 'native int&'
219   ./make_bin_test.sh bin_int_op_13_${I} unverifiable "$OP" 'native int' object
220
221   ./make_bin_test.sh bin_int_op_14_${I} unverifiable "$OP" float64 int32
222   ./make_bin_test.sh bin_int_op_15_${I} unverifiable "$OP" float64 int64
223   ./make_bin_test.sh bin_int_op_16_${I} unverifiable "$OP" float64 'native int'
224   ./make_bin_test.sh bin_int_op_17_${I} unverifiable "$OP" float64 float64
225   ./make_bin_test.sh bin_int_op_18_${I} unverifiable "$OP" float64 'int32&'
226   ./make_bin_test.sh bin_int_op_19_${I} unverifiable "$OP" float64 object
227
228   ./make_bin_test.sh bin_int_op_20_${I} unverifiable "$OP" 'int32&' int32
229   ./make_bin_test.sh bin_int_op_21_${I} unverifiable "$OP" 'int64&' int64
230   ./make_bin_test.sh bin_int_op_22_${I} unverifiable "$OP" 'native int&' 'native int'
231   ./make_bin_test.sh bin_int_op_23_${I} unverifiable "$OP" 'float64&' float64
232   ./make_bin_test.sh bin_int_op_24_${I} unverifiable "$OP" 'int32&' 'int32&'
233   ./make_bin_test.sh bin_int_op_25_${I} unverifiable "$OP" 'float64&' object
234
235   ./make_bin_test.sh bin_int_op_26_${I} unverifiable "$OP" object int32
236   ./make_bin_test.sh bin_int_op_27_${I} unverifiable "$OP" object int64
237   ./make_bin_test.sh bin_int_op_28_${I} unverifiable "$OP" object 'native int'
238   ./make_bin_test.sh bin_int_op_29_${I} unverifiable "$OP" object float64
239   ./make_bin_test.sh bin_int_op_30_${I} unverifiable "$OP" object 'int32&'
240   ./make_bin_test.sh bin_int_op_31_${I} unverifiable "$OP" object object
241   I=`expr $I + 1`
242 done
243
244 I=1
245 for TYPE in bool int8 int16 char int32 int64 'native int' 'class Int8Enum'
246 do
247   ./make_unary_test.sh not_${I} valid "not\n\tpop" "$TYPE"
248   I=`expr $I + 1`
249 done
250
251 for TYPE in 'int32&' object "class MyStruct" typedref "method int32 *(int32)" 'class Template\`1<int32>' float32 float64
252 do
253   ./make_unary_test.sh not_${I} unverifiable "not\n\tpop" "$TYPE"
254   I=`expr $I + 1`
255 done
256
257 I=1
258 for TYPE in bool int8 int16 char int32 int64 'native int' 'class Int8Enum' float32 float64
259 do
260   ./make_unary_test.sh neg_${I} valid "neg\n\tpop" "$TYPE"
261   I=`expr $I + 1`
262 done
263
264 for TYPE in 'int32&' object "class MyStruct" typedref "method int32 *(int32)" 'class Template\`1<int32>'
265 do
266   ./make_unary_test.sh neg_${I} unverifiable "neg\n\tpop" "$TYPE"
267   I=`expr $I + 1`
268 done
269
270
271 # Table 6: Shift Operators
272 I=1
273 for OP in shl shr
274 do
275   ./make_bin_test.sh shift_op_1_${I} unverifiable $OP int32 int64
276   ./make_bin_test.sh shift_op_2_${I} unverifiable $OP int32 float64
277   ./make_bin_test.sh shift_op_3_${I} unverifiable $OP int32 'int32&'
278   ./make_bin_test.sh shift_op_4_${I} unverifiable $OP int32 object
279
280   ./make_bin_test.sh shift_op_5_${I} unverifiable $OP int64 int64
281   ./make_bin_test.sh shift_op_6_${I} unverifiable $OP int64 float64
282   ./make_bin_test.sh shift_op_7_${I} unverifiable $OP int64 'int32&'
283   ./make_bin_test.sh shift_op_8_${I} unverifiable $OP int64 object
284
285   ./make_bin_test.sh shift_op_9_${I} unverifiable $OP 'native int' int64
286   ./make_bin_test.sh shift_op_10_${I} unverifiable $OP 'native int' float64
287   ./make_bin_test.sh shift_op_11_${I} unverifiable $OP 'native int' 'native int&'
288   ./make_bin_test.sh shift_op_12_${I} unverifiable $OP 'native int' object
289
290   ./make_bin_test.sh shift_op_13_${I} unverifiable $OP float64 int32
291   ./make_bin_test.sh shift_op_14_${I} unverifiable $OP float64 int64
292   ./make_bin_test.sh shift_op_15_${I} unverifiable $OP float64 'native int'
293   ./make_bin_test.sh shift_op_16_${I} unverifiable $OP float64 float64
294   ./make_bin_test.sh shift_op_17_${I} unverifiable $OP float64 'int32&'
295   ./make_bin_test.sh shift_op_18_${I} unverifiable $OP float64 object
296
297   ./make_bin_test.sh shift_op_19_${I} unverifiable $OP 'int32&' int32
298   ./make_bin_test.sh shift_op_20_${I} unverifiable $OP 'int64&' int64
299   ./make_bin_test.sh shift_op_21_${I} unverifiable $OP 'native int&' 'native int'
300   ./make_bin_test.sh shift_op_22_${I} unverifiable $OP 'float64&' float64
301   ./make_bin_test.sh shift_op_23_${I} unverifiable $OP 'int32&' 'int32&'
302   ./make_bin_test.sh shift_op_24_${I} unverifiable $OP 'float64&' object
303
304   ./make_bin_test.sh shift_op_25_${I} unverifiable $OP object int32
305   ./make_bin_test.sh shift_op_26_${I} unverifiable $OP object int64
306   ./make_bin_test.sh shift_op_27_${I} unverifiable $OP object 'native int'
307   ./make_bin_test.sh shift_op_28_${I} unverifiable $OP object float64
308   ./make_bin_test.sh shift_op_29_${I} unverifiable $OP object 'int32&'
309   ./make_bin_test.sh shift_op_30_${I} unverifiable $OP object object
310   I=`expr $I + 1`
311 done
312
313 # Table 8: Conversion Operations
314 I=1
315 J=1
316 for OP in "conv.i1\n\tpop" "conv.i2\n\tpop" "conv.i4\n\tpop" "conv.i8\n\tpop" "conv.r4\n\tpop" "conv.r8\n\tpop" "conv.u1\n\tpop" "conv.u2\n\tpop" "conv.u4\n\tpop" "conv.u8\n\tpop" "conv.i\n\tpop" "conv.u\n\tpop" "conv.r.un\n\tpop" "conv.ovf.i1\n\tpop" "conv.ovf.i2\n\tpop" "conv.ovf.i4\n\tpop" "conv.ovf.i8\n\tpop" "conv.ovf.u1\n\tpop" "conv.ovf.u2\n\tpop" "conv.ovf.u4\n\tpop" "conv.ovf.u8\n\tpop" "conv.ovf.i\n\tpop"  "conv.ovf.u\n\tpop" "conv.ovf.i1.un\n\tpop" "conv.ovf.i2.un\n\tpop" "conv.ovf.i4.un\n\tpop" "conv.ovf.i8.un\n\tpop" "conv.ovf.u1.un\n\tpop" "conv.ovf.u2.un\n\tpop" "conv.ovf.u4.un\n\tpop" "conv.ovf.u8.un\n\tpop" "conv.ovf.i.un\n\tpop"  "conv.ovf.u.un\n\tpop" 
317 do
318   for TYPE in 'int8' 'bool' 'unsigned int8' 'int16' 'char' 'unsigned int16' 'int32' 'unsigned int32' 'int64' 'unsigned int64' 'float32' 'float64' 'native int' 'native unsigned int'
319   do
320     ./make_unary_test.sh conv_op_${J}_${I} valid $OP "$TYPE"
321     I=`expr $I + 1`
322   done
323
324   for TYPE in 'object' 'string' 'class Class' 'valuetype MyStruct' 'int32[]' 'int32[,]' 'typedref' 'int32*' 'method int32 *(int32)' 'class Template`1<object>' 'int8&' 'bool&' 'unsigned int8&' 'int16&' 'char&' 'unsigned int16&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&' 'native int&' 'native unsigned int&' 'object&' 'string&' 'class Class&' 'valuetype MyStruct&' 'int32[]&' 'int32[,]&' 'class Template`1<object>&'
325   do
326     ./make_unary_test.sh conv_op_${J}_${I} unverifiable $OP "$TYPE"
327     I=`expr $I + 1`
328   done
329
330   ./make_unary_test.sh conv_op_${J}_${I} invalid $OP "typedref&"
331   J=`expr $J + 1`
332   I=1
333 done
334
335
336
337 #local and argument store with invalid values lead to unverifiable code
338 I=1
339 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
340 do
341   ./make_store_test.sh coercion_1_${I} unverifiable "$OP" int8 int64
342   ./make_store_test.sh coercion_2_${I} unverifiable "$OP" int8 float64
343   ./make_store_test.sh coercion_3_${I} unverifiable "$OP" int8 'int8&'
344   ./make_store_test.sh coercion_4_${I} unverifiable "$OP" int8 object
345
346   ./make_store_test.sh coercion_5_${I} unverifiable "$OP" 'unsigned int8' int64
347   ./make_store_test.sh coercion_6_${I} unverifiable "$OP" 'unsigned int8' float64
348   ./make_store_test.sh coercion_7_${I} unverifiable "$OP" 'unsigned int8' 'unsigned int8&'
349   ./make_store_test.sh coercion_8_${I} unverifiable "$OP" 'unsigned int8' object
350
351   ./make_store_test.sh coercion_9_${I} unverifiable "$OP" bool int64
352   ./make_store_test.sh coercion_10_${I} unverifiable "$OP" bool float64
353   ./make_store_test.sh coercion_11_${I} unverifiable "$OP" bool 'bool&'
354   ./make_store_test.sh coercion_12_${I} unverifiable "$OP" bool object
355
356   ./make_store_test.sh coercion_13_${I} unverifiable "$OP" int16 int64
357   ./make_store_test.sh coercion_14_${I} unverifiable "$OP" int16 float64
358   ./make_store_test.sh coercion_15_${I} unverifiable "$OP" int16 'int16&'
359   ./make_store_test.sh coercion_16_${I} unverifiable "$OP" int16 object
360   
361   ./make_store_test.sh coercion_17_${I} unverifiable "$OP" 'unsigned int16' int64
362   ./make_store_test.sh coercion_18_${I} unverifiable "$OP" 'unsigned int16' float64
363   ./make_store_test.sh coercion_19_${I} unverifiable "$OP" 'unsigned int16' 'unsigned int16&'
364   ./make_store_test.sh coercion_20_${I} unverifiable "$OP" 'unsigned int16' object
365   
366   ./make_store_test.sh coercion_21_${I} unverifiable "$OP" char int64
367   ./make_store_test.sh coercion_22_${I} unverifiable "$OP" char float64
368   ./make_store_test.sh coercion_23_${I} unverifiable "$OP" char 'char&'
369   ./make_store_test.sh coercion_24_${I} unverifiable "$OP" char object
370   
371   ./make_store_test.sh coercion_25_${I} unverifiable "$OP" int32 int64
372   ./make_store_test.sh coercion_26_${I} unverifiable "$OP" int32 float64
373   ./make_store_test.sh coercion_27_${I} unverifiable "$OP" int32 'int32&'
374   ./make_store_test.sh coercion_28_${I} unverifiable "$OP" int32 object
375   
376   ./make_store_test.sh coercion_29_${I} unverifiable "$OP" 'unsigned int32' int64
377   ./make_store_test.sh coercion_30_${I} unverifiable "$OP" 'unsigned int32' float64
378   ./make_store_test.sh coercion_31_${I} unverifiable "$OP" 'unsigned int32' 'unsigned int32&'
379   ./make_store_test.sh coercion_32_${I} unverifiable "$OP" 'unsigned int32' object
380  
381   ./make_store_test.sh coercion_33_${I} unverifiable "$OP" int64 int32
382   ./make_store_test.sh coercion_34_${I} unverifiable "$OP" int64 'native int'
383   ./make_store_test.sh coercion_35_${I} unverifiable "$OP" int64 float64
384   ./make_store_test.sh coercion_36_${I} unverifiable "$OP" int64 'int64&'
385   ./make_store_test.sh coercion_37_${I} unverifiable "$OP" int64 object
386   
387   ./make_store_test.sh coercion_38_${I} unverifiable "$OP" 'unsigned int64' int32
388   ./make_store_test.sh coercion_39_${I} unverifiable "$OP" 'unsigned int64' 'native int'
389   ./make_store_test.sh coercion_40_${I} unverifiable "$OP" 'unsigned int64' float64
390   ./make_store_test.sh coercion_41_${I} unverifiable "$OP" 'unsigned int64' 'unsigned int64&'
391   ./make_store_test.sh coercion_42_${I} unverifiable "$OP" 'unsigned int64' object
392   
393   ./make_store_test.sh coercion_43_${I} unverifiable "$OP" 'native int' int64
394   ./make_store_test.sh coercion_44_${I} unverifiable "$OP" 'native int' float64
395   ./make_store_test.sh coercion_45_${I} unverifiable "$OP" 'native int' 'native int&'
396   ./make_store_test.sh coercion_46_${I} unverifiable "$OP" 'native int' object
397   
398   ./make_store_test.sh coercion_47_${I} unverifiable "$OP" 'native unsigned int' int64
399   ./make_store_test.sh coercion_48_${I} unverifiable "$OP" 'native unsigned int' float64
400   ./make_store_test.sh coercion_49_${I} unverifiable "$OP" 'native unsigned int' 'native unsigned int&'
401   ./make_store_test.sh coercion_50_${I} unverifiable "$OP" 'native unsigned int' object
402   
403   ./make_store_test.sh coercion_51_${I} unverifiable "$OP" float32 int32
404   ./make_store_test.sh coercion_52_${I} unverifiable "$OP" float32 'native int'
405   ./make_store_test.sh coercion_53_${I} unverifiable "$OP" float32 int64
406   ./make_store_test.sh coercion_54_${I} unverifiable "$OP" float32 'float32&'
407   ./make_store_test.sh coercion_55_${I} unverifiable "$OP" float32 object
408   
409   ./make_store_test.sh coercion_56_${I} unverifiable "$OP" float64 int32
410   ./make_store_test.sh coercion_57_${I} unverifiable "$OP" float64 'native int'
411   ./make_store_test.sh coercion_58_${I} unverifiable "$OP" float64 int64
412   ./make_store_test.sh coercion_59_${I} unverifiable "$OP" float64 'float64&'
413   ./make_store_test.sh coercion_60_${I} unverifiable "$OP" float64 object
414
415   ./make_store_test.sh coercion_61_${I} unverifiable "$OP" object int32
416   ./make_store_test.sh coercion_62_${I} unverifiable "$OP" object 'native int'
417   ./make_store_test.sh coercion_63_${I} unverifiable "$OP" object int64
418   ./make_store_test.sh coercion_64_${I} unverifiable "$OP" object float64
419   ./make_store_test.sh coercion_65_${I} unverifiable "$OP" object 'object&'
420   
421   ./make_store_test.sh coercion_66_${I} unverifiable "$OP" 'class ValueType' int32
422   ./make_store_test.sh coercion_67_${I} unverifiable "$OP" 'class ValueType' 'native int'
423   ./make_store_test.sh coercion_68_${I} unverifiable "$OP" 'class ValueType' int64
424   ./make_store_test.sh coercion_69_${I} unverifiable "$OP" 'class ValueType' float64
425   ./make_store_test.sh coercion_70_${I} unverifiable "$OP" 'class ValueType' 'class ValueType&'
426   ./make_store_test.sh coercion_71_${I} unverifiable "$OP" 'class ValueType' object
427   
428   ./make_store_test.sh coercion_72_${I} unverifiable "$OP" 'int32&' int32
429   ./make_store_test.sh coercion_73_${I} unverifiable "$OP" 'int32&' 'native int'
430   ./make_store_test.sh coercion_74_${I} unverifiable "$OP" 'int32&' int64
431   ./make_store_test.sh coercion_75_${I} unverifiable "$OP" 'int32&' float64
432   ./make_store_test.sh coercion_76_${I} unverifiable "$OP" 'int32&' object
433   
434   ./make_store_test.sh coercion_77_${I} unverifiable "$OP" typedref int32
435   ./make_store_test.sh coercion_78_${I} unverifiable "$OP" typedref 'native int'
436   ./make_store_test.sh coercion_89_${I} unverifiable "$OP" typedref int64
437   ./make_store_test.sh coercion_80_${I} unverifiable "$OP" typedref float64
438   ./make_store_test.sh coercion_81_${I} invalid "$OP" typedref 'typedref&'
439   ./make_store_test.sh coercion_82_${I} unverifiable "$OP" typedref object
440   I=`expr $I + 1`
441 done
442
443 #valid coersion between native int and int32
444 I=1
445 for OP in stloc.0 "starg 0" 
446 do
447         ./make_store_test.sh coercion_83_${I} valid "$OP" int32 "native int"
448         ./make_store_test.sh coercion_84_${I} valid "$OP" "native int" int32
449
450         ./make_store_test.sh coercion_85_${I} valid "$OP" "unsigned int32" "native int"
451         ./make_store_test.sh coercion_86_${I} valid "$OP" "native int" "unsigned int32"
452
453         ./make_store_test.sh coercion_87_${I} valid "$OP" int32 "native unsigned int"
454         ./make_store_test.sh coercion_88_${I} valid "$OP" "native unsigned int" int32
455
456         ./make_store_test.sh coercion_89_${I} valid "$OP" "unsigned int32" "native int"
457         ./make_store_test.sh coercion_90_${I} valid "$OP" "native unsigned int" "unsigned int32"
458
459         I=`expr $I + 1`
460 done
461
462 #test for unverifiable types
463
464 I=1
465 for OP in "stloc.0" "starg 0"
466 do
467   ./make_store_test.sh misc_types_store_1_${I} valid "$OP" typedref typedref
468   ./make_store_test.sh misc_types_store_2_${I} unverifiable "$OP" "int32*" "int32*"
469   ./make_store_test.sh misc_types_store_3_${I} unverifiable "$OP" "method int32 *(int32)" "method int32 *(int32)"
470
471   ./make_store_test.sh misc_types_store_4_${I} unverifiable "$OP" "method int32 *(int32)" "method void *(int32)"
472   ./make_store_test.sh misc_types_store_5_${I} unverifiable "$OP" "int32*" "int8*"
473   ./make_store_test.sh misc_types_store_6_${I} unverifiable "$OP" typedref "native int&"
474
475
476   ./make_store_test.sh managed_pointer_store_1_${I} valid "$OP" "int32&" "int32&"
477   ./make_store_test.sh managed_pointer_store_2_${I} valid "$OP" "int32&" "native int&"
478   ./make_store_test.sh managed_pointer_store_3_${I} valid "$OP" "int32&" "unsigned int32&"
479   ./make_store_test.sh managed_pointer_store_4_${I} valid "$OP" "native int&" "int32&"
480   ./make_store_test.sh managed_pointer_store_5_${I} unverifiable "$OP" "int32&" "int16&"
481
482   ./make_store_test.sh managed_pointer_store_6_${I} valid "$OP" "int8&" "unsigned int8&"
483   ./make_store_test.sh managed_pointer_store_7_${I} valid "$OP" "int8&" "bool&"
484   ./make_store_test.sh managed_pointer_store_8_${I} unverifiable "$OP" "int8&" "int16&"
485
486   ./make_store_test.sh managed_pointer_store_9_${I} valid "$OP" "int16&" "unsigned int16&"
487   ./make_store_test.sh managed_pointer_store_10_${I} valid "$OP" "int16&" "char&"
488   ./make_store_test.sh managed_pointer_store_11_${I} unverifiable "$OP" "int16&" "int32&"
489
490   ./make_store_test.sh managed_pointer_store_12_${I} unverifiable "$OP" "float32&" "float64&"
491   ./make_store_test.sh managed_pointer_store_13_${I} unverifiable "$OP" "float64&" "float32&"
492
493   I=`expr $I + 1`
494 done
495
496
497 function fix () {
498         if [ "$3" != "" ]; then
499                 A=$3;
500         elif [ "$2" != "" ]; then
501                 A=$2;
502         else
503                 A=$1;
504         fi
505
506         if [ "$A" = "bool&" ]; then
507                 A="int8&";
508         elif [ "$A" = "char&" ]; then
509                 A="int16&";
510         fi
511
512         echo "$A";
513 }
514
515 #Tests related to storing reference types on other reference types
516 I=1
517 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
518 do
519         for TYPE1 in 'native int&' 'native unsigned int&'
520         do
521                 for TYPE2 in 'int8&' 'unsigned int8&' 'bool&' 'int16&' 'unsigned int16&' 'char&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&' 'native int&' 'native unsigned int&'
522                 do
523                         TA="$(fix $TYPE1)"
524                         TB="$(fix $TYPE2)"
525                         if [ "$TA" = "$TB" ]; then
526                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
527                         elif [ "$TA" = "int32&" ] && [ "$TB" = "int&" ]; then
528                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
529                         elif [ "$TA" = "int&" ] && [ "$TB" = "int32&" ]; then
530                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
531                         else
532                                 ./make_store_test.sh ref_coercion_${I} unverifiable "$OP" "$TYPE1" "$TYPE2"
533                         fi
534                         I=`expr $I + 1`
535                 done
536         done
537 done
538
539 I=1
540 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
541 do
542         for TYPE1 in 'int8&' 'unsigned int8&' 'bool&' 'int16&' 'unsigned int16&' 'char&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&'
543         do
544                 for TYPE2 in 'int8&' 'unsigned int8&' 'bool&' 'int16&' 'unsigned int16&' 'char&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&'
545                 do
546                         TA="$(fix $TYPE1)"
547                         TB="$(fix $TYPE2)"
548                         if [ "$TA" = "$TB" ]; then
549                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
550                         else
551                                 ./make_store_test.sh ref_coercion_${I} unverifiable "$OP" "$TYPE1" "$TYPE2"
552                         fi
553                         I=`expr $I + 1`
554                 done
555         done
556 done
557
558 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
559 do
560         for TYPE1 in 'class ClassA&' 'class ClassB&' 'class InterfaceA&' 'class InterfaceB&' 'class ValueType&'
561         do
562                 for TYPE2 in 'class ClassA&' 'class ClassB&' 'class InterfaceA&' 'class InterfaceB&' 'class ValueType&'
563                 do
564                         if [ "$TYPE1" = "$TYPE2" ]; then
565                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
566                         else
567                                 ./make_store_test.sh ref_coercion_${I} unverifiable "$OP" "$TYPE1" "$TYPE2"
568                         fi
569                         I=`expr $I + 1`
570                 done
571         done
572 done
573
574 #Field store parameter compatibility leads to invalid code
575 #Calling method with different verification types on stack lead to invalid code
576 I=1
577 for OP in "stfld TYPE1 Class::fld" "stsfld TYPE1 Class::sfld\n\tpop"  "call void Class::Method(TYPE1)"
578 do
579   ./make_obj_store_test.sh obj_coercion_1_${I} unverifiable "$OP" int8 int64
580   ./make_obj_store_test.sh obj_coercion_2_${I} unverifiable "$OP" int8 float64
581   ./make_obj_store_test.sh obj_coercion_3_${I} unverifiable "$OP" int8 'int8&'
582   ./make_obj_store_test.sh obj_coercion_4_${I} unverifiable "$OP" int8 object
583
584   ./make_obj_store_test.sh obj_coercion_5_${I} unverifiable "$OP" 'unsigned int8' int64
585   ./make_obj_store_test.sh obj_coercion_6_${I} unverifiable "$OP" 'unsigned int8' float64
586   ./make_obj_store_test.sh obj_coercion_7_${I} unverifiable "$OP" 'unsigned int8' 'unsigned int8&'
587   ./make_obj_store_test.sh obj_coercion_8_${I} unverifiable "$OP" 'unsigned int8' object
588
589   ./make_obj_store_test.sh obj_coercion_9_${I} unverifiable "$OP" bool int64
590   ./make_obj_store_test.sh obj_coercion_10_${I} unverifiable "$OP" bool float64
591   ./make_obj_store_test.sh obj_coercion_11_${I} unverifiable "$OP" bool 'bool&'
592   ./make_obj_store_test.sh obj_coercion_12_${I} unverifiable "$OP" bool object
593
594   ./make_obj_store_test.sh obj_coercion_13_${I} unverifiable "$OP" int16 int64
595   ./make_obj_store_test.sh obj_coercion_14_${I} unverifiable "$OP" int16 float64
596   ./make_obj_store_test.sh obj_coercion_15_${I} unverifiable "$OP" int16 'int16&'
597   ./make_obj_store_test.sh obj_coercion_16_${I} unverifiable "$OP" int16 object
598   
599   ./make_obj_store_test.sh obj_coercion_17_${I} unverifiable "$OP" 'unsigned int16' int64
600   ./make_obj_store_test.sh obj_coercion_18_${I} unverifiable "$OP" 'unsigned int16' float64
601   ./make_obj_store_test.sh obj_coercion_19_${I} unverifiable "$OP" 'unsigned int16' 'unsigned int16&'
602   ./make_obj_store_test.sh obj_coercion_20_${I} unverifiable "$OP" 'unsigned int16' object
603   
604   ./make_obj_store_test.sh obj_coercion_21_${I} unverifiable "$OP" char int64
605   ./make_obj_store_test.sh obj_coercion_22_${I} unverifiable "$OP" char float64
606   ./make_obj_store_test.sh obj_coercion_23_${I} unverifiable "$OP" char 'char&'
607   ./make_obj_store_test.sh obj_coercion_24_${I} unverifiable "$OP" char object
608   
609   ./make_obj_store_test.sh obj_coercion_25_${I} unverifiable "$OP" int32 int64
610   ./make_obj_store_test.sh obj_coercion_26_${I} unverifiable "$OP" int32 float64
611   ./make_obj_store_test.sh obj_coercion_27_${I} unverifiable "$OP" int32 'int32&'
612   ./make_obj_store_test.sh obj_coercion_28_${I} unverifiable "$OP" int32 object
613   
614   ./make_obj_store_test.sh obj_coercion_29_${I} unverifiable "$OP" 'unsigned int32' int64
615   ./make_obj_store_test.sh obj_coercion_30_${I} unverifiable "$OP" 'unsigned int32' float64
616   ./make_obj_store_test.sh obj_coercion_31_${I} unverifiable "$OP" 'unsigned int32' 'unsigned int32&'
617   ./make_obj_store_test.sh obj_coercion_32_${I} unverifiable "$OP" 'unsigned int32' object
618  
619   ./make_obj_store_test.sh obj_coercion_33_${I} unverifiable "$OP" int64 int32
620   ./make_obj_store_test.sh obj_coercion_34_${I} unverifiable "$OP" int64 'native int'
621   ./make_obj_store_test.sh obj_coercion_35_${I} unverifiable "$OP" int64 float64
622   ./make_obj_store_test.sh obj_coercion_36_${I} unverifiable "$OP" int64 'int64&'
623   ./make_obj_store_test.sh obj_coercion_37_${I} unverifiable "$OP" int64 object
624   
625   ./make_obj_store_test.sh obj_coercion_38_${I} unverifiable "$OP" 'unsigned int64' int32
626   ./make_obj_store_test.sh obj_coercion_39_${I} unverifiable "$OP" 'unsigned int64' 'native int'
627   ./make_obj_store_test.sh obj_coercion_40_${I} unverifiable "$OP" 'unsigned int64' float64
628   ./make_obj_store_test.sh obj_coercion_41_${I} unverifiable "$OP" 'unsigned int64' 'unsigned int64&'
629   ./make_obj_store_test.sh obj_coercion_42_${I} unverifiable "$OP" 'unsigned int64' object
630   
631   ./make_obj_store_test.sh obj_coercion_43_${I} unverifiable "$OP" 'native int' int64
632   ./make_obj_store_test.sh obj_coercion_44_${I} unverifiable "$OP" 'native int' float64
633   ./make_obj_store_test.sh obj_coercion_45_${I} unverifiable "$OP" 'native int' 'native int&'
634   ./make_obj_store_test.sh obj_coercion_46_${I} unverifiable "$OP" 'native int' object
635   
636   ./make_obj_store_test.sh obj_coercion_47_${I} unverifiable "$OP" 'native unsigned int' int64
637   ./make_obj_store_test.sh obj_coercion_48_${I} unverifiable "$OP" 'native unsigned int' float64
638   ./make_obj_store_test.sh obj_coercion_49_${I} unverifiable "$OP" 'native unsigned int' 'native unsigned int&'
639   ./make_obj_store_test.sh obj_coercion_50_${I} unverifiable "$OP" 'native unsigned int' object
640   
641   ./make_obj_store_test.sh obj_coercion_51_${I} unverifiable "$OP" float32 int32
642   ./make_obj_store_test.sh obj_coercion_52_${I} unverifiable "$OP" float32 'native int'
643   ./make_obj_store_test.sh obj_coercion_53_${I} unverifiable "$OP" float32 int64
644   ./make_obj_store_test.sh obj_coercion_54_${I} unverifiable "$OP" float32 'float32&'
645   ./make_obj_store_test.sh obj_coercion_55_${I} unverifiable "$OP" float32 object
646   
647   ./make_obj_store_test.sh obj_coercion_56_${I} unverifiable "$OP" float64 int32
648   ./make_obj_store_test.sh obj_coercion_57_${I} unverifiable "$OP" float64 'native int'
649   ./make_obj_store_test.sh obj_coercion_58_${I} unverifiable "$OP" float64 int64
650   ./make_obj_store_test.sh obj_coercion_59_${I} unverifiable "$OP" float64 'float64&'
651   ./make_obj_store_test.sh obj_coercion_60_${I} unverifiable "$OP" float64 object
652
653   ./make_obj_store_test.sh obj_coercion_61_${I} unverifiable "$OP" object int32
654   ./make_obj_store_test.sh obj_coercion_62_${I} unverifiable "$OP" object 'native int'
655   ./make_obj_store_test.sh obj_coercion_63_${I} unverifiable "$OP" object int64
656   ./make_obj_store_test.sh obj_coercion_64_${I} unverifiable "$OP" object float64
657   ./make_obj_store_test.sh obj_coercion_65_${I} unverifiable "$OP" object 'object&'
658   
659   ./make_obj_store_test.sh obj_coercion_66_${I} unverifiable "$OP" 'class ValueType' int32
660   ./make_obj_store_test.sh obj_coercion_67_${I} unverifiable "$OP" 'class ValueType' 'native int'
661   ./make_obj_store_test.sh obj_coercion_68_${I} unverifiable "$OP" 'class ValueType' int64
662   ./make_obj_store_test.sh obj_coercion_69_${I} unverifiable "$OP" 'class ValueType' float64
663   ./make_obj_store_test.sh obj_coercion_70_${I} unverifiable "$OP" 'class ValueType' 'class ValueType&'
664   ./make_obj_store_test.sh obj_coercion_71_${I} unverifiable "$OP" 'class ValueType' object
665   
666   
667   #These tests don't test store error since one cannot have an 'int32&' field
668   #They should exist in the structural tests session
669   #./make_obj_store_test.sh obj_coercion_72_${I} invalid "$OP" 'int32&' int32
670   #./make_obj_store_test.sh obj_coercion_73_${I} invalid "$OP" 'int32&' 'native int'
671   #./make_obj_store_test.sh obj_coercion_74_${I} invalid "$OP" 'int32&' int64
672   #./make_obj_store_test.sh obj_coercion_75_${I} invalid "$OP" 'int32&' float64
673   #./make_obj_store_test.sh obj_coercion_76_${I} invalid "$OP" 'int32&' object
674   
675
676   ./make_obj_store_test.sh obj_coercion_83_${I} valid "$OP" int32 "native int"
677   ./make_obj_store_test.sh obj_coercion_84_${I} valid "$OP" "native int" int32
678  
679   ./make_obj_store_test.sh obj_coercion_85_${I} valid "$OP" "unsigned int32" "native int"
680   ./make_obj_store_test.sh obj_coercion_86_${I} valid "$OP" "native int" "unsigned int32"
681  
682   ./make_obj_store_test.sh obj_coercion_87_${I} valid "$OP" int32 "native unsigned int"
683   ./make_obj_store_test.sh obj_coercion_88_${I} valid "$OP" "native unsigned int" int32
684  
685   ./make_obj_store_test.sh obj_coercion_89_${I} valid "$OP" "unsigned int32" "native int"
686   ./make_obj_store_test.sh obj_coercion_90_${I} valid "$OP" "native unsigned int" "unsigned int32"
687   I=`expr $I + 1`
688 done
689
690 I=1
691 for OP in "call void Class::Method(TYPE1)"
692 do
693   ./make_obj_store_test.sh obj_coercion_77_${I} unverifiable "$OP" typedref int32 "no"
694   ./make_obj_store_test.sh obj_coercion_78_${I} unverifiable "$OP" typedref 'native int' "no"
695   ./make_obj_store_test.sh obj_coercion_79_${I} unverifiable "$OP" typedref int64 "no"
696   ./make_obj_store_test.sh obj_coercion_80_${I} unverifiable "$OP" typedref float64 "no"
697   ./make_obj_store_test.sh obj_coercion_82_${I} unverifiable "$OP" typedref object "no"
698   I=`expr $I + 1`
699 done
700
701 # 1.8.1.2.3 Verification type compatibility (Assignment compatibility)
702 I=1
703 for OP in stloc.0 "stloc.s 0" "starg.s 0"
704 do
705   # ClassB not subtype of ClassA.
706   ./make_store_test.sh assign_compat_1_${I} unverifiable "$OP" 'class ClassA' 'class ClassB'
707
708   # ClassA not interface type.
709   # FIXME: what was the purpoise of this test? on it's current for it is valid and not unverifiable
710   ./make_store_test.sh assign_compat_3_${I} valid "$OP" object 'class ClassA'
711   
712   # Implementation of InterfaceB does not require the implementation of InterfaceA
713   ./make_store_test.sh assign_compat_4_${I} unverifiable "$OP" 'class InterfaceA' 'class InterfaceB'
714
715   # Array/vector.
716   ./make_store_test.sh assign_compat_5_${I} unverifiable "$OP" 'string []' 'string[,]'
717
718   # Vector/array.
719   ./make_store_test.sh assign_compat_6_${I} unverifiable "$OP" 'string [,]' 'string[]'
720
721   # Arrays with different rank.
722   ./make_store_test.sh assign_compat_7_${I} unverifiable "$OP" 'string [,]' 'string[,,]'
723
724   # Method pointers with different return types.
725   ./make_store_test.sh assign_compat_8_${I} unverifiable "$OP" 'method int32 *(int32)' 'method float32 *(int32)'
726
727   # Method pointers with different parameters.
728   ./make_store_test.sh assign_compat_9_${I} unverifiable "$OP" 'method int32 *(float64)' 'method int32 *(int32)'
729
730   # Method pointers with different calling conventions.
731   ./make_store_test.sh assign_compat_10_${I} unverifiable "$OP" 'method vararg int32 *(int32)' 'method int32 *(int32)'
732
733   # Method pointers with different calling conventions. (2)
734   ./make_store_test.sh assign_compat_11_${I} unverifiable "$OP" 'method unmanaged fastcall int32 *(int32)' 'method int32 *(int32)'
735
736   # Method pointers with different calling conventions. (3)
737   ./make_store_test.sh assign_compat_12_${I} unverifiable "$OP" 'method unmanaged fastcall int32 *(int32)' 'method unmanaged stdcall int32 *(int32)'
738   I=`expr $I + 1`
739 done
740
741 for OP in "stfld TYPE1 Class::fld" "stsfld TYPE1 Class::sfld\n\tpop"  "call void Class::Method(TYPE1)"
742 do
743   # ClassB not subtype of ClassA.
744   ./make_obj_store_test.sh assign_compat_1_${I} unverifiable "$OP" 'class ClassA' 'class ClassB'
745
746   # object not subtype of ClassA.
747   ./make_obj_store_test.sh assign_compat_2_${I} unverifiable "$OP" 'class ClassA' 'object'
748
749   # ClassA not interface type.
750   #FIXME: this test is valid, you can store type ClassA in a object field
751   ./make_obj_store_test.sh assign_compat_3_${I} valid "$OP" object 'class ClassA'
752   
753   # Implementation of InterfaceB does not require the implementation of InterfaceA
754   ./make_obj_store_test.sh assign_compat_4_${I} unverifiable "$OP" 'class InterfaceA' 'class InterfaceB'
755
756   # Array/vector.
757   ./make_obj_store_test.sh assign_compat_5_${I} unverifiable "$OP" 'string []' 'string[,]'
758
759   # Vector/array.
760   ./make_obj_store_test.sh assign_compat_6_${I} unverifiable "$OP" 'string [,]' 'string[]'
761
762   # Arrays with different rank.
763   ./make_obj_store_test.sh assign_compat_7_${I} unverifiable "$OP" 'string [,]' 'string[,,]'
764
765   # Method pointers with different return types.
766   ./make_obj_store_test.sh assign_compat_8_${I} unverifiable "$OP" 'method int32 *(int32)' 'method float32 *(int32)'
767
768   # Method pointers with different parameters.
769   ./make_obj_store_test.sh assign_compat_9_${I} unverifiable "$OP" 'method int32 *(float64)' 'method int32 *(int32)'
770
771   # Method pointers with different calling conventions.
772   ./make_obj_store_test.sh assign_compat_10_${I} unverifiable "$OP" 'method vararg int32 *(int32)' 'method int32 *(int32)'
773   
774     # Method pointers with different calling conventions. (2)
775   ./make_obj_store_test.sh assign_compat_11_${I} unverifiable "$OP" 'method unmanaged fastcall int32 *(int32)' 'method int32 *(int32)'
776   
777     # Method pointers with different calling conventions. (3)
778   ./make_obj_store_test.sh assign_compat_12_${I} unverifiable "$OP" 'method unmanaged fastcall int32 *(int32)' 'method unmanaged stdcall int32 *(int32)'
779   
780   I=`expr $I + 1`
781 done
782
783 # 1.8.1.3 Merging stack states
784 I=1
785 for TYPE1 in int32 int64 'native int' float64 'valuetype ValueType' 'class Class' 'int8&' 'int16&' 'int32&' 'int64&' 'native int&' 'float32&' 'float64&' 'valuetype ValueType&' 'class Class&' 'method int32 *(int32)' 'method float32 *(int32)' 'method int32 *(float64)' 'method vararg int32 *(int32)'
786 do
787   for TYPE2 in int32 int64 'native int' float64 'valuetype ValueType' 'class Class' 'int8&' 'int16&' 'int32&' 'int64&' 'native int&' 'float32&' 'float64&' 'valuetype ValueType&' 'class Class&' 'method int32 *(int32)' 'method float32 *(int32)' 'method int32 *(float64)' 'method vararg int32 *(int32)'
788   do
789         ZZ=`echo $TYPE1 | grep "*";`
790         T1_PTR=$?
791         ZZ=`echo $TYPE2 | grep "*";`
792         T2_PTR=$?
793         
794     if [ $T1_PTR -eq 0 ] || [ $T2_PTR -eq 0 ]; then
795                 ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
796     elif [ "$TYPE1" = "$TYPE2" ]; then
797                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
798         elif [ "$TYPE1" = "int32" ] && [ "$TYPE2" = "native int" ]; then
799                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
800         elif [ "$TYPE1" = "native int" ] && [ "$TYPE2" = "int32" ]; then
801                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
802         elif [ "$TYPE1" = "int32&" ] && [ "$TYPE2" = "native int&" ]; then
803                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
804         elif [ "$TYPE1" = "native int&" ] && [ "$TYPE2" = "int32&" ]; then
805                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
806         else
807                 ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
808     fi
809         I=`expr $I + 1`
810   done
811 done
812
813 # Unverifiable array stack merges
814
815 # These are verifiable, the merged type is 'object' or 'Array'
816 #for TYPE1 in 'string []' 'string [,]' 'string [,,]' 
817 #do
818 #  for TYPE2 in 'string []' 'string [,]' 'string [,,]' 
819 #  do
820 #    if [ "$TYPE1" != "$TYPE2" ]; then
821 #       ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
822 #       I=`expr $I + 1`
823 #    fi
824 #  done
825 #done
826
827 # Exception block branch tests (see 3.15)
828 I=1
829 for OP in br "ldc.i4.0\n\tbrfalse"
830 do
831   ./make_exception_branch_test.sh in_try_${I} unverifiable "$OP branch_target1"
832   ./make_exception_branch_test.sh in_catch_${I} unverifiable "$OP branch_target2"
833   ./make_exception_branch_test.sh in_finally_${I} invalid "$OP branch_target3"
834   ./make_exception_branch_test.sh in_filter_${I} unverifiable "$OP branch_target4"
835   ./make_exception_branch_test.sh out_try_${I} unverifiable "" "$OP branch_target5"
836   ./make_exception_branch_test.sh out_catch_${I} unverifiable "" "" "$OP branch_target5"
837   ./make_exception_branch_test.sh out_finally_${I} unverifiable "" "" "" "$OP branch_target5"
838   ./make_exception_branch_test.sh out_filter_${I} unverifiable "" "" "" "" "$OP branch_target5"
839   I=`expr $I + 1`
840 done
841
842 for OP in "ldloc.0\n\tldloc.1\n\tbeq" "ldloc.0\n\tldloc.1\n\tbge"
843 do
844   ./make_exception_branch_test.sh in_try_${I} invalid "$OP branch_target1"
845   ./make_exception_branch_test.sh in_catch_${I} invalid "$OP branch_target2"
846   ./make_exception_branch_test.sh in_finally_${I} invalid "$OP branch_target3"
847   ./make_exception_branch_test.sh in_filter_${I} invalid "$OP branch_target4"
848   ./make_exception_branch_test.sh out_try_${I} invalid "" "$OP branch_target5"
849   ./make_exception_branch_test.sh out_catch_${I} invalid "" "" "$OP branch_target5"
850   ./make_exception_branch_test.sh out_finally_${I} unverifiable "" "" "" "$OP branch_target5"
851   ./make_exception_branch_test.sh out_filter_${I} unverifiable "" "" "" "" "$OP branch_target5"
852   I=`expr $I + 1`
853 done
854
855 ./make_exception_branch_test.sh ret_out_try unverifiable "" "ldc.i4.0\n\tret"
856 ./make_exception_branch_test.sh ret_out_catch unverifiable "" "" "ldc.i4.0\n\tret"
857 ./make_exception_branch_test.sh ret_out_finally unverifiable "" "" "" "ldc.i4.0\n\tret"
858 ./make_exception_branch_test.sh ret_out_filter unverifiable "" "" "" "" "ldc.i4.0\n\tret"
859
860
861 # Unary branch op type tests (see 3.17)
862
863 for OP in brfalse
864 do
865   ./make_unary_test.sh un_branch_op unverifiable "$OP branch_target" float64
866 done
867
868 # Ldloc.0 and Ldarg tests (see 3.38)
869
870 I=1
871 for OP in "ldarg.s 0" "ldarg.0"
872 do
873   ./make_unary_test.sh ld_no_slot_${I} unverifiable "pop\n\t$OP\n\tpop" int32
874   I=`expr $I + 1`
875 done
876
877 for OP in "ldloc.s 1" "ldloc.1" "ldloc 1"
878 do
879   ./make_unary_test.sh ld_no_slot_${I} invalid "pop\n\t$OP\n\tpop" int32
880   I=`expr $I + 1`
881 done
882
883 for OP in "ldarga.s 0" "ldloca.s 1"
884 do
885   ./make_unary_test.sh ld_no_slot_${I} invalid "pop\n\t$OP\n\tpop" int32
886   I=`expr $I + 1`
887 done
888
889 # Starg and Stloc tests (see 3.61)
890
891 I=1
892 for OP in "starg.s 0"
893 do
894   ./make_unary_test.sh st_no_slot_${I} unverifiable "$OP" int32
895   I=`expr $I + 1`
896 done
897
898 for OP in "stloc.s 1"
899 do
900   ./make_unary_test.sh st_no_slot_${I} invalid "$OP" int32
901   I=`expr $I + 1`
902 done
903
904 # Ldfld and Ldflda tests (see 4.10)
905
906 for OP in ldfld ldflda
907 do
908   ./make_unary_test.sh ${OP}_no_fld invalid "$OP int32 Class::invalid\n\tpop" "class Class"
909   ./make_unary_test.sh ${OP}_bad_obj unverifiable "$OP int32 Class::valid\n\tpop" object
910   ./make_unary_test.sh ${OP}_obj_int32 unverifiable "$OP int32 Class::valid\n\tpop" int32
911   ./make_unary_test.sh ${OP}_obj_int64 unverifiable "$OP int32 Class::valid\n\tpop" int64
912   ./make_unary_test.sh ${OP}_obj_float64 unverifiable "$OP int32 Class::valid\n\tpop" float64
913   ./make_unary_test.sh ${OP}_obj_native_int unverifiable "$OP int32 Class::valid\n\tpop" 'native int'
914 #overlapped checks must be done separatedly
915 #  ./make_unary_test.sh ${OP}_obj_ref_overlapped unverifiable "$OP object Overlapped::objVal\n\tpop" "class Overlapped"
916 #  ./make_unary_test.sh ${OP}_obj_overlapped_field_not_accessible unverifiable "$OP int32 Overlapped::publicIntVal\n\tpop" "class Overlapped"
917 done
918
919 #TODO: these tests are bogus, they need to be fixed
920 # Stfld tests (see 4.28)
921
922 ./make_unary_test.sh stfld_no_fld invalid "ldc.i4.0\n\tstfld int32 Class::invalid" "class Class"
923 ./make_unary_test.sh stfld_bad_obj unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" object
924 ./make_unary_test.sh stfld_obj_int32 unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" int32
925 ./make_unary_test.sh stfld_obj_int64 unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" int64
926 ./make_unary_test.sh stfld_obj_float64 unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" float64
927 ./make_unary_test.sh stfld_no_int invalid "stfld int32 Class::valid" "class Class"
928 ./make_unary_test.sh stfld_obj_native_int unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" 'native int'
929
930 # Box tests (see 4.1)
931
932 # Box non-existent type.
933 ./make_unary_test.sh box_bad_type unverifiable "box valuetype NonExistent\n\tpop" "valuetype NonExistent"
934
935 # Top of stack not assignment compatible with typeToc.
936 ./make_unary_test.sh box_not_compat unverifiable "box [mscorlib]System.Int32\n\tpop" float32
937
938 # Box byref type.
939 ./make_unary_test.sh box_byref invalid "box [mscorlib]System.Int32\&\n\tpop" 'int32&'
940
941 # Box byref-like type.
942 ./make_unary_test.sh box_byref_like unverifiable "box [mscorlib]System.TypedReference\n\tpop" typedref
943
944 #boxing between Int32 and IntPtr
945 ./make_unary_test.sh box_compat_1 valid "box [mscorlib]System.Int32\n\tpop" "native int"
946 ./make_unary_test.sh box_compat_2 valid "box [mscorlib]System.IntPtr\n\tpop" "int32"
947
948 #This is illegal since you cannot have a Void local variable, it should go into the structural tests part
949 # Box void type.
950 #./make_unary_test.sh box_void unverifiable "box [mscorlib]System.Void\n\tpop" "class [mscorlib]System.Void"
951
952
953
954
955
956 ./make_ret_test.sh ret_coercion_1 unverifiable int8 int64
957 ./make_ret_test.sh ret_coercion_2 unverifiable int8 float64
958 ./make_ret_test.sh ret_coercion_3 unverifiable int8 'int8&'
959 ./make_ret_test.sh ret_coercion_4 unverifiable int8 object
960
961 ./make_ret_test.sh ret_coercion_5 unverifiable 'unsigned int8' int64
962 ./make_ret_test.sh ret_coercion_6 unverifiable 'unsigned int8' float64
963 ./make_ret_test.sh ret_coercion_6 unverifiable 'unsigned int8' float64
964 ./make_ret_test.sh ret_coercion_6 unverifiable 'unsigned int8' float64
965 ./make_ret_test.sh ret_coercion_7 unverifiable 'unsigned int8' 'unsigned int8&'
966 ./make_ret_test.sh ret_coercion_8 unverifiable 'unsigned int8' object
967
968 ./make_ret_test.sh ret_coercion_9 unverifiable bool int64
969 ./make_ret_test.sh ret_coercion_10 unverifiable bool float64
970 ./make_ret_test.sh ret_coercion_11 unverifiable bool 'bool&'
971 ./make_ret_test.sh ret_coercion_12 unverifiable bool object
972
973 ./make_ret_test.sh ret_coercion_13 unverifiable int16 int64
974 ./make_ret_test.sh ret_coercion_14 unverifiable int16 float64
975 ./make_ret_test.sh ret_coercion_15 unverifiable int16 'int16&'
976 ./make_ret_test.sh ret_coercion_16 unverifiable int16 object
977   
978 ./make_ret_test.sh ret_coercion_17 unverifiable 'unsigned int16' int64
979 ./make_ret_test.sh ret_coercion_18 unverifiable 'unsigned int16' float64
980 ./make_ret_test.sh ret_coercion_19 unverifiable 'unsigned int16' 'unsigned int16&'
981 ./make_ret_test.sh ret_coercion_20 unverifiable 'unsigned int16' object
982   
983 ./make_ret_test.sh ret_coercion_21 unverifiable char int64
984 ./make_ret_test.sh ret_coercion_22 unverifiable char float64
985 ./make_ret_test.sh ret_coercion_23 unverifiable char 'char&'
986 ./make_ret_test.sh ret_coercion_24 unverifiable char object
987   
988 ./make_ret_test.sh ret_coercion_25 unverifiable int32 int64
989 ./make_ret_test.sh ret_coercion_26 unverifiable int32 float64
990 ./make_ret_test.sh ret_coercion_27 unverifiable int32 'int32&'
991 ./make_ret_test.sh ret_coercion_28 unverifiable int32 object
992   
993 ./make_ret_test.sh ret_coercion_29 unverifiable 'unsigned int32' int64
994 ./make_ret_test.sh ret_coercion_30 unverifiable 'unsigned int32' float64
995 ./make_ret_test.sh ret_coercion_31 unverifiable 'unsigned int32' 'unsigned int32&'
996 ./make_ret_test.sh ret_coercion_32 unverifiable 'unsigned int32' object
997  
998 ./make_ret_test.sh ret_coercion_33 unverifiable int64 int32
999 ./make_ret_test.sh ret_coercion_34 unverifiable int64 'native int'
1000 ./make_ret_test.sh ret_coercion_35 unverifiable int64 float64
1001 ./make_ret_test.sh ret_coercion_36 unverifiable int64 'int64&'
1002 ./make_ret_test.sh ret_coercion_37 unverifiable int64 object
1003   
1004 ./make_ret_test.sh ret_coercion_38 unverifiable 'unsigned int64' int32
1005 ./make_ret_test.sh ret_coercion_39 unverifiable 'unsigned int64' 'native int'
1006 ./make_ret_test.sh ret_coercion_40 unverifiable 'unsigned int64' float64
1007 ./make_ret_test.sh ret_coercion_41 unverifiable 'unsigned int64' 'unsigned int64&'
1008 ./make_ret_test.sh ret_coercion_42 unverifiable 'unsigned int64' object
1009   
1010 ./make_ret_test.sh ret_coercion_43 unverifiable 'native int' int64
1011 ./make_ret_test.sh ret_coercion_44 unverifiable 'native int' float64
1012 ./make_ret_test.sh ret_coercion_45 unverifiable 'native int' 'native int&'
1013 ./make_ret_test.sh ret_coercion_46 unverifiable 'native int' object
1014   
1015 ./make_ret_test.sh ret_coercion_47 unverifiable 'native unsigned int' int64
1016 ./make_ret_test.sh ret_coercion_48 unverifiable 'native unsigned int' float64
1017 ./make_ret_test.sh ret_coercion_49 unverifiable 'native unsigned int' 'native unsigned int&'
1018 ./make_ret_test.sh ret_coercion_50 unverifiable 'native unsigned int' object
1019   
1020 ./make_ret_test.sh ret_coercion_51 unverifiable float32 int32
1021 ./make_ret_test.sh ret_coercion_52 unverifiable float32 'native int'
1022 ./make_ret_test.sh ret_coercion_53 unverifiable float32 int64
1023 ./make_ret_test.sh ret_coercion_54 unverifiable float32 'float32&'
1024 ./make_ret_test.sh ret_coercion_55 unverifiable float32 object
1025   
1026 ./make_ret_test.sh ret_coercion_56 unverifiable float64 int32
1027 ./make_ret_test.sh ret_coercion_57 unverifiable float64 'native int'
1028 ./make_ret_test.sh ret_coercion_58 unverifiable float64 int64
1029 ./make_ret_test.sh ret_coercion_59 unverifiable float64 'float64&'
1030 ./make_ret_test.sh ret_coercion_60 unverifiable float64 object
1031
1032 ./make_ret_test.sh ret_coercion_61 unverifiable object int32
1033 ./make_ret_test.sh ret_coercion_62 unverifiable object 'native int'
1034 ./make_ret_test.sh ret_coercion_63 unverifiable object int64
1035 ./make_ret_test.sh ret_coercion_64 unverifiable object float64
1036 ./make_ret_test.sh ret_coercion_65 unverifiable object 'object&'
1037   
1038 ./make_ret_test.sh ret_coercion_66 unverifiable 'class MyValueType' int32
1039 ./make_ret_test.sh ret_coercion_67 unverifiable 'class MyValueType' 'native int'
1040 ./make_ret_test.sh ret_coercion_68 unverifiable 'class MyValueType' int64
1041 ./make_ret_test.sh ret_coercion_69 unverifiable 'class MyValueType' float64
1042 ./make_ret_test.sh ret_coercion_70 unverifiable 'class MyValueType' 'class MyValueType&'
1043 ./make_ret_test.sh ret_coercion_71 unverifiable 'class MyValueType' object
1044   
1045 ./make_ret_test.sh ret_coercion_72 unverifiable 'int32&' int32
1046 ./make_ret_test.sh ret_coercion_73 unverifiable 'int32&' 'native int'
1047 ./make_ret_test.sh ret_coercion_74 unverifiable 'int32&' int64
1048 ./make_ret_test.sh ret_coercion_75 unverifiable 'int32&' float64
1049 ./make_ret_test.sh ret_coercion_76 unverifiable 'int32&' object
1050   
1051 ./make_ret_test.sh ret_coercion_77 unverifiable typedref int32
1052 ./make_ret_test.sh ret_coercion_78 unverifiable typedref 'native int'
1053 ./make_ret_test.sh ret_coercion_79 unverifiable typedref int64
1054 ./make_ret_test.sh ret_coercion_80 unverifiable typedref float64
1055 ./make_ret_test.sh ret_coercion_81 badmd typedref 'typedref&'
1056 ./make_ret_test.sh ret_coercion_82 unverifiable typedref object
1057
1058 ./make_ret_test.sh ret_coercion_83 valid int32 "native int"
1059 ./make_ret_test.sh ret_coercion_84 valid "native int" int32
1060 ./make_ret_test.sh ret_coercion_85 valid "unsigned int32" "native int"
1061 ./make_ret_test.sh ret_coercion_86 valid "native int" "unsigned int32"
1062 ./make_ret_test.sh ret_coercion_87 valid int32 "native unsigned int"
1063 ./make_ret_test.sh ret_coercion_88 valid "native unsigned int" int32
1064 ./make_ret_test.sh ret_coercion_89 valid "unsigned int32" "native int"
1065 ./make_ret_test.sh ret_coercion_90 valid "native unsigned int" "unsigned int32"
1066
1067 #type is unverifable
1068 ./make_ret_test.sh ret_coercion_100 unverifiable "int32*" "int32*"
1069 ./make_ret_test.sh ret_coercion_101 unverifiable "method int32* (int32)" "method int32* (int32)"
1070
1071 #typedbyref as parm is ok
1072 ./make_ret_test.sh ret_coercion_102 unverifiable int32 typedref
1073 ./make_ret_test.sh ret_coercion_103 unverifiable typedref int32
1074
1075 #unverifable return type: byref, typedbyref and ArgInterator
1076 ./make_ret_test.sh bad_ret_type_1 unverifiable typedref typedref
1077 ./make_ret_test.sh bad_ret_type_2 unverifiable "int32&" "int32&"
1078 ./make_ret_test.sh bad_ret_type_4 unverifiable "valuetype [mscorlib]System.ArgIterator" "valuetype [mscorlib]System.ArgIterator"
1079
1080
1081 ./make_ret_test.sh ret_sub_type valid ClassA ClassSubA
1082 ./make_ret_test.sh ret_same_type valid ClassA ClassA
1083 ./make_ret_test.sh ret_obj_iface valid object InterfaceA
1084 ./make_ret_test.sh ret_obj_obj valid object object
1085 ./make_ret_test.sh ret_obj_string valid object string
1086 ./make_ret_test.sh ret_string_string valid string string
1087 ./make_ret_test.sh ret_obj_vector valid object 'int32[]'
1088 ./make_ret_test.sh ret_obj_array valid object 'int32[,]'
1089 ./make_ret_test.sh ret_obj_generic valid object 'class Template`1<object>'
1090 ./make_ret_test.sh ret_obj_value_type unverifiable object 'MyValueType'
1091 ./make_ret_test.sh ret_string_value_type unverifiable string 'MyValueType'
1092 ./make_ret_test.sh ret_class_value_type unverifiable ClassA 'MyValueType'
1093
1094 ./make_ret_test.sh ret_string_string unverifiable string object
1095 ./make_ret_test.sh ret_string_string unverifiable 'int32[]' object
1096
1097 ./make_ret_test.sh ret_iface_imple valid InterfaceA ImplA
1098 ./make_ret_test.sh ret_arrays_same_vector valid 'int32[]' 'int32[]'
1099 ./make_ret_test.sh ret_arrays_same_rank valid 'int32[,]' 'int32[,]'
1100
1101 ./make_ret_test.sh ret_sub_type_array_covariant valid 'ClassA[]' 'ClassSubA[]'
1102 ./make_ret_test.sh ret_same_type_array_covariant valid 'ClassA[]' 'ClassA[]'
1103 ./make_ret_test.sh ret_obj_iface_array_covariant valid 'object[]' 'InterfaceA[]'
1104 ./make_ret_test.sh ret_iface_imple_array_covariant valid 'InterfaceA[]' 'ImplA[]'
1105
1106 ./make_ret_test.sh ret_diff_types unverifiable ClassA ClassB
1107 ./make_ret_test.sh ret_class_vale_type unverifiable ClassA MyValueType
1108 ./make_ret_test.sh ret_diff_vale_type unverifiable MyValueType2 MyValueType
1109 ./make_ret_test.sh ret_value_type_class unverifiable MyValueType ClassA
1110 ./make_ret_test.sh ret_super_type unverifiable ClassSubA ClassB
1111 ./make_ret_test.sh ret_interfaces unverifiable InterfaceA InterfaceB
1112 ./make_ret_test.sh ret_interface_class unverifiable ClassA InterfaceB
1113
1114 ./make_ret_test.sh ret_object_type valid object ClassA
1115 ./make_ret_test.sh ret_type_object unverifiable ClassA object
1116
1117
1118 ./make_ret_test.sh ret_array_diff_rank unverifiable 'int32[]' 'int32[,]'
1119 ./make_ret_test.sh ret_array_diff_rank2 unverifiable 'int32[,]' 'int32[]'
1120 ./make_ret_test.sh ret_array_diff_rank3 unverifiable 'int32[,,]' 'int32[,]'
1121 ./make_ret_test.sh ret_array_not_covar unverifiable 'ClassA[]' 'ClassB[]'
1122 ./make_ret_test.sh ret_array_not_covar2 unverifiable 'ClassSubA[]' 'ClassA[]'
1123 ./make_ret_test.sh ret_array_not_covar3 unverifiable 'ClassA[]' 'InterfaceA[]'
1124 ./make_ret_test.sh ret_array_not_covar4 unverifiable 'ImplA[]' 'InterfaceA[]'
1125 ./make_ret_test.sh ret_array_not_covar5 unverifiable 'InterfaceA[]' 'object[]'
1126
1127
1128 #generics tests
1129 ./make_ret_test.sh ret_generics_1 valid 'class Template' 'class Template'
1130 ./make_ret_test.sh ret_generics_2 valid 'class Template`1<int32>' 'class Template`1<int32>'
1131 ./make_ret_test.sh ret_generics_3 valid 'class Template`2<int32,object>' 'class Template`2<int32,object>'
1132
1133 ./make_ret_test.sh ret_generics_4 unverifiable 'class Template' 'class Template`1<object>'
1134 ./make_ret_test.sh ret_generics_5 unverifiable 'class Template`1<object>' 'class Template'
1135 ./make_ret_test.sh ret_generics_6 unverifiable 'class Template`1<object>' 'class Template`1<string>'
1136 ./make_ret_test.sh ret_generics_7 unverifiable 'class Template`1<string>' 'class Template`1<object>'
1137 ./make_ret_test.sh ret_generics_8 unverifiable 'class Template`1<object>' 'class Template`2<object, object>'
1138 ./make_ret_test.sh ret_generics_9 unverifiable 'class Template`2<object, object>' 'class Template`1<object>'
1139
1140 ./make_ret_test.sh ret_generics_10 unverifiable 'class Template`1<int32>' 'class Template`1<int16>'
1141 ./make_ret_test.sh ret_generics_11 unverifiable 'class Template`1<int16>' 'class Template`1<int32>'
1142 ./make_ret_test.sh ret_generics_12 unverifiable 'class Template`1<unsigned int32>' 'class Template`1<int32>'
1143 ./make_ret_test.sh ret_generics_13 unverifiable 'class Template`1<float32>' 'class Template`1<float64>'
1144 ./make_ret_test.sh ret_generics_14 unverifiable 'class Template`1<float64>' 'class Template`1<float32>'
1145
1146 #variance tests
1147 ./make_ret_test.sh ret_generics_15 valid 'class ICovariant`1<object>' 'class ICovariant`1<string>'
1148 ./make_ret_test.sh ret_generics_16 valid 'class ICovariant`1<string>' 'class ICovariant`1<string>'
1149 ./make_ret_test.sh ret_generics_17 unverifiable 'class ICovariant`1<string>' 'class ICovariant`1<object>'
1150
1151 ./make_ret_test.sh ret_generics_18 valid 'class IContravariant`1<string>' 'class IContravariant`1<object>'
1152 ./make_ret_test.sh ret_generics_19 valid 'class IContravariant`1<string>' 'class IContravariant`1<string>'
1153 ./make_ret_test.sh ret_generics_20 unverifiable 'class IContravariant`1<object>' 'class IContravariant`1<string>'
1154
1155 ./make_ret_test.sh ret_generics_21 valid 'class ICovariant`1<ClassA>' 'class ICovariant`1<ClassSubA>'
1156 ./make_ret_test.sh ret_generics_22 valid 'class ICovariant`1<ClassSubA>' 'class ICovariant`1<ClassSubA>'
1157 ./make_ret_test.sh ret_generics_23 unverifiable 'class ICovariant`1<ClassSubA>' 'class ICovariant`1<ClassA>'
1158
1159 ./make_ret_test.sh ret_generics_24 valid 'class IContravariant`1<ClassSubA>' 'class IContravariant`1<ClassA>'
1160 ./make_ret_test.sh ret_generics_25 valid 'class IContravariant`1<ClassSubA>' 'class IContravariant`1<ClassSubA>'
1161 ./make_ret_test.sh ret_generics_26 unverifiable 'class IContravariant`1<ClassA>' 'class IContravariant`1<ClassSubA>'
1162
1163
1164 ./make_ret_test.sh ret_generics_27 valid 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<ClassA, ClassB>'
1165 ./make_ret_test.sh ret_generics_28 valid 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<ClassA, object>'
1166 ./make_ret_test.sh ret_generics_29 valid 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<ClassSubA, ClassB>'
1167 ./make_ret_test.sh ret_generics_30 valid 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<ClassSubA, object>'
1168 ./make_ret_test.sh ret_generics_31 unverifiable 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<object, ClassB>'
1169 ./make_ret_test.sh ret_generics_32 unverifiable 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<object, object>'
1170 ./make_ret_test.sh ret_generics_33 unverifiable 'class Bivariant`2<ClassA, object>' 'class Bivariant`2<object, ClassB>'
1171 ./make_ret_test.sh ret_generics_34 unverifiable 'class Bivariant`2<ClassA, object>' 'class Bivariant`2<ClassA, ClassB>'
1172
1173 #mix parameter types
1174 ./make_ret_test.sh ret_generics_types_1 unverifiable 'class Template`1<int8>' 'class Template`1<unsigned int8>'
1175 ./make_ret_test.sh ret_generics_types_2 unverifiable 'class Template`1<int8>' 'class Template`1<int16>'
1176 ./make_ret_test.sh ret_generics_types_3 unverifiable 'class Template`1<int8>' 'class Template`1<unsigned int16>'
1177 ./make_ret_test.sh ret_generics_types_4 unverifiable 'class Template`1<int8>' 'class Template`1<int32>'
1178 ./make_ret_test.sh ret_generics_types_5 unverifiable 'class Template`1<int8>' 'class Template`1<unsigned int32>'
1179 ./make_ret_test.sh ret_generics_types_6 unverifiable 'class Template`1<int8>' 'class Template`1<int64>'
1180 ./make_ret_test.sh ret_generics_types_7 unverifiable 'class Template`1<int8>' 'class Template`1<unsigned int64>'
1181 ./make_ret_test.sh ret_generics_types_8 unverifiable 'class Template`1<int8>' 'class Template`1<float32>'
1182 ./make_ret_test.sh ret_generics_types_9 unverifiable 'class Template`1<int8>' 'class Template`1<float64>'
1183 ./make_ret_test.sh ret_generics_types_10 unverifiable 'class Template`1<int8>' 'class Template`1<bool>'
1184
1185 ./make_ret_test.sh ret_generics_types_11 unverifiable 'class Template`1<int8>' 'class Template`1<native int>'
1186 ./make_ret_test.sh ret_generics_types_12 unverifiable 'class Template`1<int8>' 'class Template`1<native unsigned int>'
1187 ./make_ret_test.sh ret_generics_types_13 unverifiable 'class Template`1<int8>' 'class Template`1<int32 *>'
1188
1189
1190 #inheritance tests
1191 ./make_ret_test.sh ret_generics_inheritante_1 valid 'class Base`1<int32>' 'class SubClass1`1<int32>'
1192 ./make_ret_test.sh ret_generics_inheritante_2 valid 'class SubClass1`1<int32>' 'class SubClass1`1<int32>'
1193 ./make_ret_test.sh ret_generics_inheritante_3 unverifiable 'class SubClass1`1<int32>' 'class Base`1<int32>'
1194 ./make_ret_test.sh ret_generics_inheritante_4 unverifiable 'class Base`1<int32>' 'class SubClass1`1<float32>'
1195 ./make_ret_test.sh ret_generics_inheritante_5 valid 'class Base`1<object>' 'class SubClass1`1<object>'
1196
1197 ./make_ret_test.sh ret_generics_inheritante_6 valid 'class BaseBase`2<int32, object>' 'class SubClass1`1<object>'
1198 ./make_ret_test.sh ret_generics_inheritante_7 valid 'class BaseBase`2<int32, object>' 'class Base`1<object>'
1199
1200 ./make_ret_test.sh ret_generics_inheritante_8 unverifiable 'class BaseBase`2<int64, object>' 'class Base`1<object>'
1201 ./make_ret_test.sh ret_generics_inheritante_9 unverifiable 'class BaseBase`2<int64, object>' 'class SubClass1`1<object>'
1202 ./make_ret_test.sh ret_generics_inheritante_10 unverifiable 'class BaseBase`2<int32, object>' 'class SubClass1`1<string>'
1203
1204 #interface tests
1205
1206 ./make_ret_test.sh ret_generics_inheritante_12 valid 'class Interface`1<int32>' 'class InterfaceImpl`1<int32>'
1207 ./make_ret_test.sh ret_generics_inheritante_13 valid 'class InterfaceImpl`1<int32>' 'class InterfaceImpl`1<int32>'
1208 ./make_ret_test.sh ret_generics_inheritante_14 unverifiable 'class InterfaceImpl`1<int32>' 'class Interface`1<int32>'
1209 ./make_ret_test.sh ret_generics_inheritante_15 unverifiable 'class Interface`1<int32>' 'class InterfaceImpl`1<float32>'
1210 ./make_ret_test.sh ret_generics_inheritante_16 valid 'class Interface`1<object>' 'class InterfaceImpl`1<object>'
1211
1212
1213 #mix variance with inheritance
1214 #only interfaces or delegates can have covariance
1215
1216 #mix variance with interfaces
1217
1218 ./make_ret_test.sh ret_generics_inheritante_28 valid 'class ICovariant`1<object>' 'class CovariantImpl`1<string>'
1219 ./make_ret_test.sh ret_generics_inheritante_29 valid 'class ICovariant`1<string>' 'class CovariantImpl`1<string>'
1220 ./make_ret_test.sh ret_generics_inheritante_30 unverifiable 'class ICovariant`1<string>' 'class CovariantImpl`1<object>'
1221
1222 ./make_ret_test.sh ret_generics_inheritante_31 valid 'class IContravariant`1<string>' 'class ContravariantImpl`1<object>'
1223 ./make_ret_test.sh ret_generics_inheritante_32 valid 'class IContravariant`1<string>' 'class ContravariantImpl`1<string>'
1224 ./make_ret_test.sh ret_generics_inheritante_33 unverifiable 'class IContravariant`1<object>' 'class ContravariantImpl`1<string>'
1225
1226 ./make_ret_test.sh ret_generics_inheritante_34 valid 'class ICovariant`1<ClassA>' 'class CovariantImpl`1<ClassSubA>'
1227 ./make_ret_test.sh ret_generics_inheritante_35 valid 'class ICovariant`1<ClassSubA>' 'class CovariantImpl`1<ClassSubA>'
1228 ./make_ret_test.sh ret_generics_inheritante_36 unverifiable 'class ICovariant`1<ClassSubA>' 'class CovariantImpl`1<ClassA>'
1229
1230 ./make_ret_test.sh ret_generics_inheritante_37 valid 'class IContravariant`1<ClassSubA>' 'class ContravariantImpl`1<ClassA>'
1231 ./make_ret_test.sh ret_generics_inheritante_38 valid 'class IContravariant`1<ClassSubA>' 'class ContravariantImpl`1<ClassSubA>'
1232 ./make_ret_test.sh ret_generics_inheritante_39 unverifiable 'class IContravariant`1<ClassA>' 'class ContravariantImpl`1<ClassSubA>'
1233
1234
1235 #mix variance with arrays
1236
1237 ./make_ret_test.sh ret_generics_arrays_1 valid 'class ICovariant`1<object>' 'class ICovariant`1<object[]>'
1238 ./make_ret_test.sh ret_generics_arrays_2 valid 'class ICovariant`1<object>' 'class ICovariant`1<int32[]>'
1239 ./make_ret_test.sh ret_generics_arrays_3 valid 'class ICovariant`1<object>' 'class ICovariant`1<int32[,]>'
1240 ./make_ret_test.sh ret_generics_arrays_4 valid 'class ICovariant`1<object>' 'class ICovariant`1<string[]>'
1241 ./make_ret_test.sh ret_generics_arrays_5 valid 'class ICovariant`1<object[]>' 'class ICovariant`1<string[]>'
1242 ./make_ret_test.sh ret_generics_arrays_6 valid 'class ICovariant`1<object[]>' 'class ICovariant`1<ClassA[]>'
1243 ./make_ret_test.sh ret_generics_arrays_7 valid 'class ICovariant`1<ClassA[]>' 'class ICovariant`1<ClassSubA[]>'
1244 ./make_ret_test.sh ret_generics_arrays_8 valid 'class ICovariant`1<InterfaceA[]>' 'class ICovariant`1<ImplA[]>'
1245 ./make_ret_test.sh ret_generics_arrays_9 valid 'class ICovariant`1<object[,]>' 'class ICovariant`1<string[,]>'
1246 ./make_ret_test.sh ret_generics_arrays_10 valid 'class ICovariant`1<ClassA[,]>' 'class ICovariant`1<ClassSubA[,]>'
1247
1248 ./make_ret_test.sh ret_generics_arrays_1_b valid 'class ICovariant`1<object>' 'class CovariantImpl`1<object[]>'
1249 ./make_ret_test.sh ret_generics_arrays_2_b valid 'class ICovariant`1<object>' 'class CovariantImpl`1<int32[]>'
1250 ./make_ret_test.sh ret_generics_arrays_3_b valid 'class ICovariant`1<object>' 'class CovariantImpl`1<int32[,]>'
1251 ./make_ret_test.sh ret_generics_arrays_4_b valid 'class ICovariant`1<object>' 'class ICovariant`1<string[]>'
1252 ./make_ret_test.sh ret_generics_arrays_5_b valid 'class ICovariant`1<object[]>' 'class CovariantImpl`1<string[]>'
1253 ./make_ret_test.sh ret_generics_arrays_6_b valid 'class ICovariant`1<object[]>' 'class CovariantImpl`1<ClassA[]>'
1254 ./make_ret_test.sh ret_generics_arrays_7_b valid 'class ICovariant`1<ClassA[]>' 'class CovariantImpl`1<ClassSubA[]>'
1255 ./make_ret_test.sh ret_generics_arrays_8_b valid 'class ICovariant`1<InterfaceA[]>' 'class CovariantImpl`1<ImplA[]>'
1256 ./make_ret_test.sh ret_generics_arrays_9_b valid 'class ICovariant`1<object[,]>' 'class CovariantImpl`1<string[,]>'
1257 ./make_ret_test.sh ret_generics_arrays_10_b valid 'class ICovariant`1<ClassA[,]>' 'class CovariantImpl`1<ClassSubA[,]>'
1258
1259 ./make_ret_test.sh ret_generics_arrays_11 valid 'class IContravariant`1<object[]>' 'class IContravariant`1<object>'
1260 ./make_ret_test.sh ret_generics_arrays_12 valid 'class IContravariant`1<int32[]>' 'class IContravariant`1<object>'
1261 ./make_ret_test.sh ret_generics_arrays_13 valid 'class IContravariant`1<int32[,]>' 'class IContravariant`1<object>'
1262 ./make_ret_test.sh ret_generics_arrays_14 valid 'class IContravariant`1<string[]>' 'class IContravariant`1<object>'
1263 ./make_ret_test.sh ret_generics_arrays_15 valid 'class IContravariant`1<string[]>' 'class IContravariant`1<object[]>'
1264 ./make_ret_test.sh ret_generics_arrays_16 valid 'class IContravariant`1<ClassA[]>' 'class IContravariant`1<object[]>'
1265 ./make_ret_test.sh ret_generics_arrays_17 valid 'class IContravariant`1<ClassSubA[]>' 'class IContravariant`1<ClassA[]>'
1266 ./make_ret_test.sh ret_generics_arrays_18 valid 'class IContravariant`1<ImplA[]>' 'class IContravariant`1<InterfaceA[]>'
1267 ./make_ret_test.sh ret_generics_arrays_19 valid 'class IContravariant`1<string[,]>' 'class IContravariant`1<object[,]>'
1268 ./make_ret_test.sh ret_generics_arrays_20 valid 'class IContravariant`1<ClassSubA[,]>' 'class IContravariant`1<ClassA[,]>'
1269
1270 ./make_ret_test.sh ret_generics_arrays_11_b valid 'class IContravariant`1<object[]>' 'class ContravariantImpl`1<object>'
1271 ./make_ret_test.sh ret_generics_arrays_12_b valid 'class IContravariant`1<int32[]>' 'class ContravariantImpl`1<object>'
1272 ./make_ret_test.sh ret_generics_arrays_13_b valid 'class IContravariant`1<int32[,]>' 'class ContravariantImpl`1<object>'
1273 ./make_ret_test.sh ret_generics_arrays_14_b valid 'class IContravariant`1<string[]>' 'class ContravariantImpl`1<object>'
1274 ./make_ret_test.sh ret_generics_arrays_15_b valid 'class IContravariant`1<string[]>' 'class ContravariantImpl`1<object[]>'
1275 ./make_ret_test.sh ret_generics_arrays_16_b valid 'class IContravariant`1<ClassA[]>' 'class ContravariantImpl`1<object[]>'
1276 ./make_ret_test.sh ret_generics_arrays_17_b valid 'class IContravariant`1<ClassSubA[]>' 'class ContravariantImpl`1<ClassA[]>'
1277 ./make_ret_test.sh ret_generics_arrays_18_b valid 'class IContravariant`1<ImplA[]>' 'class ContravariantImpl`1<InterfaceA[]>'
1278 ./make_ret_test.sh ret_generics_arrays_19_b valid 'class IContravariant`1<string[,]>' 'class ContravariantImpl`1<object[,]>'
1279 ./make_ret_test.sh ret_generics_arrays_20_b valid 'class IContravariant`1<ClassSubA[,]>' 'class ContravariantImpl`1<ClassA[,]>'
1280
1281 ./make_ret_test.sh ret_generics_arrays_21 unverifiable 'class ICovariant`1<int32[]>' 'class ICovariant`1<object>'
1282 ./make_ret_test.sh ret_generics_arrays_22 unverifiable 'class ICovariant`1<int32[]>' 'class ICovariant`1<object[]>'
1283 ./make_ret_test.sh ret_generics_arrays_23 unverifiable 'class ICovariant`1<string[]>' 'class ICovariant`1<object[]>'
1284 ./make_ret_test.sh ret_generics_arrays_24 unverifiable 'class ICovariant`1<ClassSubA[]>' 'class ICovariant`1<ClassA[]>'
1285 ./make_ret_test.sh ret_generics_arrays_25 unverifiable 'class ICovariant`1<int32[]>' 'class ICovariant`1<int32[,]>'
1286 ./make_ret_test.sh ret_generics_arrays_26 unverifiable 'class ICovariant`1<ImplA[]>' 'class ICovariant`1<InterfaceA[]>'
1287
1288 ./make_ret_test.sh ret_generics_arrays_27 unverifiable 'class IContravariant`1<object>' 'class IContravariant`1<int32[]>'
1289 ./make_ret_test.sh ret_generics_arrays_28 unverifiable 'class IContravariant`1<object[]>' 'class IContravariant`1<int32[]>'
1290 ./make_ret_test.sh ret_generics_arrays_29 unverifiable 'class IContravariant`1<object[]>' 'class IContravariant`1<string[]>'
1291 ./make_ret_test.sh ret_generics_arrays_30 unverifiable 'class IContravariant`1<ClassA[]>' 'class IContravariant`1<ClassSubA[]>'
1292 ./make_ret_test.sh ret_generics_arrays_31 unverifiable 'class IContravariant`1<int32[,]>' 'class IContravariant`1<int32[]>'
1293 ./make_ret_test.sh ret_generics_arrays_32 unverifiable 'class IContravariant`1<InterfaceA[]>' 'class IContravariant`1<ImplA[]>'
1294
1295
1296 #generic with value types
1297
1298 ./make_ret_test.sh ret_generics_vt_1 valid 'class Template`1<MyValueType>' 'class Template`1<MyValueType>'
1299 ./make_ret_test.sh ret_generics_vt_2 unverifiable 'class Template`1<MyValueType>' 'class Template`1<MyValueType2>'
1300 ./make_ret_test.sh ret_generics_vt_3 unverifiable 'class ICovariant`1<MyValueType>' 'class ICovariant`1<MyValueType2>'
1301 ./make_ret_test.sh ret_generics_vt_4 unverifiable 'class ICovariant`1<object>' 'class ICovariant`1<MyValueType2>'
1302
1303
1304 #mix variance and generic compatibility with all kinds of types valid for a generic parameter (hellish task - huge task)
1305 #test with composite generics ( Foo<Bar<int>> )
1306
1307 #test variance with delegates
1308 #generic methods
1309 #generic atributes
1310 #generic delegates
1311 #generic code
1312 #the verifier must check if the generic instantiation is valid
1313
1314 for OP in ldarg ldloc
1315 do
1316         ARGS_1='int32 V'
1317         LOCALS_1=''
1318         CALL_1='ldc.i4.0'
1319         SIG_1='int32'
1320         
1321         ARGS_2='int32 V, int32 V1'
1322         LOCALS_2=''
1323         CALL_2='ldc.i4.0\n\tldc.i4.0'
1324         SIG_2='int32, int32'
1325         
1326         ARGS_3='int32 V, int32 V1, int32 V1'
1327         LOCALS_3=''
1328         CALL_3='ldc.i4.0\n\tldc.i4.0\n\tldc.i4.0'
1329         SIG_3='int32, int32, int32'
1330         
1331         ARGS_4='int32 V, int32 V1, int32 V1, int32 V1'
1332         LOCALS_4=''
1333         CALL_4='ldc.i4.0\n\tldc.i4.0\n\tldc.i4.0\n\tldc.i4.0'
1334         SIG_4='int32, int32, int32, int32'
1335         MAX_PARAM_RESULT="unverifiable"
1336         POPS="pop\npop\npop\npop\npop\npop\npop\npop\n"
1337         
1338         if [ "$OP" = "ldloc" ]; then
1339                 MAX_PARAM_RESULT="invalid"
1340
1341                 LOCALS_1=$ARGS_1
1342                 ARGS_1=''
1343                 CALL_1=''
1344                 SIG_1=''
1345
1346                 LOCALS_2=$ARGS_2
1347                 ARGS_2=''
1348                 CALL_2=''
1349                 SIG_2=''
1350
1351                 LOCALS_3=$ARGS_3
1352                 ARGS_3=''
1353                 CALL_3=''
1354                 SIG_3=''
1355
1356                 LOCALS_4=$ARGS_4
1357                 ARGS_4=''
1358                 CALL_4=''
1359                 SIG_4=''
1360         fi;
1361         
1362         ./make_load_test.sh ${OP}0_max_params "${MAX_PARAM_RESULT}" "${OP}.0" '' '' '' ''
1363         ./make_load_test.sh ${OP}1_max_params "${MAX_PARAM_RESULT}" "${OP}.1" '' '' '' ''
1364         ./make_load_test.sh ${OP}2_max_params "${MAX_PARAM_RESULT}" "${OP}.2" '' '' '' ''
1365         ./make_load_test.sh ${OP}3_max_params "${MAX_PARAM_RESULT}" "${OP}.3" '' '' '' ''
1366         
1367         ./make_load_test.sh ${OP}1_1_max_params "${MAX_PARAM_RESULT}" "${OP}.1" "${ARGS_1}" "${LOCALS_1}" "${CALL_1}" "${SIG_1}"
1368         ./make_load_test.sh ${OP}2_1_max_params "${MAX_PARAM_RESULT}" "${OP}.2" "${ARGS_1}" "${LOCALS_1}" "${CALL_1}" "${SIG_1}"
1369         ./make_load_test.sh ${OP}3_1_max_params "${MAX_PARAM_RESULT}" "${OP}.3" "${ARGS_1}" "${LOCALS_1}" "${CALL_1}" "${SIG_1}"
1370         
1371         ./make_load_test.sh ${OP}2_2_max_params "${MAX_PARAM_RESULT}" "${OP}.2" "${ARGS_2}" "${LOCALS_2}" "${CALL_2}" "${SIG_2}"
1372         ./make_load_test.sh ${OP}3_2_max_params "${MAX_PARAM_RESULT}" "${OP}.3" "${ARGS_2}" "${LOCALS_2}" "${CALL_2}" "${SIG_2}"
1373         
1374         ./make_load_test.sh ${OP}3_3_max_params "${MAX_PARAM_RESULT}" "${OP}.3" "${ARGS_3}" "${LOCALS_3}" "${CALL_3}" "${SIG_3}"
1375         
1376         ./make_load_test.sh ${OP}0_max_params valid "${OP}.0" "${ARGS_1}" "${LOCALS_1}" "${CALL_1}" "${SIG_1}"
1377         ./make_load_test.sh ${OP}1_max_params valid "${OP}.1" "${ARGS_2}" "${LOCALS_2}" "${CALL_2}" "${SIG_2}"
1378         ./make_load_test.sh ${OP}2_max_params valid "${OP}.2" "${ARGS_3}" "${LOCALS_3}" "${CALL_3}" "${SIG_3}"
1379         ./make_load_test.sh ${OP}3_max_params valid "${OP}.3" "${ARGS_4}" "${LOCALS_4}" "${CALL_4}" "${SIG_4}"
1380         
1381         ./make_load_test.sh ${OP}0_stack_overflow invalid "${OP}.0\n${OP}.0\n${OP}.0\n${OP}.0\n${OP}.0\n${OP}.0\n${OP}.0\n${OP}.0\n${OP}.0\n${POPS}" "${ARGS_4}" "${LOCALS_4}" "${CALL_4}" "${SIG_4}"
1382         ./make_load_test.sh ${OP}1_stack_overflow invalid "${OP}.1\n${OP}.1\n${OP}.1\n${OP}.1\n${OP}.1\n${OP}.1\n${OP}.1\n${OP}.1\n${OP}.1\n${POPS}" "${ARGS_4}" "${LOCALS_4}" "${CALL_4}" "${SIG_4}"
1383         ./make_load_test.sh ${OP}2_stack_overflow invalid "${OP}.2\n${OP}.2\n${OP}.2\n${OP}.2\n${OP}.2\n${OP}.2\n${OP}.2\n${OP}.2\n${OP}.2\n${POPS}" "${ARGS_4}" "${LOCALS_4}" "${CALL_4}" "${SIG_4}"
1384         ./make_load_test.sh ${OP}3_stack_overflow invalid "${OP}.3\n${OP}.3\n${OP}.3\n${OP}.3\n${OP}.3\n${OP}.3\n${OP}.3\n${OP}.3\n${OP}.3\n${POPS}" "${ARGS_4}" "${LOCALS_4}" "${CALL_4}" "${SIG_4}"
1385 done
1386
1387 #Test if the values used for brtrue and brfalse are valid
1388 I=1
1389 for OP in brfalse brtrue 'brfalse.s' 'brtrue.s'
1390 do
1391         ./make_bool_branch_test.sh boolean_branch_${I}_1 valid ${OP} int8
1392         ./make_bool_branch_test.sh boolean_branch_${I}_2 valid ${OP} int16
1393         ./make_bool_branch_test.sh boolean_branch_${I}_3 valid ${OP} int32
1394         ./make_bool_branch_test.sh boolean_branch_${I}_4 valid ${OP} int64
1395         ./make_bool_branch_test.sh boolean_branch_${I}_5 valid ${OP} 'native int'
1396         
1397         #unmanaged pointers are not veriable types, all ops on unmanaged pointers are unverifiable
1398         ./make_bool_branch_test.sh boolean_branch_${I}_6 unverifiable ${OP} 'int32*'
1399         ./make_bool_branch_test.sh boolean_branch_${I}_8 unverifiable ${OP} 'method int32 *(int32)'
1400
1401         ./make_bool_branch_test.sh boolean_branch_${I}_7 valid ${OP} 'int32&'
1402         ./make_bool_branch_test.sh boolean_branch_${I}_9 valid ${OP} object
1403         ./make_bool_branch_test.sh boolean_branch_${I}_10 valid ${OP} string
1404         ./make_bool_branch_test.sh boolean_branch_${I}_11 valid ${OP} 'ClassA'
1405         ./make_bool_branch_test.sh boolean_branch_${I}_12 valid ${OP} 'int32[]'
1406         ./make_bool_branch_test.sh boolean_branch_${I}_13 valid ${OP} 'int32[,,]'
1407         ./make_bool_branch_test.sh boolean_branch_${I}_14 valid ${OP} 'class Template`1<object>'
1408         ./make_bool_branch_test.sh boolean_branch_${I}_15 valid ${OP} 'class Template`1<object>[]'
1409         ./make_bool_branch_test.sh boolean_branch_${I}_16 valid ${OP} 'class Template`1<object>[,,]'
1410         
1411         ./make_bool_branch_test.sh boolean_branch_${I}_17 unverifiable ${OP} float32
1412         ./make_bool_branch_test.sh boolean_branch_${I}_18 unverifiable ${OP} float64
1413         ./make_bool_branch_test.sh boolean_branch_${I}_19 unverifiable ${OP} 'class MyValueType'
1414         ./make_bool_branch_test.sh boolean_branch_${I}_20 unverifiable ${OP} 'class ValueTypeTemplate`1<object>'
1415
1416         ./make_bool_branch_test.sh boolean_branch_${I}_21 valid ${OP} object "pop\n\tldnull"
1417         ./make_bool_branch_test.sh boolean_branch_${I}_22 valid ${OP} MyValueType "pop\n\tldnull\n\tisinst MyValueType"
1418
1419         I=`expr $I + 1`
1420 done
1421
1422 #tests for field loading
1423 I=1
1424 for OP in 'ldfld' 'ldflda'
1425 do
1426         ./make_field_store_test.sh field_store_${I}_1 unverifiable "${OP} int32 ClassA::fld" int32 int32
1427         ./make_field_store_test.sh field_store_${I}_2 unverifiable "${OP} int32 ClassA::fld" int32 'class ClassB' yes
1428         ./make_field_store_test.sh field_store_${I}_3 unverifiable "${OP} int32 ClassA::fld" int32 object yes
1429         ./make_field_store_test.sh field_store_${I}_4 unverifiable "${OP} int32 ClassA::fld" int32 'class MyValueType'
1430         ./make_field_store_test.sh field_store_${I}_5 valid "${OP} int32 ClassA::fld" int32 'class ClassA' yes
1431         ./make_field_store_test.sh field_store_${I}_6 valid "${OP} int32 ClassA::fld" int32 'class SubClass' yes
1432         #ldfld and ldflda works different with value objects, you cannot take the address of a value-object on the stack
1433         #./make_field_store_test.sh field_store_${I}_7 valid "${OP} int32 MyValueType::fld" int32 'class MyValueType'
1434         #Not usefull as it throws NRE
1435         #./make_field_store_test.sh field_store_${I}_8 valid "${OP} int32 MyValueType::fld" int32 'class MyValueType \&'
1436         ./make_field_store_test.sh field_store_${I}_9 unverifiable "${OP} int32 MyValueType::fld" int32 'native int'
1437         ./make_field_store_test.sh field_store_${I}_10 unverifiable "${OP} int32 MyValueType::fld" int32 'class MyValueType *'
1438         ./make_field_store_test.sh field_store_${I}_11 unverifiable "${OP} int32 ClassA::fld" int32 'class ClassA *'
1439         #overlapped field tests should be done separatedly
1440         #./make_field_store_test.sh field_store_${I}_12 valid "${OP} int32 Overlapped::field1" int32 'class Overlapped' yes
1441         #./make_field_store_test.sh field_store_${I}_13 unverifiable "${OP} ClassA Overlapped::field1" 'class ClassA' 'class Overlapped' yes
1442         #./make_field_store_test.sh field_store_${I}_14 valid "${OP} int32 Overlapped::field1" int32 'class SubOverlapped' yes
1443         #./make_field_store_test.sh field_store_${I}_15 unverifiable "${OP} ClassA Overlapped::field1" 'class ClassA' 'class SubOverlapped' yes
1444         #./make_field_store_test.sh field_store_${I}_16 valid "${OP} int32 SubOverlapped::field6" int32 'class SubOverlapped' yes
1445         #./make_field_store_test.sh field_store_${I}_17 unverifiable "${OP} ClassA SubOverlapped::field6" 'class ClassA' 'class SubOverlapped' yes
1446         #./make_field_store_test.sh field_store_${I}_18 valid "${OP} int32 Overlapped::field10" int32 'class Overlapped' yes
1447         #./make_field_store_test.sh field_store_${I}_20 unverifiable "${OP} int32 Overlapped::field10" 'class ClassA' 'class Overlapped' yes
1448
1449         ./make_field_store_test.sh field_store_${I}_22 invalid "${OP} int32 ClassA::unknown_field" 'class ClassA' 'class ClassA' yes
1450         ./make_field_store_test.sh field_store_${I}_23 unverifiable "${OP} int32 ClassA::const_field" int32 'int32 \&'
1451
1452         ./make_field_store_test.sh field_store_${I}_24 valid "${OP} int32 ClassA::sfld" int32 'class ClassA' yes
1453         I=`expr $I + 1`
1454 done
1455
1456 ./make_field_store_test.sh field_store_2_25 unverifiable 'ldflda int32 ClassA::const_field' int32 'class ClassA'
1457
1458 #tests form static field loading
1459 I=1
1460 for OP in 'ldsfld' 'ldsflda'
1461 do
1462         #unknown field
1463         ./make_field_store_test.sh static_field_store_${I}_1 invalid "${OP} int32 ClassA::unknown_field\n\tpop" 'class ClassA' 'class ClassA'
1464         #non static field
1465         ./make_field_store_test.sh static_field_store_${I}_2 invalid "${OP} int32 ClassA::fld\n\tpop" 'class ClassA' 'class ClassA'
1466         #valid
1467         ./make_field_store_test.sh static_field_store_${I}_3 valid "${OP} ClassA ClassA::sfld\n\tpop" 'class ClassA' 'class ClassA'
1468         I=`expr $I + 1`
1469 done
1470
1471 ./make_field_store_test.sh static_field_store_2_25 unverifiable 'ldsflda int32 ClassA::st_const_field\n\tpop' int32 'class ClassA'
1472
1473
1474 #stfld with null values
1475 ./make_field_store_test.sh field_store_null_value valid "ldnull\n\tstfld string ClassA::fld\n\tldc.i4.0" 'string' 'class ClassA' yes
1476 ./make_field_store_test.sh field_store_null_object valid "pop\n\tldnull\n\tldnull\n\tstfld string ClassA::fld\n\tldc.i4.0" 'string' 'class ClassA' yes
1477
1478
1479 ./make_field_valuetype_test.sh value_type_field_load_1 valid 'ldfld int32 MyValueType::fld' 'ldloc.0'
1480 ./make_field_valuetype_test.sh value_type_field_load_2 unverifiable 'ldflda int32 MyValueType::fld' 'ldloc.0'
1481 ./make_field_valuetype_test.sh value_type_field_load_3 valid 'ldfld int32 MyValueType::fld' 'ldloca.s 0'
1482 ./make_field_valuetype_test.sh value_type_field_load_4 valid 'ldflda int32 MyValueType::fld' 'ldloca.s 0'
1483
1484 ./make_field_valuetype_test.sh value_type_field_load_1 valid 'ldfld int32 MyValueType::fld' 'ldloc.1'
1485 ./make_field_valuetype_test.sh value_type_field_load_2 valid 'ldflda int32 MyValueType::fld' 'ldloc.1'
1486 ./make_field_valuetype_test.sh value_type_field_load_3 unverifiable 'ldfld int32 MyValueType::fld' 'ldloca.s 1'
1487 ./make_field_valuetype_test.sh value_type_field_load_4 unverifiable 'ldflda int32 MyValueType::fld' 'ldloca.s 1'
1488
1489
1490
1491 #Tests for access checks
1492 #TODO tests with static calls
1493 #TODO tests with multiple assemblies, involving friend assemblies, with and without matching public key
1494
1495 I=1
1496 for OP in "callvirt instance int32 class Owner\/Nested::Target()" "call instance int32 class Owner\/Nested::Target()" "ldc.i4.0\n\t\tstfld int32 Owner\/Nested::fld\n\t\tldc.i4.0" "ldc.i4.0\n\t\tstsfld int32 Owner\/Nested::sfld" "ldsfld int32 Owner\/Nested::sfld\n\n\tpop" "ldfld int32 Owner\/Nested::fld" "ldsflda int32 Owner\/Nested::sfld\n\n\tpop" "ldflda int32 Owner\/Nested::fld"
1497 do
1498         ./make_nested_access_test.sh nested_access_check_1_${I} valid "$OP" public public no
1499         ./make_nested_access_test.sh nested_access_check_2_${I} valid "$OP" public public yes
1500         ./make_nested_access_test.sh nested_access_check_3_${I} unverifiable "$OP" public private no
1501         ./make_nested_access_test.sh nested_access_check_4_${I} unverifiable "$OP" public private yes
1502         ./make_nested_access_test.sh nested_access_check_5_${I} unverifiable "$OP" public family no
1503         ./make_nested_access_test.sh nested_access_check_6_${I} unverifiable "$OP" public family yes
1504         ./make_nested_access_test.sh nested_access_check_7_${I} valid "$OP" public assembly no
1505         ./make_nested_access_test.sh nested_access_check_8_${I} valid "$OP" public assembly yes
1506         ./make_nested_access_test.sh nested_access_check_9_${I} unverifiable "$OP" public famandassem no
1507         ./make_nested_access_test.sh nested_access_check_a_${I} unverifiable "$OP" public famandassem yes
1508         ./make_nested_access_test.sh nested_access_check_b_${I} valid "$OP" public famorassem no
1509         ./make_nested_access_test.sh nested_access_check_c_${I} valid "$OP" public famorassem yes
1510
1511         ./make_nested_access_test.sh nested_access_check_11_${I} unverifiable "$OP" private public no
1512         ./make_nested_access_test.sh nested_access_check_12_${I} unverifiable "$OP" private public yes
1513         ./make_nested_access_test.sh nested_access_check_13_${I} unverifiable "$OP" private private no
1514         ./make_nested_access_test.sh nested_access_check_14_${I} unverifiable "$OP" private private yes
1515         ./make_nested_access_test.sh nested_access_check_15_${I} unverifiable "$OP" private family no
1516         ./make_nested_access_test.sh nested_access_check_16_${I} unverifiable "$OP" private family yes
1517         ./make_nested_access_test.sh nested_access_check_17_${I} unverifiable "$OP" private assembly no
1518         ./make_nested_access_test.sh nested_access_check_18_${I} unverifiable "$OP" private assembly yes
1519         ./make_nested_access_test.sh nested_access_check_19_${I} unverifiable "$OP" private famandassem no
1520         ./make_nested_access_test.sh nested_access_check_1a_${I} unverifiable "$OP" private famandassem yes
1521         ./make_nested_access_test.sh nested_access_check_1b_${I} unverifiable "$OP" private famorassem no
1522         ./make_nested_access_test.sh nested_access_check_1c_${I} unverifiable "$OP" private famorassem yes
1523
1524         ./make_nested_access_test.sh nested_access_check_21_${I} unverifiable "$OP" family public no
1525         ./make_nested_access_test.sh nested_access_check_22_${I} valid "$OP" family public yes
1526         ./make_nested_access_test.sh nested_access_check_23_${I} unverifiable "$OP" family private no
1527         ./make_nested_access_test.sh nested_access_check_24_${I} unverifiable "$OP" family private yes
1528         ./make_nested_access_test.sh nested_access_check_25_${I} unverifiable "$OP" family family no
1529         ./make_nested_access_test.sh nested_access_check_26_${I} unverifiable "$OP" family family yes
1530         ./make_nested_access_test.sh nested_access_check_27_${I} unverifiable "$OP" family assembly no
1531         ./make_nested_access_test.sh nested_access_check_28_${I} valid "$OP" family assembly yes
1532         ./make_nested_access_test.sh nested_access_check_29_${I} unverifiable "$OP" family famandassem no
1533         ./make_nested_access_test.sh nested_access_check_2a_${I} unverifiable "$OP" family famandassem yes
1534         ./make_nested_access_test.sh nested_access_check_2b_${I} unverifiable "$OP" family famorassem no
1535         ./make_nested_access_test.sh nested_access_check_2c_${I} valid "$OP" family famorassem yes
1536
1537         ./make_nested_access_test.sh nested_access_check_31_${I} valid "$OP" assembly public no
1538         ./make_nested_access_test.sh nested_access_check_32_${I} valid "$OP" assembly public yes
1539         ./make_nested_access_test.sh nested_access_check_33_${I} unverifiable "$OP" assembly private no
1540         ./make_nested_access_test.sh nested_access_check_34_${I} unverifiable "$OP" assembly private yes
1541         ./make_nested_access_test.sh nested_access_check_35_${I} unverifiable "$OP" assembly family no
1542         ./make_nested_access_test.sh nested_access_check_36_${I} unverifiable "$OP" assembly family yes
1543         ./make_nested_access_test.sh nested_access_check_37_${I} valid "$OP" assembly assembly no
1544         ./make_nested_access_test.sh nested_access_check_38_${I} valid "$OP" assembly assembly yes
1545         ./make_nested_access_test.sh nested_access_check_39_${I} unverifiable "$OP" assembly famandassem no
1546         ./make_nested_access_test.sh nested_access_check_3a_${I} unverifiable "$OP" assembly famandassem yes
1547         ./make_nested_access_test.sh nested_access_check_3b_${I} valid "$OP" assembly famorassem no
1548         ./make_nested_access_test.sh nested_access_check_3c_${I} valid "$OP" assembly famorassem yes
1549
1550         ./make_nested_access_test.sh nested_access_check_41_${I} unverifiable "$OP" famandassem public no
1551         ./make_nested_access_test.sh nested_access_check_42_${I} valid "$OP" famandassem public yes
1552         ./make_nested_access_test.sh nested_access_check_43_${I} unverifiable "$OP" famandassem private no
1553         ./make_nested_access_test.sh nested_access_check_44_${I} unverifiable "$OP" famandassem private yes
1554         ./make_nested_access_test.sh nested_access_check_45_${I} unverifiable "$OP" famandassem family no
1555         ./make_nested_access_test.sh nested_access_check_46_${I} unverifiable "$OP" famandassem family yes
1556         ./make_nested_access_test.sh nested_access_check_47_${I} unverifiable "$OP" famandassem assembly no
1557         ./make_nested_access_test.sh nested_access_check_48_${I} valid "$OP" famandassem assembly yes
1558         ./make_nested_access_test.sh nested_access_check_49_${I} unverifiable "$OP" famandassem famandassem no
1559         ./make_nested_access_test.sh nested_access_check_4a_${I} unverifiable "$OP" famandassem famandassem yes
1560         ./make_nested_access_test.sh nested_access_check_4b_${I} unverifiable "$OP" famandassem famorassem no
1561         ./make_nested_access_test.sh nested_access_check_4c_${I} valid "$OP" famandassem famorassem yes
1562
1563         ./make_nested_access_test.sh nested_access_check_51_${I} valid "$OP" famorassem public no
1564         ./make_nested_access_test.sh nested_access_check_52_${I} valid "$OP" famorassem public yes
1565         ./make_nested_access_test.sh nested_access_check_53_${I} unverifiable "$OP" famorassem private no
1566         ./make_nested_access_test.sh nested_access_check_54_${I} unverifiable "$OP" famorassem private yes
1567         ./make_nested_access_test.sh nested_access_check_55_${I} unverifiable "$OP" famorassem family no
1568         ./make_nested_access_test.sh nested_access_check_56_${I} unverifiable "$OP" famorassem family yes
1569         ./make_nested_access_test.sh nested_access_check_57_${I} valid "$OP" famorassem assembly no
1570         ./make_nested_access_test.sh nested_access_check_58_${I} valid "$OP" famorassem assembly yes
1571         ./make_nested_access_test.sh nested_access_check_59_${I} unverifiable "$OP" famorassem famandassem no
1572         ./make_nested_access_test.sh nested_access_check_5a_${I} unverifiable "$OP" famorassem famandassem yes
1573         ./make_nested_access_test.sh nested_access_check_5b_${I} valid "$OP" famorassem famorassem no
1574         ./make_nested_access_test.sh nested_access_check_5c_${I} valid "$OP" famorassem famorassem yes
1575         I=`expr $I + 1`
1576 done
1577
1578 #Tests for accessing an owned nested type
1579 I=1
1580 for OP in "callvirt instance int32 class Outer\/Inner::Target()" "call instance int32 class Outer\/Inner::Target()" "ldc.i4.0\n\t\tstfld int32 Outer\/Inner::fld\n\t\tldc.i4.0" "ldc.i4.0\n\t\tstsfld int32 Outer\/Inner::sfld" "ldsfld int32 Outer\/Inner::sfld\n\n\tpop" "ldfld int32 Outer\/Inner::fld" "ldsflda int32 Outer\/Inner::sfld\n\n\tpop" "ldflda int32 Outer\/Inner::fld"
1581 do
1582         ./make_self_nested_test.sh self_nested_access_check_1_${I} valid "$OP" public public
1583         ./make_self_nested_test.sh self_nested_access_check_2_${I} unverifiable "$OP" public private
1584         ./make_self_nested_test.sh self_nested_access_check_3_${I} unverifiable "$OP" public family
1585         ./make_self_nested_test.sh self_nested_access_check_4_${I} valid "$OP" public assembly
1586         ./make_self_nested_test.sh self_nested_access_check_5_${I} unverifiable "$OP" public famandassem
1587         ./make_self_nested_test.sh self_nested_access_check_6_${I} valid "$OP" public famorassem
1588
1589         ./make_self_nested_test.sh self_nested_access_check_7_${I} valid "$OP" private public
1590         ./make_self_nested_test.sh self_nested_access_check_8_${I} unverifiable "$OP" private private
1591         ./make_self_nested_test.sh self_nested_access_check_9_${I} unverifiable "$OP" private family
1592         ./make_self_nested_test.sh self_nested_access_check_10_${I} valid "$OP" private assembly
1593         ./make_self_nested_test.sh self_nested_access_check_11_${I} unverifiable "$OP" private famandassem
1594         ./make_self_nested_test.sh self_nested_access_check_12_${I} valid "$OP" private famorassem
1595
1596         ./make_self_nested_test.sh self_nested_access_check_13_${I} valid "$OP" family public
1597         ./make_self_nested_test.sh self_nested_access_check_14_${I} unverifiable "$OP" family private
1598         ./make_self_nested_test.sh self_nested_access_check_15_${I} unverifiable "$OP" family family
1599         ./make_self_nested_test.sh self_nested_access_check_16_${I} valid "$OP" family assembly
1600         ./make_self_nested_test.sh self_nested_access_check_17_${I} unverifiable "$OP" family famandassem
1601         ./make_self_nested_test.sh self_nested_access_check_18_${I} valid "$OP" family famorassem
1602
1603         ./make_self_nested_test.sh self_nested_access_check_19_${I} valid "$OP" assembly public
1604         ./make_self_nested_test.sh self_nested_access_check_20_${I} unverifiable "$OP" assembly private
1605         ./make_self_nested_test.sh self_nested_access_check_21_${I} unverifiable "$OP" assembly family
1606         ./make_self_nested_test.sh self_nested_access_check_22_${I} valid "$OP" assembly assembly
1607         ./make_self_nested_test.sh self_nested_access_check_23_${I} unverifiable "$OP" assembly famandassem
1608         ./make_self_nested_test.sh self_nested_access_check_24_${I} valid "$OP" assembly famorassem
1609
1610         ./make_self_nested_test.sh self_nested_access_check_25_${I} valid "$OP" famandassem public
1611         ./make_self_nested_test.sh self_nested_access_check_26_${I} unverifiable "$OP" famandassem private
1612         ./make_self_nested_test.sh self_nested_access_check_27_${I} unverifiable "$OP" famandassem family
1613         ./make_self_nested_test.sh self_nested_access_check_28_${I} valid "$OP" famandassem assembly
1614         ./make_self_nested_test.sh self_nested_access_check_29_${I} valid "$unverifiable" famandassem famandassem
1615         ./make_self_nested_test.sh self_nested_access_check_30_${I} valid "$OP" famandassem famorassem
1616
1617         ./make_self_nested_test.sh self_nested_access_check_31_${I} valid "$OP" famorassem public
1618         ./make_self_nested_test.sh self_nested_access_check_32_${I} unverifiable "$OP" famorassem private
1619         ./make_self_nested_test.sh self_nested_access_check_33_${I} unverifiable "$OP" famorassem family
1620         ./make_self_nested_test.sh self_nested_access_check_34_${I} valid "$OP" famorassem assembly
1621         ./make_self_nested_test.sh self_nested_access_check_35_${I} unverifiable "$OP" famorassem famandassem
1622         ./make_self_nested_test.sh self_nested_access_check_36_${I} valid "$OP" famorassem famorassem
1623         I=`expr $I + 1`
1624 done
1625
1626
1627 I=1
1628 for OP in "ldc.i4.0\n\t\tstsfld int32 Owner\/Nested::sfld" "ldsfld int32 Owner\/Nested::sfld\n\n\tpop" "ldsflda int32 Owner\/Nested::sfld\n\n\tpop" "callvirt instance int32 class Owner\/Nested::Target()" "call instance int32 class Owner\/Nested::Target()" "ldc.i4.0\n\t\tstfld int32 Owner\/Nested::fld\n\t\tldc.i4.0" "ldfld int32 Owner\/Nested::fld" "ldflda int32 Owner\/Nested::fld"
1629 do
1630         ./make_cross_nested_access_test.sh cross_nested_access_check_1_${I} valid "$OP" public public no
1631         ./make_cross_nested_access_test.sh cross_nested_access_check_2_${I} valid "$OP" public public yes
1632         ./make_cross_nested_access_test.sh cross_nested_access_check_3_${I} unverifiable "$OP" public private no
1633         ./make_cross_nested_access_test.sh cross_nested_access_check_4_${I} unverifiable "$OP" public private yes
1634         ./make_cross_nested_access_test.sh cross_nested_access_check_5_${I} unverifiable "$OP" public family no
1635         ./make_cross_nested_access_test.sh cross_nested_access_check_7_${I} valid "$OP" public assembly no
1636         ./make_cross_nested_access_test.sh cross_nested_access_check_8_${I} valid "$OP" public assembly yes
1637         ./make_cross_nested_access_test.sh cross_nested_access_check_9_${I} unverifiable "$OP" public famandassem no
1638         ./make_cross_nested_access_test.sh cross_nested_access_check_b_${I} valid "$OP" public famorassem no
1639         ./make_cross_nested_access_test.sh cross_nested_access_check_c_${I} valid "$OP" public famorassem yes
1640
1641         ./make_cross_nested_access_test.sh cross_nested_access_check_11_${I} valid "$OP" private public no
1642         ./make_cross_nested_access_test.sh cross_nested_access_check_12_${I} valid "$OP" private public yes
1643         ./make_cross_nested_access_test.sh cross_nested_access_check_13_${I} unverifiable "$OP" private private no
1644         ./make_cross_nested_access_test.sh cross_nested_access_check_14_${I} unverifiable "$OP" private private yes
1645         ./make_cross_nested_access_test.sh cross_nested_access_check_15_${I} unverifiable "$OP" private family no
1646         ./make_cross_nested_access_test.sh cross_nested_access_check_17_${I} valid "$OP" private assembly no
1647         ./make_cross_nested_access_test.sh cross_nested_access_check_18_${I} valid "$OP" private assembly yes
1648         ./make_cross_nested_access_test.sh cross_nested_access_check_19_${I} unverifiable "$OP" private famandassem no
1649         ./make_cross_nested_access_test.sh cross_nested_access_check_1b_${I} valid "$OP" private famorassem no
1650         ./make_cross_nested_access_test.sh cross_nested_access_check_1c_${I} valid "$OP" private famorassem yes
1651
1652         ./make_cross_nested_access_test.sh cross_nested_access_check_21_${I} valid "$OP" family public no
1653         ./make_cross_nested_access_test.sh cross_nested_access_check_22_${I} valid "$OP" family public yes
1654         ./make_cross_nested_access_test.sh cross_nested_access_check_23_${I} unverifiable "$OP" family private no
1655         ./make_cross_nested_access_test.sh cross_nested_access_check_24_${I} unverifiable "$OP" family private yes
1656         ./make_cross_nested_access_test.sh cross_nested_access_check_25_${I} unverifiable "$OP" family family no
1657         ./make_cross_nested_access_test.sh cross_nested_access_check_27_${I} valid "$OP" family assembly no
1658         ./make_cross_nested_access_test.sh cross_nested_access_check_28_${I} valid "$OP" family assembly yes
1659         ./make_cross_nested_access_test.sh cross_nested_access_check_29_${I} unverifiable "$OP" family famandassem no
1660         ./make_cross_nested_access_test.sh cross_nested_access_check_2b_${I} valid "$OP" family famorassem no
1661         ./make_cross_nested_access_test.sh cross_nested_access_check_2c_${I} valid "$OP" family famorassem yes
1662
1663         ./make_cross_nested_access_test.sh cross_nested_access_check_31_${I} valid "$OP" assembly public no
1664         ./make_cross_nested_access_test.sh cross_nested_access_check_32_${I} valid "$OP" assembly public yes
1665         ./make_cross_nested_access_test.sh cross_nested_access_check_33_${I} unverifiable "$OP" assembly private no
1666         ./make_cross_nested_access_test.sh cross_nested_access_check_34_${I} unverifiable "$OP" assembly private yes
1667         ./make_cross_nested_access_test.sh cross_nested_access_check_35_${I} unverifiable "$OP" assembly family no
1668         ./make_cross_nested_access_test.sh cross_nested_access_check_37_${I} valid "$OP" assembly assembly no
1669         ./make_cross_nested_access_test.sh cross_nested_access_check_38_${I} valid "$OP" assembly assembly yes
1670         ./make_cross_nested_access_test.sh cross_nested_access_check_39_${I} unverifiable "$OP" assembly famandassem no
1671         ./make_cross_nested_access_test.sh cross_nested_access_check_3b_${I} valid "$OP" assembly famorassem no
1672         ./make_cross_nested_access_test.sh cross_nested_access_check_3c_${I} valid "$OP" assembly famorassem yes
1673
1674         ./make_cross_nested_access_test.sh cross_nested_access_check_41_${I} valid "$OP" famandassem public no
1675         ./make_cross_nested_access_test.sh cross_nested_access_check_42_${I} valid "$OP" famandassem public yes
1676         ./make_cross_nested_access_test.sh cross_nested_access_check_43_${I} unverifiable "$OP" famandassem private no
1677         ./make_cross_nested_access_test.sh cross_nested_access_check_44_${I} unverifiable "$OP" famandassem private yes
1678         ./make_cross_nested_access_test.sh cross_nested_access_check_45_${I} unverifiable "$OP" famandassem family no
1679         ./make_cross_nested_access_test.sh cross_nested_access_check_47_${I} valid "$OP" famandassem assembly no
1680         ./make_cross_nested_access_test.sh cross_nested_access_check_48_${I} valid "$OP" famandassem assembly yes
1681         ./make_cross_nested_access_test.sh cross_nested_access_check_49_${I} unverifiable "$OP" famandassem famandassem no
1682         ./make_cross_nested_access_test.sh cross_nested_access_check_4b_${I} valid "$OP" famandassem famorassem no
1683         ./make_cross_nested_access_test.sh cross_nested_access_check_4c_${I} valid "$OP" famandassem famorassem yes
1684
1685         ./make_cross_nested_access_test.sh cross_nested_access_check_51_${I} valid "$OP" famorassem public no
1686         ./make_cross_nested_access_test.sh cross_nested_access_check_52_${I} valid "$OP" famorassem public yes
1687         ./make_cross_nested_access_test.sh cross_nested_access_check_53_${I} unverifiable "$OP" famorassem private no
1688         ./make_cross_nested_access_test.sh cross_nested_access_check_54_${I} unverifiable "$OP" famorassem private yes
1689         ./make_cross_nested_access_test.sh cross_nested_access_check_55_${I} unverifiable "$OP" famorassem family no
1690         ./make_cross_nested_access_test.sh cross_nested_access_check_57_${I} valid "$OP" famorassem assembly no
1691         ./make_cross_nested_access_test.sh cross_nested_access_check_58_${I} valid "$OP" famorassem assembly yes
1692         ./make_cross_nested_access_test.sh cross_nested_access_check_59_${I} unverifiable "$OP" famorassem famandassem no
1693         ./make_cross_nested_access_test.sh cross_nested_access_check_5b_${I} valid "$OP" famorassem famorassem no
1694         ./make_cross_nested_access_test.sh cross_nested_access_check_5c_${I} valid "$OP" famorassem famorassem yes
1695         I=`expr $I + 1`
1696 done
1697
1698
1699 I=1
1700 for OP in "callvirt instance int32 class Owner\/Nested::Target()" "call instance int32 class Owner\/Nested::Target()" "ldc.i4.0\n\t\tstfld int32 Owner\/Nested::fld\n\t\tldc.i4.0" "ldc.i4.0\n\t\tstsfld int32 Owner\/Nested::sfld" "ldsfld int32 Owner\/Nested::sfld\n\n\tpop" "ldfld int32 Owner\/Nested::fld" "ldsflda int32 Owner\/Nested::sfld\n\n\tpop" "ldflda int32 Owner\/Nested::fld"
1701 do
1702         ./make_cross_nested_access_test.sh cross_nested_access_check_2a_${I} valid "$OP" public public yes yes
1703         ./make_cross_nested_access_test.sh cross_nested_access_check_4a_${I} unverifiable "$OP" public private yes yes
1704         ./make_cross_nested_access_test.sh cross_nested_access_check_8a_${I} valid "$OP" public assembly yes yes
1705         ./make_cross_nested_access_test.sh cross_nested_access_check_ca_${I} valid "$OP" public famorassem yes yes
1706
1707         ./make_cross_nested_access_test.sh cross_nested_access_check_12a_${I} valid "$OP" private public yes yes
1708         ./make_cross_nested_access_test.sh cross_nested_access_check_14a_${I} unverifiable "$OP" private private yes yes
1709         ./make_cross_nested_access_test.sh cross_nested_access_check_18a_${I} valid "$OP" private assembly yes yes
1710         ./make_cross_nested_access_test.sh cross_nested_access_check_1ca_${I} valid "$OP" private famorassem yes yes
1711
1712         ./make_cross_nested_access_test.sh cross_nested_access_check_22a_${I} valid "$OP" family public yes yes
1713         ./make_cross_nested_access_test.sh cross_nested_access_check_24a_${I} unverifiable "$OP" family private yes yes
1714         ./make_cross_nested_access_test.sh cross_nested_access_check_28a_${I} valid "$OP" family assembly yes yes
1715         ./make_cross_nested_access_test.sh cross_nested_access_check_2ca_${I} valid "$OP" family famorassem yes yes
1716
1717         ./make_cross_nested_access_test.sh cross_nested_access_check_32a_${I} valid "$OP" assembly public yes yes
1718         ./make_cross_nested_access_test.sh cross_nested_access_check_34a_${I} unverifiable "$OP" assembly private yes yes
1719         ./make_cross_nested_access_test.sh cross_nested_access_check_38a_${I} valid "$OP" assembly assembly yes yes
1720         ./make_cross_nested_access_test.sh cross_nested_access_check_3ca_${I} valid "$OP" assembly famorassem yes yes
1721
1722         ./make_cross_nested_access_test.sh cross_nested_access_check_42a_${I} valid "$OP" famandassem public yes yes
1723         ./make_cross_nested_access_test.sh cross_nested_access_check_44a_${I} unverifiable "$OP" famandassem private yes yes
1724         ./make_cross_nested_access_test.sh cross_nested_access_check_48a_${I} valid "$OP" famandassem assembly yes yes
1725         ./make_cross_nested_access_test.sh cross_nested_access_check_4ca_${I} valid "$OP" famandassem famorassem yes yes
1726
1727         ./make_cross_nested_access_test.sh cross_nested_access_check_52a_${I} valid "$OP" famorassem public yes yes
1728         ./make_cross_nested_access_test.sh cross_nested_access_check_54a_${I} unverifiable "$OP" famorassem private yes yes
1729         ./make_cross_nested_access_test.sh cross_nested_access_check_58a_${I} valid "$OP" famorassem assembly yes yes
1730         ./make_cross_nested_access_test.sh cross_nested_access_check_5ca_${I} valid "$OP" famorassem famorassem yes yes
1731         I=`expr $I + 1`
1732 done
1733
1734
1735 I=1
1736 for OP in "callvirt instance int32 class Owner\/Nested::Target()" "call instance int32 class Owner\/Nested::Target()" "ldc.i4.0\n\t\tstfld int32 Owner\/Nested::fld\n\t\tldc.i4.0" "ldfld int32 Owner\/Nested::fld" "ldflda int32 Owner\/Nested::fld"
1737 do
1738         ./make_cross_nested_access_test.sh cross_nested_access_check_6_${I} unverifiable "$OP" public family yes
1739         ./make_cross_nested_access_test.sh cross_nested_access_check_6a_${I} valid "$OP" public family yes yes
1740         ./make_cross_nested_access_test.sh cross_nested_access_check_a_${I} unverifiable "$OP" public famandassem yes
1741         ./make_cross_nested_access_test.sh cross_nested_access_check_aa_${I} valid "$OP" public famandassem yes yes
1742
1743         ./make_cross_nested_access_test.sh cross_nested_access_check_16_${I} unverifiable "$OP" private family yes
1744         ./make_cross_nested_access_test.sh cross_nested_access_check_16a_${I} valid "$OP" private family yes yes
1745         ./make_cross_nested_access_test.sh cross_nested_access_check_1a_${I} unverifiable "$OP" private famandassem yes
1746         ./make_cross_nested_access_test.sh cross_nested_access_check_1aa_${I} valid "$OP" private famandassem yes yes
1747
1748         ./make_cross_nested_access_test.sh cross_nested_access_check_26_${I} unverifiable "$OP" family family yes
1749         ./make_cross_nested_access_test.sh cross_nested_access_check_26a_${I} valid "$OP" family family yes yes
1750         ./make_cross_nested_access_test.sh cross_nested_access_check_2a_${I} unverifiable "$OP" family famandassem yes
1751         ./make_cross_nested_access_test.sh cross_nested_access_check_2aa_${I} valid "$OP" family famandassem yes yes
1752
1753         ./make_cross_nested_access_test.sh cross_nested_access_check_36_${I} unverifiable "$OP" assembly family yes
1754         ./make_cross_nested_access_test.sh cross_nested_access_check_36a_${I} valid "$OP" assembly family yes yes
1755         ./make_cross_nested_access_test.sh cross_nested_access_check_3a_${I} unverifiable "$OP" assembly famandassem yes
1756         ./make_cross_nested_access_test.sh cross_nested_access_check_3aa_${I} valid "$OP" assembly famandassem yes yes
1757
1758         ./make_cross_nested_access_test.sh cross_nested_access_check_46_${I} unverifiable "$OP" famandassem family yes
1759         ./make_cross_nested_access_test.sh cross_nested_access_check_46a_${I} valid "$OP" famandassem family yes yes
1760         ./make_cross_nested_access_test.sh cross_nested_access_check_4a_${I} unverifiable "$OP" famandassem famandassem yes
1761         ./make_cross_nested_access_test.sh cross_nested_access_check_4aa_${I} valid "$OP" famandassem famandassem yes yes
1762
1763         ./make_cross_nested_access_test.sh cross_nested_access_check_56_${I} unverifiable "$OP" famorassem family yes
1764         ./make_cross_nested_access_test.sh cross_nested_access_check_56a_${I} valid "$OP" famorassem family yes yes
1765         ./make_cross_nested_access_test.sh cross_nested_access_check_5a_${I} unverifiable "$OP" famorassem famandassem yes
1766         ./make_cross_nested_access_test.sh cross_nested_access_check_5aa_${I} valid "$OP" famorassem famandassem yes yes
1767
1768         I=`expr $I + 1`
1769 done
1770
1771 for OP in "ldc.i4.0\n\t\tstsfld int32 Owner\/Nested::sfld" "ldsfld int32 Owner\/Nested::sfld\n\n\tpop" "ldsflda int32 Owner\/Nested::sfld\n\n\tpop"
1772 do
1773         ./make_cross_nested_access_test.sh cross_nested_access_check_6_${I} valid "$OP" public family yes
1774         ./make_cross_nested_access_test.sh cross_nested_access_check_6a_${I} valid "$OP" public family yes yes
1775         ./make_cross_nested_access_test.sh cross_nested_access_check_a_${I} valid "$OP" public famandassem yes
1776         ./make_cross_nested_access_test.sh cross_nested_access_check_aa_${I} valid "$OP" public famandassem yes yes
1777
1778         ./make_cross_nested_access_test.sh cross_nested_access_check_16_${I} valid "$OP" private family yes
1779         ./make_cross_nested_access_test.sh cross_nested_access_check_16a_${I} valid "$OP" private family yes yes
1780         ./make_cross_nested_access_test.sh cross_nested_access_check_1a_${I} valid "$OP" private famandassem yes
1781         ./make_cross_nested_access_test.sh cross_nested_access_check_1aa_${I} valid "$OP" private famandassem yes yes
1782
1783         ./make_cross_nested_access_test.sh cross_nested_access_check_26_${I} valid "$OP" family family yes
1784         ./make_cross_nested_access_test.sh cross_nested_access_check_26a_${I} valid "$OP" family family yes yes
1785         ./make_cross_nested_access_test.sh cross_nested_access_check_2a_${I} valid "$OP" family famandassem yes
1786         ./make_cross_nested_access_test.sh cross_nested_access_check_2aa_${I} valid "$OP" family famandassem yes yes
1787
1788         ./make_cross_nested_access_test.sh cross_nested_access_check_36_${I} valid "$OP" assembly family yes
1789         ./make_cross_nested_access_test.sh cross_nested_access_check_36a_${I} valid "$OP" assembly family yes yes
1790         ./make_cross_nested_access_test.sh cross_nested_access_check_3a_${I} valid "$OP" assembly famandassem yes
1791         ./make_cross_nested_access_test.sh cross_nested_access_check_3aa_${I} valid "$OP" assembly famandassem yes yes
1792
1793         ./make_cross_nested_access_test.sh cross_nested_access_check_46_${I} valid "$OP" famandassem family yes
1794         ./make_cross_nested_access_test.sh cross_nested_access_check_46a_${I} valid "$OP" famandassem family yes yes
1795         ./make_cross_nested_access_test.sh cross_nested_access_check_4a_${I} valid "$OP" famandassem famandassem yes
1796         ./make_cross_nested_access_test.sh cross_nested_access_check_4aa_${I} valid "$OP" famandassem famandassem yes yes
1797
1798         ./make_cross_nested_access_test.sh cross_nested_access_check_56_${I} valid "$OP" famorassem family yes
1799         ./make_cross_nested_access_test.sh cross_nested_access_check_56a_${I} valid "$OP" famorassem family yes yes
1800         ./make_cross_nested_access_test.sh cross_nested_access_check_5a_${I} valid "$OP" famorassem famandassem yes
1801         ./make_cross_nested_access_test.sh cross_nested_access_check_5aa_${I} valid "$OP" famorassem famandassem yes yes
1802
1803         I=`expr $I + 1`
1804 done
1805
1806
1807
1808 I=1
1809 for OP in "ldc.i4.0\n\t\tstfld int32 Class::fld\n\t\tldc.i4.0" "ldc.i4.0\n\t\tstsfld int32 Class::sfld" "ldsfld int32 Class::sfld\n\n\tpop" "ldfld int32 Class::fld" "ldsflda int32 Class::sfld\n\n\tpop" "ldflda int32 Class::fld" "call instance int32 Class::Method()" "callvirt int32 Class::Method()"
1810 do
1811         ./make_access_test.sh access_check_1_${I} valid "$OP" public public no
1812         ./make_access_test.sh access_check_2_${I} valid "$OP" public public yes
1813         ./make_access_test.sh access_check_3_${I} unverifiable "$OP" public private no
1814         ./make_access_test.sh access_check_4_${I} unverifiable "$OP" public private yes
1815         ./make_access_test.sh access_check_5_${I} unverifiable "$OP" public family no
1816         ./make_access_test.sh access_check_7_${I} valid "$OP" public assembly no
1817         ./make_access_test.sh access_check_8_${I} valid "$OP" public assembly yes
1818         ./make_access_test.sh access_check_9_${I} unverifiable "$OP" public famandassem no
1819         ./make_access_test.sh access_check_b_${I} valid "$OP" public famorassem no
1820         ./make_access_test.sh access_check_c_${I} valid "$OP" public famorassem yes
1821
1822         ./make_access_test.sh access_check_11_${I} valid "$OP" private public no
1823         ./make_access_test.sh access_check_12_${I} valid "$OP" private public yes
1824         ./make_access_test.sh access_check_13_${I} unverifiable "$OP" private private no
1825         ./make_access_test.sh access_check_14_${I} unverifiable "$OP" private private yes
1826         ./make_access_test.sh access_check_15_${I} unverifiable "$OP" private family no
1827         ./make_access_test.sh access_check_17_${I} valid "$OP" private assembly no
1828         ./make_access_test.sh access_check_18_${I} valid "$OP" private assembly yes
1829         ./make_access_test.sh access_check_19_${I} unverifiable "$OP" private famandassem no
1830         ./make_access_test.sh access_check_1b_${I} valid "$OP" private famorassem no
1831         ./make_access_test.sh access_check_1c_${I} valid "$OP" private famorassem yes
1832
1833         ./make_access_test.sh access_check_31_${I} valid "$OP" " " public no
1834         ./make_access_test.sh access_check_32_${I} valid "$OP" " " public yes
1835         ./make_access_test.sh access_check_33_${I} unverifiable "$OP" " " private no
1836         ./make_access_test.sh access_check_34_${I} unverifiable "$OP" " " private yes
1837         ./make_access_test.sh access_check_35_${I} unverifiable "$OP" " " family no
1838         ./make_access_test.sh access_check_37_${I} valid "$OP" " " assembly no
1839         ./make_access_test.sh access_check_38_${I} valid "$OP" " " assembly yes
1840         ./make_access_test.sh access_check_39_${I} unverifiable "$OP" " " famandassem no
1841         ./make_access_test.sh access_check_3b_${I} valid "$OP" " " famorassem no
1842         ./make_access_test.sh access_check_3c_${I} valid "$OP" " " famorassem yes
1843
1844         I=`expr $I + 1`
1845 done
1846
1847 #static members are different from instance members
1848 I=1
1849 for OP in "ldc.i4.0\n\t\tstsfld int32 Class::sfld" "ldsfld int32 Class::sfld\n\n\tpop" "ldsflda int32 Class::sfld\n\n\tpop" 
1850 do
1851         ./make_access_test.sh access_check_41_${I} valid "$OP" public family yes
1852         ./make_access_test.sh access_check_42_${I} valid "$OP" public famandassem yes
1853         ./make_access_test.sh access_check_43_${I} valid "$OP" private family yes
1854         ./make_access_test.sh access_check_44_${I} valid "$OP" private famandassem yes
1855         ./make_access_test.sh access_check_45_${I} valid "$OP" " " family yes
1856         ./make_access_test.sh access_check_46_${I} valid "$OP" " " famandassem yes
1857         I=`expr $I + 1`
1858 done
1859
1860 #try to access the base stuff directly
1861 I=1
1862 for OP in "ldc.i4.0\n\t\tstfld int32 Class::fld\n\t\tldc.i4.0" "ldfld int32 Class::fld" "ldflda int32 Class::fld" "call instance int32 Class::Method()" "callvirt int32 Class::Method()"
1863 do
1864         ./make_access_test.sh access_check_51_${I} unverifiable "$OP" public family yes
1865         ./make_access_test.sh access_check_52_${I} unverifiable "$OP" public famandassem yes
1866         ./make_access_test.sh access_check_53_${I} unverifiable "$OP" private family yes
1867         ./make_access_test.sh access_check_54_${I} unverifiable "$OP" private famandassem yes
1868         ./make_access_test.sh access_check_55_${I} unverifiable "$OP" " " family yes
1869         ./make_access_test.sh access_check_56_${I} unverifiable "$OP" " " famandassem yes
1870         I=`expr $I + 1`
1871 done
1872
1873 #try to access the subclass stuff
1874 I=1
1875 for OP in "ldc.i4.0\n\t\tstfld int32 Class::fld\n\t\tldc.i4.0" "ldfld int32 Class::fld" "ldflda int32 Class::fld" "call instance int32 Class::Method()" "callvirt int32 Class::Method()"
1876 do
1877         ./make_access_test.sh access_check_61_${I} valid "$OP" public family yes yes
1878         ./make_access_test.sh access_check_62_${I} valid "$OP" public famandassem yes yes
1879         ./make_access_test.sh access_check_63_${I} valid "$OP" private family yes yes
1880         ./make_access_test.sh access_check_64_${I} valid "$OP" private famandassem yes yes
1881         ./make_access_test.sh access_check_65_${I} valid "$OP" " " family yes yes
1882         ./make_access_test.sh access_check_66_${I} valid "$OP" " " famandassem yes yes
1883         I=`expr $I + 1`
1884 done
1885
1886
1887 function create_nesting_test_same_result () {
1888   K=$1
1889   for BASE in yes no
1890   do
1891     for NESTED in yes no
1892       do
1893         for LOAD in yes no
1894         do
1895           if ! ( [ "$NESTED" = "no" ] && [ "$LOAD" = "yes" ] ) ; then
1896             ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $2 "$OP" $3 $4 $5 "$BASE" "$NESTED" "$LOAD"
1897             K=`expr $K + 1`
1898           fi
1899       done
1900     done
1901   done
1902 }
1903
1904 function create_nesting_test_only_first_ok () {
1905   FIRST=$1
1906   K=$1
1907   for BASE in yes no
1908   do
1909     for NESTED in yes no
1910       do
1911         for LOAD in yes no
1912         do
1913           if ! ( [ "$NESTED" = "no" ] && [ "$LOAD" = "yes" ] ) ; then
1914                EXPECT=unverifiable
1915            if [ "$FIRST" = "$K" ]; then
1916               EXPECT=valid
1917            fi
1918            ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $EXPECT "$OP" $2 $3 $4 "$BASE" "$NESTED" "$LOAD"
1919            K=`expr $K + 1`
1920          fi
1921      done
1922     done
1923   done
1924 }
1925
1926 I=1
1927
1928 for OP in "callvirt instance int32 class Root\/Nested::Target()" "ldc.i4.0\n\t\tstfld int32 Root\/Nested::fld\n\t\tldc.i4.0" "ldfld int32 Root\/Nested::fld" "ldflda int32 Root\/Nested::fld"
1929 do
1930   create_nesting_test_same_result 1 valid public assembly assembly
1931
1932   ./make_double_nesting_test.sh double_nesting_access_check_7_$I valid "$OP" public assembly family yes yes yes
1933   ./make_double_nesting_test.sh double_nesting_access_check_8_$I unverifiable "$OP" public assembly family yes yes no
1934   ./make_double_nesting_test.sh double_nesting_access_check_9_$I unverifiable "$OP" public assembly family yes no no
1935   ./make_double_nesting_test.sh double_nesting_access_check_10_$I valid "$OP" public assembly family no yes yes
1936   ./make_double_nesting_test.sh double_nesting_access_check_11_$I unverifiable "$OP" public assembly family no yes no
1937   ./make_double_nesting_test.sh double_nesting_access_check_12_$I unverifiable "$OP" public assembly family no no no
1938
1939   ./make_double_nesting_test.sh double_nesting_access_check_13_$I valid "$OP" public assembly famandassem yes yes yes
1940   ./make_double_nesting_test.sh double_nesting_access_check_14_$I unverifiable "$OP" public assembly famandassem yes yes no
1941   ./make_double_nesting_test.sh double_nesting_access_check_15_$I unverifiable "$OP" public assembly famandassem yes no no
1942   ./make_double_nesting_test.sh double_nesting_access_check_16_$I valid "$OP" public assembly famandassem no yes yes
1943   ./make_double_nesting_test.sh double_nesting_access_check_17_$I unverifiable "$OP" public assembly famandassem no yes no
1944   ./make_double_nesting_test.sh double_nesting_access_check_18_$I unverifiable "$OP" public assembly famandassem no no no
1945
1946   create_nesting_test_same_result 19 valid public assembly famorassem
1947   create_nesting_test_same_result 25 unverifiable public assembly private
1948   create_nesting_test_same_result 31 valid public assembly public
1949
1950   ./make_double_nesting_test.sh double_nesting_access_check_37_$I valid "$OP" public family assembly yes yes yes
1951   ./make_double_nesting_test.sh double_nesting_access_check_38_$I valid "$OP" public family assembly yes yes no
1952   ./make_double_nesting_test.sh double_nesting_access_check_39_$I valid "$OP" public family assembly yes no no
1953   ./make_double_nesting_test.sh double_nesting_access_check_40_$I unverifiable "$OP" public family assembly no yes yes
1954   ./make_double_nesting_test.sh double_nesting_access_check_41_$I unverifiable "$OP" public family assembly no yes no
1955   ./make_double_nesting_test.sh double_nesting_access_check_42_$I unverifiable "$OP" public family assembly no no no
1956
1957   create_nesting_test_only_first_ok 43 public family family
1958   create_nesting_test_only_first_ok 49 public family famandassem
1959
1960   ./make_double_nesting_test.sh double_nesting_access_check_55_$I valid "$OP" public family famorassem yes yes yes
1961   ./make_double_nesting_test.sh double_nesting_access_check_56_$I valid "$OP" public family famorassem yes yes no
1962   ./make_double_nesting_test.sh double_nesting_access_check_57_$I valid "$OP" public family famorassem yes no no
1963   ./make_double_nesting_test.sh double_nesting_access_check_58_$I unverifiable "$OP" public family famorassem no yes yes
1964   ./make_double_nesting_test.sh double_nesting_access_check_59_$I unverifiable "$OP" public family famorassem no yes no
1965   ./make_double_nesting_test.sh double_nesting_access_check_60_$I unverifiable "$OP" public family famorassem no no no
1966
1967    create_nesting_test_same_result 61 unverifiable public family private
1968
1969   ./make_double_nesting_test.sh double_nesting_access_check_67_$I valid "$OP" public family public yes yes yes
1970   ./make_double_nesting_test.sh double_nesting_access_check_68_$I valid "$OP" public family public yes yes no
1971   ./make_double_nesting_test.sh double_nesting_access_check_69_$I valid "$OP" public family public yes no no
1972   ./make_double_nesting_test.sh double_nesting_access_check_70_$I unverifiable "$OP" public family public no yes yes
1973   ./make_double_nesting_test.sh double_nesting_access_check_71_$I unverifiable "$OP" public family public no yes no
1974   ./make_double_nesting_test.sh double_nesting_access_check_72_$I unverifiable "$OP" public family public no no no
1975
1976   ./make_double_nesting_test.sh double_nesting_access_check_73_$I valid "$OP" public famandassem assembly yes yes yes
1977   ./make_double_nesting_test.sh double_nesting_access_check_74_$I valid "$OP" public famandassem assembly yes yes no
1978   ./make_double_nesting_test.sh double_nesting_access_check_75_$I valid "$OP" public famandassem assembly yes no no
1979   ./make_double_nesting_test.sh double_nesting_access_check_76_$I unverifiable "$OP" public famandassem assembly no yes yes
1980   ./make_double_nesting_test.sh double_nesting_access_check_77_$I unverifiable "$OP" public famandassem assembly no yes no
1981   ./make_double_nesting_test.sh double_nesting_access_check_78_$I unverifiable "$OP" public famandassem assembly no no no
1982
1983   create_nesting_test_only_first_ok 79  public famandassem family
1984   create_nesting_test_only_first_ok 85  public famandassem famandassem
1985
1986   ./make_double_nesting_test.sh double_nesting_access_check_91_$I valid "$OP" public famandassem famorassem yes yes yes
1987   ./make_double_nesting_test.sh double_nesting_access_check_92_$I valid "$OP" public famandassem famorassem yes yes no
1988   ./make_double_nesting_test.sh double_nesting_access_check_93_$I valid "$OP" public famandassem famorassem yes no no
1989   ./make_double_nesting_test.sh double_nesting_access_check_94_$I unverifiable "$OP" public famandassem famorassem no yes yes
1990   ./make_double_nesting_test.sh double_nesting_access_check_95_$I unverifiable "$OP" public famandassem famorassem no yes no
1991   ./make_double_nesting_test.sh double_nesting_access_check_96_$I unverifiable "$OP" public famandassem famorassem no no no
1992
1993    create_nesting_test_same_result 97 unverifiable public famandassem private
1994
1995   ./make_double_nesting_test.sh double_nesting_access_check_103_$I valid "$OP" public famandassem public yes yes yes
1996   ./make_double_nesting_test.sh double_nesting_access_check_104_$I valid "$OP" public famandassem public yes yes no
1997   ./make_double_nesting_test.sh double_nesting_access_check_105_$I valid "$OP" public famandassem public yes no no
1998   ./make_double_nesting_test.sh double_nesting_access_check_106_$I unverifiable "$OP" public famandassem public no yes yes
1999   ./make_double_nesting_test.sh double_nesting_access_check_107_$I unverifiable "$OP" public famandassem public no yes no
2000   ./make_double_nesting_test.sh double_nesting_access_check_108_$I unverifiable "$OP" public famandassem public no no no
2001
2002   create_nesting_test_same_result 109 valid public famorassem assembly
2003
2004   ./make_double_nesting_test.sh double_nesting_access_check_115_$I valid "$OP" public famorassem family yes yes yes
2005   ./make_double_nesting_test.sh double_nesting_access_check_116_$I unverifiable "$OP" public famorassem family yes yes no
2006   ./make_double_nesting_test.sh double_nesting_access_check_117_$I unverifiable "$OP" public famorassem family yes no no
2007   ./make_double_nesting_test.sh double_nesting_access_check_118_$I valid "$OP" public famorassem family no yes yes
2008   ./make_double_nesting_test.sh double_nesting_access_check_119_$I unverifiable "$OP" public famorassem family no yes no
2009   ./make_double_nesting_test.sh double_nesting_access_check_120_$I unverifiable "$OP" public famorassem family no no no
2010
2011   ./make_double_nesting_test.sh double_nesting_access_check_121_$I valid "$OP" public famorassem famandassem yes yes yes
2012   ./make_double_nesting_test.sh double_nesting_access_check_122_$I unverifiable "$OP" public famorassem famandassem yes yes no
2013   ./make_double_nesting_test.sh double_nesting_access_check_123_$I unverifiable "$OP" public famorassem famandassem yes no no
2014   ./make_double_nesting_test.sh double_nesting_access_check_124_$I valid "$OP" public famorassem famandassem no yes yes
2015   ./make_double_nesting_test.sh double_nesting_access_check_125_$I unverifiable "$OP" public famorassem famandassem no yes no
2016   ./make_double_nesting_test.sh double_nesting_access_check_126_$I unverifiable "$OP" public famorassem famandassem no no no
2017
2018   create_nesting_test_same_result 127 valid public famorassem famorassem
2019   create_nesting_test_same_result 133 unverifiable public famorassem private
2020   create_nesting_test_same_result 139 valid public famorassem public
2021   create_nesting_test_same_result 145 unverifiable public private assembly
2022   create_nesting_test_same_result 151 unverifiable public private family
2023   create_nesting_test_same_result 157 unverifiable public private famandassem
2024   create_nesting_test_same_result 163 unverifiable public private famorassem
2025   create_nesting_test_same_result 169 unverifiable public private private
2026   create_nesting_test_same_result 175 unverifiable public private public
2027   create_nesting_test_same_result 181 valid public public assembly
2028
2029   ./make_double_nesting_test.sh double_nesting_access_check_187_$I valid "$OP" public public family yes yes yes
2030   ./make_double_nesting_test.sh double_nesting_access_check_188_$I unverifiable "$OP" public public family yes yes no
2031   ./make_double_nesting_test.sh double_nesting_access_check_189_$I unverifiable "$OP" public public family yes no no
2032   ./make_double_nesting_test.sh double_nesting_access_check_190_$I valid "$OP" public public family no yes yes
2033   ./make_double_nesting_test.sh double_nesting_access_check_191_$I unverifiable "$OP" public public family no yes no
2034   ./make_double_nesting_test.sh double_nesting_access_check_192_$I unverifiable "$OP" public public family no no no
2035
2036   ./make_double_nesting_test.sh double_nesting_access_check_193_$I valid "$OP" public public famandassem yes yes yes
2037   ./make_double_nesting_test.sh double_nesting_access_check_194_$I unverifiable "$OP" public public famandassem yes yes no
2038   ./make_double_nesting_test.sh double_nesting_access_check_195_$I unverifiable "$OP" public public famandassem yes no no
2039   ./make_double_nesting_test.sh double_nesting_access_check_196_$I valid "$OP" public public famandassem no yes yes
2040   ./make_double_nesting_test.sh double_nesting_access_check_197_$I unverifiable "$OP" public public famandassem no yes no
2041   ./make_double_nesting_test.sh double_nesting_access_check_198_$I unverifiable "$OP" public public famandassem no no no
2042
2043   create_nesting_test_same_result 199 valid public public famorassem
2044   create_nesting_test_same_result 205 unverifiable public public private
2045   create_nesting_test_same_result 211 valid public public public
2046   I=`expr $I + 1`
2047 done
2048
2049 function create_nesting_test_same_result_static () {
2050   K=$1
2051   for BASE in yes no
2052   do
2053     for NESTED in yes no
2054       do
2055         ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $2 "$OP" $3 $4 $5 "$BASE" "$NESTED" yes
2056         K=`expr $K + 1`
2057     done
2058   done
2059 }
2060
2061 function create_nesting_test_strips_result_static () {
2062   K=$1
2063   for BASE in yes no
2064   do
2065     for NESTED in yes no
2066       do
2067         EXPECT=unverifiable
2068         if [ "$NESTED" = "yes" ]; then
2069           EXPECT=valid
2070         fi
2071         ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $EXPECT "$OP" $2 $3 $4 "$BASE" "$NESTED" yes
2072         K=`expr $K + 1`
2073     done
2074   done
2075 }
2076
2077 for OP in "ldc.i4.0\n\t\tstsfld int32 Root\/Nested::sfld" "ldsfld int32 Root\/Nested::sfld\n\n\tpop" "ldsflda int32 Root\/Nested::sfld\n\n\tpop"
2078 do
2079    create_nesting_test_same_result 1 valid public assembly assembly
2080
2081   create_nesting_test_strips_result_static 5 public assembly family
2082   create_nesting_test_strips_result_static 9 public assembly family
2083
2084   create_nesting_test_same_result 13 valid public assembly famorassem
2085   create_nesting_test_same_result 17 unverifiable public assembly private
2086   create_nesting_test_same_result 21 valid public assembly public
2087
2088   ./make_double_nesting_test.sh double_nesting_access_check_25_$I valid "$OP" public family assembly yes yes yes
2089   ./make_double_nesting_test.sh double_nesting_access_check_26_$I valid "$OP" public family assembly yes no yes
2090   ./make_double_nesting_test.sh double_nesting_access_check_27_$I unverifiable "$OP" public family assembly no yes yes
2091   ./make_double_nesting_test.sh double_nesting_access_check_27_$I unverifiable "$OP" public family assembly no no yes
2092
2093   ./make_double_nesting_test.sh double_nesting_access_check_29_$I valid "$OP" public family family yes yes yes
2094   ./make_double_nesting_test.sh double_nesting_access_check_30_$I unverifiable "$OP" public family family yes no yes
2095   ./make_double_nesting_test.sh double_nesting_access_check_31_$I unverifiable "$OP" public family family no yes yes
2096   ./make_double_nesting_test.sh double_nesting_access_check_32_$I unverifiable "$OP" public family family no no yes
2097
2098   ./make_double_nesting_test.sh double_nesting_access_check_33_$I valid "$OP" public family famandassem yes yes yes
2099   ./make_double_nesting_test.sh double_nesting_access_check_34_$I unverifiable "$OP" public family famandassem yes no yes
2100   ./make_double_nesting_test.sh double_nesting_access_check_35_$I unverifiable "$OP" public family famandassem no yes yes
2101   ./make_double_nesting_test.sh double_nesting_access_check_36_$I unverifiable "$OP" public family famandassem no no yes
2102
2103   ./make_double_nesting_test.sh double_nesting_access_check_37_$I valid "$OP" public family famorassem yes yes yes
2104   ./make_double_nesting_test.sh double_nesting_access_check_38_$I valid "$OP" public family famorassem yes no yes
2105   ./make_double_nesting_test.sh double_nesting_access_check_39_$I unverifiable "$OP" public family famorassem no yes yes
2106   ./make_double_nesting_test.sh double_nesting_access_check_40_$I unverifiable "$OP" public family famorassem no no yes
2107
2108    create_nesting_test_same_result 41 unverifiable public family private
2109
2110   ./make_double_nesting_test.sh double_nesting_access_check_45_$I valid "$OP" public family public yes yes yes
2111   ./make_double_nesting_test.sh double_nesting_access_check_46_$I valid "$OP" public family public yes no yes
2112   ./make_double_nesting_test.sh double_nesting_access_check_47_$I unverifiable "$OP" public family public no yes yes
2113   ./make_double_nesting_test.sh double_nesting_access_check_48_$I unverifiable "$OP" public family public no no yes
2114
2115   ./make_double_nesting_test.sh double_nesting_access_check_49_$I valid "$OP" public famandassem assembly yes yes yes
2116   ./make_double_nesting_test.sh double_nesting_access_check_50_$I valid "$OP" public famandassem assembly yes no yes
2117   ./make_double_nesting_test.sh double_nesting_access_check_51_$I unverifiable "$OP" public famandassem assembly no yes yes
2118   ./make_double_nesting_test.sh double_nesting_access_check_52_$I unverifiable "$OP" public famandassem assembly no no yes
2119
2120   ./make_double_nesting_test.sh double_nesting_access_check_53_$I valid "$OP" public famandassem family yes yes yes
2121   ./make_double_nesting_test.sh double_nesting_access_check_54_$I unverifiable "$OP" public famandassem family yes no yes
2122   ./make_double_nesting_test.sh double_nesting_access_check_55_$I unverifiable "$OP" public famandassem family no yes yes
2123   ./make_double_nesting_test.sh double_nesting_access_check_56_$I unverifiable "$OP" public famandassem family no no yes
2124
2125   ./make_double_nesting_test.sh double_nesting_access_check_57_$I valid "$OP" public famandassem famandassem yes yes yes
2126   ./make_double_nesting_test.sh double_nesting_access_check_58_$I unverifiable "$OP" public famandassem famandassem yes no yes
2127   ./make_double_nesting_test.sh double_nesting_access_check_59_$I unverifiable "$OP" public famandassem famandassem no yes yes
2128   ./make_double_nesting_test.sh double_nesting_access_check_60_$I unverifiable "$OP" public famandassem famandassem no no yes
2129
2130   ./make_double_nesting_test.sh double_nesting_access_check_61_$I valid "$OP" public famandassem famorassem yes yes yes
2131   ./make_double_nesting_test.sh double_nesting_access_check_62_$I valid "$OP" public famandassem famorassem yes no yes
2132   ./make_double_nesting_test.sh double_nesting_access_check_63_$I unverifiable "$OP" public famandassem famorassem no yes yes
2133   ./make_double_nesting_test.sh double_nesting_access_check_64_$I unverifiable "$OP" public famandassem famorassem no no yes
2134
2135   create_nesting_test_same_result 65 unverifiable public famandassem private
2136
2137   ./make_double_nesting_test.sh double_nesting_access_check_69_$I valid "$OP" public famandassem public yes yes yes
2138   ./make_double_nesting_test.sh double_nesting_access_check_70_$I valid "$OP" public famandassem public yes no yes
2139   ./make_double_nesting_test.sh double_nesting_access_check_71_$I unverifiable "$OP" public famandassem public no yes yes
2140   ./make_double_nesting_test.sh double_nesting_access_check_72_$I unverifiable "$OP" public famandassem public no no yes
2141
2142   create_nesting_test_same_result 73 valid public famorassem assembly
2143   create_nesting_test_strips_result_static 77 public famorassem family
2144   create_nesting_test_strips_result_static 81 public famorassem famandassem
2145
2146   create_nesting_test_same_result 85 valid public famorassem famorassem
2147   create_nesting_test_same_result 89 unverifiable public famorassem private
2148   create_nesting_test_same_result 93 valid public famorassem public
2149   create_nesting_test_same_result 97 unverifiable public private assembly
2150   create_nesting_test_same_result 101 unverifiable public private family
2151   create_nesting_test_same_result 105 unverifiable public private famandassem
2152   create_nesting_test_same_result 109 unverifiable public private famorassem
2153   create_nesting_test_same_result 113 unverifiable public private private
2154   create_nesting_test_same_result 117 unverifiable public private public
2155   create_nesting_test_same_result 121 valid public public assembly
2156   create_nesting_test_strips_result_static 125 public public family
2157   create_nesting_test_strips_result_static 129 public public famandassem
2158   create_nesting_test_same_result 133 valid public public famorassem
2159   create_nesting_test_same_result 137 unverifiable public public private
2160   create_nesting_test_same_result 141 valid public public public
2161
2162   I=`expr $I + 1`
2163 done
2164
2165
2166 #ldtoken tests
2167
2168 ./make_ldtoken_test.sh ldtoken_class valid "ldtoken class Example" "call class [mscorlib]System.Type class [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)"
2169
2170 ./make_ldtoken_test.sh ldtoken_class invalid "ldtoken class [mscorlib]ExampleMM" "call class [mscorlib]System.Type class [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)"
2171
2172 ./make_ldtoken_test.sh ldtoken_field valid "ldtoken field int32 Example::fld" "call class [mscorlib]System.Reflection.FieldInfo class [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle)"
2173
2174 ./make_ldtoken_test.sh ldtoken_field invalid "ldtoken field int32 Example::MM" "call class [mscorlib]System.Reflection.FieldInfo class [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle)"
2175
2176 ./make_ldtoken_test.sh ldtoken_method valid "ldtoken method void Example::Method()" "call class [mscorlib]System.Reflection.MethodBase class [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle)"
2177
2178 ./make_ldtoken_test.sh ldtoken_method invalid "ldtoken method int32 Example::Method()" "call class [mscorlib]System.Reflection.MethodBase class [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle)"
2179
2180
2181 #ldobj tests
2182 function fix_ldobj () {
2183         if [ "$3" != "" ]; then
2184                 A=$3;
2185         elif [ "$2" != "" ]; then
2186                 A=$2;
2187         else
2188                 A=$1;
2189         fi
2190
2191         if [ "$A" = "bool" ]; then
2192                 A="int8";
2193         elif [ "$A" = "char" ]; then
2194                 A="int16";
2195         fi
2196
2197         echo "$A";
2198 }
2199
2200
2201 I=1
2202
2203 #valid
2204 for T1 in 'int8' 'bool' 'unsigned int8' 'int16' 'char' 'unsigned int16' 'int32' 'unsigned int32' 'int64' 'unsigned int64' 'float32' 'float64'
2205 do
2206         for T2 in 'int8' 'bool' 'unsigned int8' 'int16' 'char' 'unsigned int16' 'int32' 'unsigned int32' 'int64' 'unsigned int64' 'float32' 'float64'
2207         do
2208                 TYPE1="$(fix_ldobj $T1)"
2209                 TYPE2="$(fix_ldobj $T2)"
2210                 if [ "$TYPE1" = "$TYPE2" ] ; then
2211                         ./make_ldobj_test.sh ldobj_${I} valid "${T1}\&" "${T2}"
2212                 else
2213                         ./make_ldobj_test.sh ldobj_${I} unverifiable "${T1}\&" "${T2}"
2214                 fi
2215                 I=`expr $I + 1`
2216         done
2217 done
2218
2219
2220
2221 #unverifiable
2222 #for T1 in "int8" "int64" "float64" "object" "string" "class Class" "int32[]" "int32[,]" "valuetype MyStruct" "valuetype MyStruct2" "int32 *" "valuetype MyStruct *" "method int32 *(int32)"
2223 for T1 in "native int" "int8*" "typedref" 
2224 do
2225         for T2 in "int8" "int64" "float64" "object" "string" "class Class" "int32[]" "int32[,]" "valuetype MyStruct" "valuetype MyStruct2"   "int32 *" "valuetype MyStruct *" "method int32 *(int32)" "native int"  "typedref" "class Template\`1<object>" "valuetype StructTemplate\`1<object>" "valuetype StructTemplate2\`1<object>"
2226         do 
2227                 ./make_ldobj_test.sh ldobj_${I} unverifiable "${T1}" "${T2}"
2228                 I=`expr $I + 1`
2229         done
2230 done
2231
2232 for T1 in "native int" "int8*" "typedref" 
2233 do
2234         ./make_ldobj_test.sh ldobj_${I} invalid "${T1}" "typedref\&"
2235         I=`expr $I + 1`
2236 done
2237
2238
2239
2240 #invalid
2241 #for T1 in "int8" "int64" "float64" "object" "string" "class Class" "int32[]" "int32[,]" "valuetype MyStruct" "valuetype MyStruct2" "int32 *" "valuetype MyStruct *" "method int32 *(int32)"
2242 for T1 in 'int8' 'native int'
2243 do      
2244         for T2 in "int8\&" "int64\&" "float64\&" "object\&" "string\&" "class Class\&" "valuetype MyStruct\&" "native int\&" "class Template\`1<object>\&" "valuetype StructTemplate\`1<object>\&"  "valuetype StructTemplate2\`1<object>\&" "class [mscorlib]ExampleMM" "class [mscorlib]ExampleMM\&"
2245         do 
2246                 ./make_ldobj_test.sh ldobj_${I} invalid "${T1}" "${T2}"
2247                 I=`expr $I + 1`
2248         done
2249 done
2250
2251 ./make_ldobj_test.sh ldobj_struct_1 valid  "valuetype MyStruct\&" "valuetype MyStruct"
2252 ./make_ldobj_test.sh ldobj_struct_2 unverifiable  "valuetype MyStruct\&" "valuetype MyStruct2"
2253 ./make_ldobj_test.sh ldobj_struct_3 valid  "valuetype StructTemplate\`1<object>\&" "valuetype StructTemplate\`1<object>"
2254 ./make_ldobj_test.sh ldobj_struct_4 unverifiable  "valuetype StructTemplate\`1<object>\&" "valuetype StructTemplate2\`1<object>"
2255
2256 ./make_ldobj_test.sh ldobj_struct_5 valid  "object\&"  "object"
2257 ./make_ldobj_test.sh ldobj_struct_6 valid  "string\&"  "string"
2258 ./make_ldobj_test.sh ldobj_struct_7 valid  "int32[]\&"  "int32[]"
2259 ./make_ldobj_test.sh ldobj_struct_8 valid  "int32[,]\&"  "int32[,]"
2260 ./make_ldobj_test.sh ldobj_struct_9 valid  "class Template\`1<object>\&"  "class Template\`1<object>"
2261
2262
2263 # Unbox Test
2264
2265
2266 # unbox non-existent type.
2267 ./make_unbox_test.sh unbox_bad_type invalid "valuetype [mscorlib]NonExistent" "valuetype [mscorlib]NonExistent"
2268
2269 # Unbox byref type.
2270 ./make_unbox_test.sh unbox_byref_type invalid "int32" 'int32\&'
2271
2272 # Box unbox-like type.
2273 ./make_unbox_test.sh unbox_byref_like unverifiable typedref typedref
2274
2275 # Box unbox-like type.
2276 ./make_unbox_test.sh unbox_wrong_types valid object int32
2277
2278 #This is illegal since you cannot have a Void local variable, it should go into the structural tests part
2279 # Box void type.
2280 #./make_unary_test.sh box_void unverifiable "box [mscorlib]System.Void\n\tpop" "class [mscorlib]System.Void"
2281 I=1;
2282 for OP in "native int" "int32*" typedref int16 float32
2283 do
2284         ./make_unbox_test.sh unbox_bad_stack_${I} unverifiable "${OP}" int32 "nop" "yes"
2285         I=`expr $I + 1`
2286 done
2287
2288
2289 #unboxing from int32
2290 ./make_unbox_test.sh unbox_wrong_types_1 unverifiable int32 int32 "nop" "yes"
2291
2292 #unboxing from valuetype
2293 ./make_unbox_test.sh unbox_wrong_types_2 unverifiable "valuetype MyStruct" int32 "nop" "yes"
2294
2295 #unboxing from managed ref
2296 ./make_unbox_test.sh unbox_stack_byref unverifiable "valuetype MyEnum\&" "valuetype MyEnum" "nop" "yes"
2297
2298 # valid unboxing
2299 ./make_unbox_test.sh unbox_primitive valid "int32" "int32"
2300 ./make_unbox_test.sh unbox_struct valid "valuetype MyStruct" 'valuetype MyStruct'
2301 ./make_unbox_test.sh unbox_template valid "valuetype StructTemplate\`1<object>" "valuetype StructTemplate\`1<object>"
2302 ./make_unbox_test.sh unbox_enum valid "valuetype MyEnum" "valuetype MyEnum"
2303
2304
2305 #test if the unboxed value is right
2306 ./make_unbox_test.sh unbox_use_result_1 valid "valuetype MyStruct" "valuetype MyStruct" "ldfld int32 MyStruct::foo"
2307 ./make_unbox_test.sh unbox_use_result_2 valid "valuetype MyStruct" "valuetype MyStruct" "ldobj valuetype MyStruct\n\tstloc.0\n\tldc.i4.0"
2308 ./make_unbox_test.sh unbox_use_result_3 valid "int32" "int32" "ldind.i4\n\tstloc.1\n\tldc.i4.0"
2309
2310
2311 # newarray Test
2312
2313 #no int size on stack
2314 #invalid size type on stack
2315 #invalid array type (with bytref)
2316
2317 #Empty stack
2318 ./make_newarr_test.sh newarr_empty_stack invalid int32 int32 pop
2319
2320 #Stack type tests
2321 ./make_newarr_test.sh newarr_stack_type_1 valid int32 int32
2322 ./make_newarr_test.sh newarr_stack_type_2 valid "native int" int32
2323
2324 ./make_newarr_test.sh newarr_stack_type_3 unverifiable float32 int32
2325 ./make_newarr_test.sh newarr_stack_type_4 unverifiable object int32
2326
2327 #Invalid array element type (with byref)
2328 ./make_newarr_test.sh newarr_array_type_1 invalid int32 "int32\&"
2329
2330 #Check if the verifier push the right type on stack
2331 ./make_newarr_test.sh newarr_array_value valid int32 int32 nop "ldc.i4.0\n\tcallvirt instance int32 class [mscorlib]System.Array::GetLength(int32)"
2332
2333
2334
2335
2336 #Tests for ldind.X
2337 I=1
2338 for OP in "ldind.i1" "ldind.u1"
2339 do
2340         for TYPE in "int8" "bool" "unsigned int8"
2341         do
2342                 ./make_load_indirect_test.sh indirect_load_i1_${I} valid "${OP}" "${TYPE}"
2343                 I=`expr $I + 1`
2344         done
2345
2346         for TYPE in "int16" "char" "unsigned int16" "int32" "unsigned int32" "int64" "unsigned int64" "native int" "native unsigned int" "object" "string" "float32" "float64" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2347         do
2348                 ./make_load_indirect_test.sh indirect_load_i1_${I} unverifiable "${OP}" "${TYPE}"
2349                 I=`expr $I + 1`
2350         done
2351 done
2352
2353 I=1
2354 for OP in "ldind.i2" "ldind.u2"
2355 do
2356         for TYPE in "int16" "char" "unsigned int16"
2357         do
2358                 ./make_load_indirect_test.sh indirect_load_i2_${I} valid "${OP}" "${TYPE}"
2359                 I=`expr $I + 1`
2360         done
2361
2362         for TYPE in "int8" "bool" "unsigned int8" "int32" "unsigned int32" "int64" "unsigned int64" "native int" "native unsigned int" "object" "string" "float32" "float64" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2363         do
2364                 ./make_load_indirect_test.sh indirect_load_i2_${I} unverifiable "${OP}" "${TYPE}"
2365                 I=`expr $I + 1`
2366         done
2367 done
2368
2369 I=1
2370 for OP in "ldind.i4" "ldind.u4"
2371 do
2372         for TYPE in "int32" "unsigned int32" "native int" "native unsigned int"
2373         do
2374                 ./make_load_indirect_test.sh indirect_load_i4_${I} valid "${OP}" "${TYPE}"
2375                 I=`expr $I + 1`
2376         done
2377
2378         for TYPE in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int64" "unsigned int64" "object" "string" "float32" "float64" "class Class" "valuetype MyStruct" "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2379         do
2380                 ./make_load_indirect_test.sh indirect_load_i4_${I} unverifiable "${OP}" "${TYPE}"
2381                 I=`expr $I + 1`
2382         done
2383 done
2384
2385
2386 #no need to test ldind.u8 as it aliases to ldind.i8
2387 I=1
2388 for TYPE in "int64" "unsigned int64"
2389 do
2390         ./make_load_indirect_test.sh indirect_load_i8_${I} valid "ldind.i8" "${TYPE}"
2391         I=`expr $I + 1`
2392 done
2393
2394 for TYPE in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "object" "string" "float32" "float64" "class Class" "valuetype MyStruct" "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2395 do
2396         ./make_load_indirect_test.sh indirect_load_i8_${I} unverifiable "ldind.i8" "${TYPE}"
2397         I=`expr $I + 1`
2398 done
2399
2400
2401 I=1
2402 for TYPE in "float32"
2403 do
2404         ./make_load_indirect_test.sh indirect_load_r4_${I} valid "ldind.r4" "${TYPE}"
2405         I=`expr $I + 1`
2406 done
2407
2408 for TYPE in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "int64" "unsigned int64" "float64" "native int" "native unsigned int" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2409 do
2410         ./make_load_indirect_test.sh indirect_load_r4_${I} unverifiable "ldind.r4" "${TYPE}"
2411         I=`expr $I + 1`
2412 done
2413
2414
2415 I=1
2416 for TYPE in "float64"
2417 do
2418         ./make_load_indirect_test.sh indirect_load_r8_${I} valid "ldind.r8" "${TYPE}"
2419         I=`expr $I + 1`
2420 done
2421
2422 for TYPE in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "int64" "unsigned int64" "float32" "native int" "native unsigned int" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2423 do
2424         ./make_load_indirect_test.sh indirect_load_r8_${I} unverifiable "ldind.r8" "${TYPE}"
2425         I=`expr $I + 1`
2426 done
2427
2428
2429 I=1
2430 for TYPE in "int32" "unsigned int32" "native int" "native unsigned int" 
2431 do
2432         ./make_load_indirect_test.sh indirect_load_i_${I} valid "ldind.i" "${TYPE}"
2433         I=`expr $I + 1`
2434 done
2435
2436 for TYPE in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int64" "unsigned int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct" "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2437 do
2438         ./make_load_indirect_test.sh indirect_load_i_${I} unverifiable "ldind.i" "${TYPE}"
2439         I=`expr $I + 1`
2440 done
2441
2442
2443 I=1
2444 for TYPE in "object" "string" "class Class"  "int32[]" "int32[,]" "class Template\`1<object>"
2445 do
2446         ./make_load_indirect_test.sh indirect_load_r_${I} valid "ldind.ref" "${TYPE}"
2447         I=`expr $I + 1`
2448 done
2449
2450 for TYPE in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "int64" "unsigned int64" "native int" "native unsigned int" "float32" "float64" "valuetype MyStruct" "int32*" "method int32 *(int32)"
2451 do
2452         ./make_load_indirect_test.sh indirect_load_r_${I} unverifiable "ldind.ref" "${TYPE}"
2453         I=`expr $I + 1`
2454 done
2455
2456
2457 #valid stores
2458 ./make_store_indirect_test.sh indirect_store_i1_1 valid "stind.i1" "int8\&" "int8"
2459 ./make_store_indirect_test.sh indirect_store_i1_2 valid "stind.i1" "bool\&" "int8"
2460 ./make_store_indirect_test.sh indirect_store_i1_3 valid "stind.i1" "int8\&" "bool"
2461 ./make_store_indirect_test.sh indirect_store_i1_4 valid "stind.i1" "bool\&" "bool"
2462
2463 ./make_store_indirect_test.sh indirect_store_i2_1 valid "stind.i2" "int16\&" "int16"
2464 ./make_store_indirect_test.sh indirect_store_i2_2 valid "stind.i2" "char\&" "int16"
2465 ./make_store_indirect_test.sh indirect_store_i2_3 valid "stind.i2" "int16\&" "char"
2466 ./make_store_indirect_test.sh indirect_store_i2_4 valid "stind.i2" "char\&" "char"
2467
2468 ./make_store_indirect_test.sh indirect_store_i4_1 valid "stind.i4" "int32\&" "int32"
2469 ./make_store_indirect_test.sh indirect_store_i4_2 valid "stind.i4" "native int\&" "int32"
2470 ./make_store_indirect_test.sh indirect_store_i4_3 valid "stind.i4" "int32\&" "native int"
2471 ./make_store_indirect_test.sh indirect_store_i4_4 valid "stind.i4" "native int\&" "native int"
2472
2473
2474 ./make_store_indirect_test.sh indirect_store_i8_1 valid "stind.i8" "int64\&" "int64"
2475
2476 ./make_store_indirect_test.sh indirect_store_r4_1 valid "stind.r4" "float32\&" "float32"
2477
2478 ./make_store_indirect_test.sh indirect_store_r8_1 valid "stind.r8" "float64\&" "float64"
2479
2480 ./make_store_indirect_test.sh indirect_store_i_1 valid "stind.i" "native int\&" "int32"
2481 ./make_store_indirect_test.sh indirect_store_i_2 valid "stind.i" "int32\&" "int32"
2482 ./make_store_indirect_test.sh indirect_store_i_3 valid "stind.i" "native int\&" "native int"
2483 ./make_store_indirect_test.sh indirect_store_i_4 valid "stind.i" "int32\&" "native int"
2484
2485 ./make_store_indirect_test.sh indirect_store_r_1 valid "stind.ref" "object\&" "object"
2486 ./make_store_indirect_test.sh indirect_store_r_2 valid "stind.ref" "object\&" "string"
2487 ./make_store_indirect_test.sh indirect_store_r_3 valid "stind.ref" "string\&" "string"
2488 ./make_store_indirect_test.sh indirect_store_r_4 unverifiable "stind.ref" "valuetype MyStruct\&" "MyStruct"
2489
2490
2491
2492
2493 #stdind tests
2494 #unverifiable due to unmanaged pointers
2495 ./make_store_indirect_test.sh indirect_store_unmanaged_pointer_1 unverifiable "stind.i1" "int8*" "int8"
2496 ./make_store_indirect_test.sh indirect_store_unmanaged_pointer_2 unverifiable "stind.i1" "native int" "int8"
2497
2498 #invalid due to unrelated types on stack
2499 ./make_store_indirect_test.sh indirect_store_bad_type_1 unverifiable "stind.i1" "int8" "int8"
2500 ./make_store_indirect_test.sh indirect_store_bad_type_2 unverifiable "stind.i1" "int8" "int8"
2501
2502 #invalid stind.ref with valuetypes
2503 ./make_store_indirect_test.sh indirect_store_bad_type_r_3 valid "stind.ref" "int32[]\&" "int32[]"
2504
2505 #invalid operands
2506 I=1
2507 for TYPE1 in "int16" "char" "int32" "native int"
2508 do
2509         ./make_store_indirect_test.sh indirect_store_bad_addr_i1_${I} unverifiable "stind.i1" "${TYPE1}\&" "int8"
2510         ./make_store_indirect_test.sh indirect_store_good_val_i1_${I} valid "stind.i1" "int8\&" "${TYPE1}"
2511         I=`expr $I + 1`
2512 done
2513
2514 for TYPE1 in  "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2515 do
2516         ./make_store_indirect_test.sh indirect_store_bad_addr_i1_${I} unverifiable "stind.i1" "${TYPE1}\&" "int8"
2517         ./make_store_indirect_test.sh indirect_store_bad_val_i1_${I} unverifiable "stind.i1" "int8\&" "${TYPE1}"
2518         I=`expr $I + 1`
2519 done
2520
2521
2522 I=1
2523 for TYPE1 in "int8" "bool" "int32" "native int"
2524 do
2525         ./make_store_indirect_test.sh indirect_store_bad_addr_i2_${I} unverifiable "stind.i2" "${TYPE1}\&" "int16"
2526         ./make_store_indirect_test.sh indirect_store_good_val_i2_${I} valid "stind.i2" "int16\&" "${TYPE1}" 
2527         I=`expr $I + 1`
2528 done
2529
2530 for TYPE1 in "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2531 do
2532         ./make_store_indirect_test.sh indirect_store_bad_addr_i2_${I} unverifiable "stind.i2" "${TYPE1}\&" "int16"
2533         ./make_store_indirect_test.sh indirect_store_bad_val_i2_${I} unverifiable "stind.i2" "int16\&" "${TYPE1}" 
2534         I=`expr $I + 1`
2535 done
2536
2537
2538 I=1
2539 for TYPE1 in "int8" "bool" "int16" "char"
2540 do
2541         ./make_store_indirect_test.sh indirect_store_bad_addr_i4_${I} unverifiable "stind.i4" "${TYPE1}\&" "int32"
2542         ./make_store_indirect_test.sh indirect_store_good_val_i4_${I} valid "stind.i4" "int32\&" "${TYPE1}"
2543         I=`expr $I + 1`
2544 done
2545
2546 for TYPE1 in  "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2547 do
2548         ./make_store_indirect_test.sh indirect_store_bad_addr_i4_${I} unverifiable "stind.i4" "${TYPE1}\&" "int32"
2549         ./make_store_indirect_test.sh indirect_store_bad_val_i4_${I} unverifiable "stind.i4" "int32\&" "${TYPE1}"
2550         I=`expr $I + 1`
2551 done
2552
2553
2554 I=1
2555 for TYPE1 in "int8" "bool" "int16" "char" "int32" "float32" "float64" "native int" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2556 do
2557         ./make_store_indirect_test.sh indirect_store_bad_addr_i8_${I} unverifiable "stind.i8" "${TYPE1}\&" "int64"
2558         ./make_store_indirect_test.sh indirect_store_bad_val_i8_${I} unverifiable "stind.i8" "int64\&" "${TYPE1}"
2559         I=`expr $I + 1`
2560 done
2561
2562
2563 I=1
2564 for TYPE1 in "int8" "bool" "int16" "char" "int32" "int64" "float64" "native int" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2565 do
2566         ./make_store_indirect_test.sh indirect_store_bad_addr_r4_${I} unverifiable "stind.r4" "${TYPE1}\&" "float32"
2567         if [ "$TYPE1" = "float64" ]; then
2568                 ./make_store_indirect_test.sh indirect_store_good_val_r4_${I} valid "stind.r4" "float32\&" "${TYPE1}"
2569         else
2570                 ./make_store_indirect_test.sh indirect_store_bad_val_r4_${I} unverifiable "stind.r4" "float32\&" "${TYPE1}"
2571         fi
2572         I=`expr $I + 1`
2573 done
2574
2575
2576 I=1
2577 for TYPE1 in "int8" "bool" "int16" "char" "int32" "int64" "float32" "native int" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2578 do
2579         ./make_store_indirect_test.sh indirect_store_bad_addr_r8_${I} unverifiable "stind.r8" "${TYPE1}\&" "float64"
2580         if [ "$TYPE1" = "float32" ]; then
2581                 ./make_store_indirect_test.sh indirect_store_good_val_r8_${I} valid "stind.r8" "float64\&" "${TYPE1}";
2582         else
2583                 ./make_store_indirect_test.sh indirect_store_bad_val_r8_${I} unverifiable "stind.r8" "float64\&" "${TYPE1}";
2584         fi
2585         I=`expr $I + 1`
2586 done
2587
2588
2589 I=1
2590 for TYPE1 in "int8" "bool" "int16" "char"
2591 do
2592         ./make_store_indirect_test.sh indirect_store_bad_addr_i_${I} unverifiable "stind.i" "${TYPE1}\&" "native int" 
2593         ./make_store_indirect_test.sh indirect_store_good_val_i_${I} valid "stind.i" "native int\&" "${TYPE1}"
2594         I=`expr $I + 1`
2595 done
2596
2597 for TYPE1 in "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2598 do
2599         ./make_store_indirect_test.sh indirect_store_bad_addr_i_${I} unverifiable "stind.i" "${TYPE1}\&" "native int" 
2600         ./make_store_indirect_test.sh indirect_store_bad_val_i_${I} unverifiable "stind.i" "native int\&" "${TYPE1}"
2601         I=`expr $I + 1`
2602 done
2603
2604
2605 I=1
2606 for TYPE1 in "int8" "bool" "int16" "char" "int32" "int64" "float32" "float64" "native int"
2607 do
2608         ./make_store_indirect_test.sh indirect_store_bad_addr_ref_${I} unverifiable "stind.ref" "${TYPE1}\&" "object"
2609         ./make_store_indirect_test.sh indirect_store_bad_val_ref_${I} unverifiable "stind.ref" "object\&" "${TYPE1}"
2610         I=`expr $I + 1`
2611 done
2612
2613
2614 #underflow
2615 ./make_newobj_test.sh newobj_underflow invalid "newobj instance void class ClassA::.ctor(int32,int32)" "int32" "int32"
2616
2617 #good simple cases
2618 ./make_newobj_test.sh newobj_good_instantiation_1 valid "newobj instance void class ClassA::.ctor(int32)" "int32" "int32"
2619 ./make_newobj_test.sh newobj_good_instantiation_2 valid "newobj instance void class ClassA::.ctor(int32)" "native int" "int32"
2620 ./make_newobj_test.sh newobj_good_instantiation_3 valid "newobj instance void class ClassA::.ctor(native int)" "int32" "native int"
2621 ./make_newobj_test.sh newobj_good_instantiation_4 valid "newobj instance void class ClassA::.ctor(native int)" "int32" "native int"
2622 ./make_newobj_test.sh newobj_good_instantiation_5 valid "ldloc.0\n\tnewobj instance void int32[,]::.ctor(int32, int32)" "int32" "native int"
2623 ./make_newobj_test.sh newobj_good_instantiation_6 valid "newobj instance void class ClassA::.ctor(typedref)" "typedref" "typedref"
2624
2625 #unverifable types
2626 ./make_newobj_test.sh newobj_unverifiable_types_1 unverifiable "newobj instance void class ClassA::.ctor(int32*)" "int32*" "int32*"
2627 ./make_newobj_test.sh newobj_unverifiable_types_2 unverifiable "newobj instance void class ClassA::.ctor(method int32 *(int32))" "method int32 *(int32)" "method int32 *(int32)"
2628
2629
2630
2631 #abstract type
2632 ./make_newobj_test.sh newobj_bad_inst_1 unverifiable "newobj instance void class AbsClass::.ctor()" "int32" "int32"
2633
2634 #bad types
2635 ./make_newobj_test.sh newobj_bad_args_1 unverifiable "newobj instance void class ClassA::.ctor(int32)" "int64" "int32"
2636 ./make_newobj_test.sh newobj_bad_args_2 unverifiable "newobj instance void class ClassA::.ctor(int32)" "object" "int32"
2637 ./make_newobj_test.sh newobj_bad_args_3 unverifiable "newobj instance void class ClassA::.ctor(int32)" "int32\&" "int32"
2638 ./make_newobj_test.sh newobj_bad_args_4 unverifiable "newobj instance void class ClassA::.ctor(int32)" "float32" "int32"
2639
2640 ./make_newobj_test.sh newobj_bad_args_5 unverifiable "newobj instance void class ClassA::.ctor(int64)" "int32" "int64"
2641 ./make_newobj_test.sh newobj_bad_args_6 unverifiable "newobj instance void class ClassA::.ctor(int64)" "object" "int64"
2642 ./make_newobj_test.sh newobj_bad_args_7 unverifiable "newobj instance void class ClassA::.ctor(int64)" "int32\&" "int64"
2643 ./make_newobj_test.sh newobj_bad_args_8 unverifiable "newobj instance void class ClassA::.ctor(int64)" "float32" "int64"
2644
2645 ./make_newobj_test.sh newobj_bad_args_9 unverifiable "newobj instance void class ClassA::.ctor(object)" "int64" "object"
2646 ./make_newobj_test.sh newobj_bad_args_10 unverifiable "newobj instance void class ClassA::.ctor(object)" "int32" "object"
2647 ./make_newobj_test.sh newobj_bad_args_11 unverifiable "newobj instance void class ClassA::.ctor(object)" "int32\&" "object"
2648 ./make_newobj_test.sh newobj_bad_args_12 unverifiable "newobj instance void class ClassA::.ctor(object)" "float32" "object"
2649
2650 ./make_newobj_test.sh newobj_bad_args_13 unverifiable "newobj instance void class ClassA::.ctor(float32)" "int64" "float32"
2651 ./make_newobj_test.sh newobj_bad_args_14 unverifiable "newobj instance void class ClassA::.ctor(float32)" "object" "float32"
2652 ./make_newobj_test.sh newobj_bad_args_15 unverifiable "newobj instance void class ClassA::.ctor(float32)" "int32\&" "float32"
2653 ./make_newobj_test.sh newobj_bad_args_16 unverifiable "newobj instance void class ClassA::.ctor(float32)" "int32" "float32"
2654
2655 ./make_newobj_test.sh newobj_bad_args_17 unverifiable "newobj instance void class ClassA::.ctor(typedref)" "int32" "typedref"
2656 ./make_newobj_test.sh newobj_bad_args_18 unverifiable "newobj instance void class ClassA::.ctor(typedref)" "object" "typedref"
2657 ./make_newobj_test.sh newobj_bad_args_19 unverifiable "newobj instance void class ClassA::.ctor(typedref)" "int32\&" "typedref"
2658 ./make_newobj_test.sh newobj_bad_args_20 unverifiable "newobj instance void class ClassA::.ctor(typedref)" "float32" "typedref"
2659
2660
2661 #calling something that it's not an instance constructor
2662
2663 ./make_newobj_test.sh newobj_method_not_ctor_1 invalid "newobj instance void class ClassA::ctor(int32)" "int32" "int32"
2664 ./make_newobj_test.sh newobj_method_not_ctor_2 invalid "newobj instance void class ClassA::sctor(int32)" "int32" "int32"
2665 ./make_newobj_test.sh newobj_method_not_ctor_1 invalid "pop\n\tnewobj instance void class ClassA::.cctor()" "int32" "int32"
2666
2667
2668 #ldlen tests
2669 ./make_ldlen_test.sh ldlen_int_array valid "ldc.i4.0\n\tnewarr int32"
2670 ./make_ldlen_test.sh ldlen_array_array valid "ldc.i4.0\n\tnewarr string[]"
2671
2672 ./make_ldlen_test.sh ldlen_multi_dyn_array unverifiable "ldc.i4.0\n\tldc.i4.0\n\tnewobj instance void string[,]::.ctor(int32, int32)"
2673
2674 #TODO add tests for arrays that are not zero-based
2675 #./make_ldlen_test.sh ldlen_size_bounded_array unverifiable "call int32[1...5] mkarr()"
2676
2677 ./make_ldlen_test.sh ldlen_empty_stack invalid "nop"
2678
2679 I=1
2680 for OP in "ldc.i4.0" "ldc.r4 0" " newobj instance void object::.ctor()"
2681 do
2682   ./make_ldlen_test.sh ldlen_bad_stuff_on_stack_${I} unverifiable "$OP"
2683   I=`expr $I + 1`
2684 done
2685
2686
2687 #ldelema
2688
2689 #TODO add tests for CMMP (read only prefix)
2690 #TODO add tests for arrays that are not zero-based
2691
2692 ./make_ldelema_test.sh ldelema_int_array valid "newarr int32" "ldc.i4.0" "int32"
2693 ./make_ldelema_test.sh ldelema_null_array valid "pop\n\tldnull" "ldc.i4.0" "int32"
2694
2695 ./make_ldelema_test.sh ldelema_int_array_native_int valid "newarr int32" "ldc.i4.0\n\tconv.i" "int32"
2696 ./make_ldelema_test.sh ldelema_null_array_native_int valid "pop\n\tldnull" "ldc.i4.0\n\tconv.i" "int32"
2697
2698
2699 ./make_ldelema_test.sh ldelema_empty_stack_1 invalid "pop" "nop" "int32"
2700 ./make_ldelema_test.sh ldelema_empty_stack_2 invalid "newarr int32" "nop" "int32"
2701 ./make_ldelema_test.sh ldelema_empty_stack_3 invalid "pop" "ldc.i4.0" "int32"
2702
2703 I=1
2704 for ARR in "int8" "int16" "int32" 
2705 do
2706  ./make_ldelema_test.sh ldelema_size_compat_${I} valid "newarr ${ARR}" "ldc.i4.0" "unsigned ${ARR}"
2707   I=`expr $I + 1`
2708 done
2709
2710 for ARR in "int8" "int16" "int32"
2711 do
2712  ./make_ldelema_test.sh ldelema_size_compat_${I} valid "newarr unsigned ${ARR}" "ldc.i4.0" "${ARR}"
2713   I=`expr $I + 1`
2714 done
2715
2716 ./make_ldelema_test.sh ldelema_size_compat_nat_1 valid "newarr native int" "ldc.i4.0" "native unsigned int"
2717 ./make_ldelema_test.sh ldelema_size_compat_nat_2 valid "newarr native unsigned int" "ldc.i4.0" "native int"
2718
2719
2720 ./make_ldelema_test.sh ldelema_misc_size_compat_1 valid "newarr bool" "ldc.i4.0" "int8"
2721 ./make_ldelema_test.sh ldelema_misc_size_compat_2 valid "newarr char" "ldc.i4.0" "int16"
2722 ./make_ldelema_test.sh ldelema_misc_size_compat_3 valid "newarr native int" "ldc.i4.0" "int32"
2723 ./make_ldelema_test.sh ldelema_misc_size_compat_4 valid "newarr native unsigned int" "ldc.i4.0" "int32"
2724
2725 ./make_ldelema_test.sh ldelema_misc_size_compat_5 valid "newarr int8" "ldc.i4.0" "bool" 
2726 ./make_ldelema_test.sh ldelema_misc_size_compat_6 valid "newarr int16" "ldc.i4.0" "char"
2727 ./make_ldelema_test.sh ldelema_misc_size_compat_7 valid "newarr int32" "ldc.i4.0" "native int"
2728 ./make_ldelema_test.sh ldelema_misc_size_compat_8 valid "newarr int32" "ldc.i4.0" "native unsigned int"
2729
2730 ./make_ldelema_test.sh ldelema_misc_size_compat_9 valid "newarr unsigned int8" "ldc.i4.0" "bool" 
2731 ./make_ldelema_test.sh ldelema_misc_size_compat_10 valid "newarr unsigned int16" "ldc.i4.0" "char"
2732 ./make_ldelema_test.sh ldelema_misc_size_compat_11 valid "newarr unsigned int32" "ldc.i4.0" "native int"
2733 ./make_ldelema_test.sh ldelema_misc_size_compat_12 valid "newarr unsigned int32" "ldc.i4.0" "native unsigned int"
2734
2735
2736 I=1
2737 for ARR in "newobj instance void object::.ctor()" "ldc.i4.0\n\tldc.i4.0\n\tnewobj instance void string[,]::.ctor(int32, int32)" "ldc.r4 0" "ldc.r8 0" "ldc.i8 0" "ldc.i4.0" "ldc.i4.0\n\tconv.i"
2738 do
2739  ./make_ldelema_test.sh ldelema_bad_array_${I} unverifiable "pop\n\t${ARR}" "ldc.i4.0" "int32"
2740   I=`expr $I + 1`
2741 done
2742
2743
2744 I=1
2745 for IDX in "newobj instance void object::.ctor()" "ldc.i8 0" "ldc.r4 0"
2746 do
2747  ./make_ldelema_test.sh ldelema_bad_index_${I} unverifiable "newarr int32" "${IDX}" "int32"
2748   I=`expr $I + 1`
2749 done
2750
2751 I=1
2752 for TOKEN in "object" "int64" "int32[]"
2753 do
2754 ./make_ldelema_test.sh ldelema_type_mismatch_${I} unverifiable "newarr int32" "ldc.i4.0" "${TOKEN}"
2755   I=`expr $I + 1`
2756 done
2757
2758 for TOKEN in "object" "int32"
2759 do
2760 ./make_ldelema_test.sh ldelema_type_mismatch_${I} unverifiable "newarr string" "ldc.i4.0" "${TOKEN}"
2761   I=`expr $I + 1`
2762 done
2763
2764 for TOKEN in "object" "int32" "ClassSubA"
2765 do
2766 ./make_ldelema_test.sh ldelema_type_mismatch_${I} unverifiable "newarr ClassA" "ldc.i4.0" "${TOKEN}"
2767   I=`expr $I + 1`
2768 done
2769
2770
2771 #ldelem.X
2772
2773 #TODO add tests for CMMP (read only prefix)
2774 #TODO add tests for arrays that are not zero-based
2775
2776
2777 I=1
2778 for ARR in "int8" "bool" "unsigned int8" "ByteEnum"
2779 do
2780         ./make_ldelem_test.sh ldelem_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.i1"
2781         ./make_ldelem_test.sh ldelem_base_types_u_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.u1"
2782         I=`expr $I + 1`
2783 done
2784
2785 for ARR in "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
2786 do
2787         ./make_ldelem_test.sh ldelem_base_types_i_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.i1"
2788         ./make_ldelem_test.sh ldelem_base_types_u_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.u1"
2789         I=`expr $I + 1`
2790 done
2791
2792
2793 for ARR in "int16" "char" "unsigned int16" "ShortEnum"
2794 do
2795         ./make_ldelem_test.sh ldelem_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.i2"
2796         ./make_ldelem_test.sh ldelem_base_types_u_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.u2"
2797         I=`expr $I + 1`
2798 done
2799
2800 for ARR in "int8" "bool" "unsigned int8" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
2801 do
2802         ./make_ldelem_test.sh ldelem_base_types_i_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.i2"
2803         ./make_ldelem_test.sh ldelem_base_types_u_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.u2"
2804         I=`expr $I + 1`
2805 done
2806
2807 for ARR in "int32" "unsigned int32" "IntEnum" 
2808 do
2809         ./make_ldelem_test.sh ldelem_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.i4"
2810         ./make_ldelem_test.sh ldelem_base_types_u_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.u4"
2811         ./make_ldelem_test.sh ldelem_base_types_n_${I} strict "newarr ${ARR}" "ldc.i4.0" "ldelem.i"
2812         I=`expr $I + 1`
2813 done
2814
2815 for ARR in "native int" "native unsigned int" "NativeIntEnum"
2816 do
2817         ./make_ldelem_test.sh ldelem_base_types_i_${I} strict "newarr ${ARR}" "ldc.i4.0" "ldelem.i4"
2818         ./make_ldelem_test.sh ldelem_base_types_u_${I} strict "newarr ${ARR}" "ldc.i4.0" "ldelem.u4"
2819         ./make_ldelem_test.sh ldelem_base_types_n_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.i"
2820         I=`expr $I + 1`
2821 done
2822
2823 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int64" "unsigned int64" "float32" "float64" "object"
2824 do
2825         ./make_ldelem_test.sh ldelem_base_types_i_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.i4"
2826         ./make_ldelem_test.sh ldelem_base_types_u_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.u4"
2827         ./make_ldelem_test.sh ldelem_base_types_n_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.i"
2828         I=`expr $I + 1`
2829 done
2830
2831
2832 for ARR in "int64" "unsigned int64" "LongEnum"
2833 do
2834         ./make_ldelem_test.sh ldelem_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.i8"
2835         ./make_ldelem_test.sh ldelem_base_types_u_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.u8"
2836         I=`expr $I + 1`
2837 done
2838
2839 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "float32" "float64" "object"
2840 do
2841         ./make_ldelem_test.sh ldelem_base_types_i_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.i8"
2842         ./make_ldelem_test.sh ldelem_base_types_u_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.u8"
2843         I=`expr $I + 1`
2844 done
2845
2846
2847 for ARR in "float32"
2848 do
2849         ./make_ldelem_test.sh ldelem_base_types_f_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.r4"
2850         I=`expr $I + 1`
2851 done
2852
2853 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float64" "object"
2854 do
2855         ./make_ldelem_test.sh ldelem_base_types_f_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.r4"
2856         I=`expr $I + 1`
2857 done
2858
2859
2860 for ARR in "float64"
2861 do
2862         ./make_ldelem_test.sh ldelem_base_types_f_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.r8"
2863         I=`expr $I + 1`
2864 done
2865
2866 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "object"
2867 do
2868         ./make_ldelem_test.sh ldelem_base_types_f_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.r8"
2869         I=`expr $I + 1`
2870 done
2871
2872
2873 for ARR in "object" "string" "ClassA"
2874 do
2875         ./make_ldelem_test.sh ldelem_base_types_o_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.ref"
2876         I=`expr $I + 1`
2877 done
2878
2879 for ARR in "valuetype MyStruct" "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" 
2880 do
2881         ./make_ldelem_test.sh ldelem_base_types_o_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.ref"
2882         I=`expr $I + 1`
2883 done
2884
2885 I=1
2886 for OP in i1 u1 i2 u2 i4 u4 i8 u8 r4 r8 i ref
2887 do
2888         ./make_ldelem_test.sh ldelem_null_array_${I} valid "pop\n\tldnull" "ldc.i4.0" "ldelem.${OP}"
2889         I=`expr $I + 1`
2890 done
2891
2892
2893 I=1
2894 for OP in i1 u1 i2 u2 i4 u4 i8 u8 r4 r8 i ref
2895 do
2896         ./make_ldelem_test.sh ldelem_empty_stack_1_${I} invalid "pop" "nop" "ldelem.${OP}"
2897         ./make_ldelem_test.sh ldelem_empty_stack_2_${I} invalid "newarr int32" "nop" "ldelem.${OP}"
2898         ./make_ldelem_test.sh ldelem_empty_stack_3_${I} invalid "pop" "ldc.i4.0" "ldelem.${OP}"
2899         I=`expr $I + 1`
2900 done
2901
2902 I=1
2903 for OP in i1 u1 i2 u2 i4 u4 i8 u8 r4 r8 i ref
2904 do
2905         for ARR in "newobj instance void object::.ctor()" "ldc.i4.0\n\tldc.i4.0\n\tnewobj instance void string[,]::.ctor(int32, int32)" "ldc.r4 0" "ldc.r8 0" "ldc.i8 0" "ldc.i4.0" "ldc.i4.0\n\tconv.i"
2906         do
2907          ./make_ldelem_test.sh ldelema_bad_array_${I} unverifiable "pop\n\t${ARR}" "ldc.i4.0" "ldelem.${OP}"
2908           I=`expr $I + 1`
2909         done
2910 done
2911
2912
2913 I=1
2914 for OP in i1 u1 i2 u2 i4 u4 i8 u8 r4 r8 i ref
2915 do
2916         for IDX in "newobj instance void object::.ctor()" "ldc.i8 0" "ldc.r4 0"
2917         do
2918          ./make_ldelem_test.sh ldelema_bad_index_${I} unverifiable "pop\n\tldnull" "${IDX}" "ldelem.${OP}"
2919           I=`expr $I + 1`
2920         done
2921 done
2922
2923
2924 #adicional tests for ldelem
2925 I=1
2926 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
2927 do
2928         ./make_ldelem_test.sh ldelem_token_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem ${ARR}"
2929         I=`expr $I + 1`
2930 done
2931
2932
2933 #stdelem.X
2934 #TODO add tests for arrays that are not zero-based
2935
2936 I=1
2937 for ARR in "int8" "bool" "unsigned int8"
2938 do
2939         ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i1"
2940         I=`expr $I + 1`
2941 done
2942
2943 for ARR in "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
2944 do
2945         ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i1"
2946         I=`expr $I + 1`
2947 done
2948
2949
2950 for ARR in "int16" "char" "unsigned int16"
2951 do
2952         ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i2"
2953         I=`expr $I + 1`
2954 done
2955
2956 for ARR in "int8" "bool" "unsigned int8" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
2957 do
2958         ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i2"
2959         I=`expr $I + 1`
2960 done
2961
2962
2963 for ARR in "int32" "unsigned int32" "native int" "native unsigned int"
2964 do
2965         ./make_stelem_test.sh stelem_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0\n\tconv.i" "stelem.i4"
2966         ./make_stelem_test.sh stelem_base_types_i4_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i4"
2967         I=`expr $I + 1`
2968 done
2969
2970 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int64" "unsigned int64" "float32" "float64" "object"
2971 do
2972         ./make_stelem_test.sh stelem_base_types_i_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0\n\tconv.i" "stelem.i4"
2973         ./make_stelem_test.sh stelem_base_types_i4_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i4"
2974         I=`expr $I + 1`
2975 done
2976
2977
2978 for ARR in "int64" "unsigned int64"
2979 do
2980         ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i8 0" "stelem.i8"
2981         I=`expr $I + 1`
2982 done
2983
2984 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "float32" "float64" "object"
2985 do
2986         ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i8 0" "stelem.i8"
2987         I=`expr $I + 1`
2988 done
2989
2990
2991 for ARR in "float32"
2992 do
2993         ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.r4 0" "stelem.r4"
2994         I=`expr $I + 1`
2995 done
2996
2997 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float64" "object"
2998 do
2999         ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.r4 0" "stelem.r4"
3000         I=`expr $I + 1`
3001 done
3002
3003
3004 for ARR in "float64"
3005 do
3006         ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.r8 0" "stelem.r8"
3007         I=`expr $I + 1`
3008 done
3009
3010 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "object"
3011 do
3012         ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.r8 0" "stelem.r8"
3013         I=`expr $I + 1`
3014 done
3015
3016
3017 for ARR in "int32" "unsigned int32" "native int" "native unsigned int"
3018 do
3019         ./make_stelem_test.sh stelem_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0\n\tconv.i" "stelem.i"
3020         ./make_stelem_test.sh stelem_base_types_i4_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i"
3021         I=`expr $I + 1`
3022 done
3023
3024 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16"  "int64" "unsigned int64" "float32" "float64" "object"
3025 do
3026         ./make_stelem_test.sh stelem_base_types_i_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0\n\tconv.i" "stelem.i"
3027         ./make_stelem_test.sh stelem_base_types_i4_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i"
3028         I=`expr $I + 1`
3029 done
3030
3031
3032 for ARR in object ClassA ClassSubA
3033 do
3034         ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "newobj instance void ${ARR}::.ctor()" "stelem.ref"
3035         I=`expr $I + 1`
3036 done
3037
3038 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64"
3039 do
3040         ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.ref"
3041         I=`expr $I + 1`
3042 done
3043
3044
3045
3046 ./make_stelem_test.sh stelem_native_int_index valid "newarr int32" "ldc.i4.0\n\tconv.i" "ldc.i4.0" "stelem.i4"
3047
3048
3049 #tests with null arrays and values (for ref types)
3050
3051 I=1
3052 for OP in i1 i2 i4 i
3053 do
3054         ./make_stelem_test.sh stelem_null_array_index_i_${I} valid "pop\n\tldnull" "ldc.i4.0" "ldc.i4.0" "stelem.${OP}"
3055         I=`expr $I + 1`
3056 done
3057
3058 ./make_stelem_test.sh stelem_null_array_index_i8 valid "pop\n\tldnull" "ldc.i4.0" "ldc.i8 0" "stelem.i8"
3059 ./make_stelem_test.sh stelem_null_array_index_r4 valid "pop\n\tldnull" "ldc.i4.0" "ldc.r4 0" "stelem.r4"
3060 ./make_stelem_test.sh stelem_null_array_index_r8 valid "pop\n\tldnull" "ldc.i4.0" "ldc.r8 0" "stelem.r4"
3061 ./make_stelem_test.sh stelem_null_array_index_ref valid "pop\n\tldnull" "ldc.i4.0" "newobj instance void object::.ctor()" "stelem.ref"
3062
3063 ./make_stelem_test.sh stelem_null_value_1 valid "newarr object" "ldc.i4.0" "ldnull" "stelem.ref"
3064 ./make_stelem_test.sh stelem_null_value_2 valid "newarr string" "ldc.i4.0" "ldnull" "stelem.ref"
3065
3066 #both need to be reference types
3067 ./make_stelem_test.sh stelem_variance_1 valid "newarr object" "ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem.ref"
3068 ./make_stelem_test.sh stelem_variance_2 valid "newarr object" "ldc.i4.0" "newobj instance void ClassSubA::.ctor()" "stelem.ref"
3069 ./make_stelem_test.sh stelem_variance_3 valid "newarr ClassA" "ldc.i4.0" "newobj instance void ClassSubA::.ctor()" "stelem.ref"
3070 ./make_stelem_test.sh stelem_variance_4 valid "newarr ClassSubA" "ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem.ref"
3071 ./make_stelem_test.sh stelem_variance_5 valid "newarr ClassSubA" "ldc.i4.0" "newobj instance void object::.ctor()" "stelem.ref"
3072 ./make_stelem_test.sh stelem_variance_6 valid "newarr string" "ldc.i4.0" "newobj instance void object::.ctor()" "stelem.ref"
3073
3074 ./make_stelem_test.sh stelem_value_type_1 unverifiable "newarr object" "ldc.i4.0" "ldloc.0" "stelem.ref"
3075 ./make_stelem_test.sh stelem_value_type_2 unverifiable "newarr object" "ldc.i4.0" "ldloca.s 0" "stelem.ref"
3076 ./make_stelem_test.sh stelem_value_type_3 unverifiable "newarr MyStruct" "ldc.i4.0" "newobj instance void object::.ctor()" "stelem.ref"
3077 ./make_stelem_test.sh stelem_value_type_4 unverifiable "newarr MyStruct" "ldc.i4.0" "ldloc.0" "stelem.ref"
3078 ./make_stelem_test.sh stelem_value_type_5 unverifiable "newarr MyStruct" "ldc.i4.0" "ldloca.s 0" "stelem.ref"
3079
3080
3081 #bad index values
3082 I=1
3083 for IDX in "ldc.i8 0" "ldc.r4 0" "ldc.r8 0" "newobj instance void ClassA::.ctor()"
3084 do
3085         ./make_stelem_test.sh stelem_bad_index_${I} unverifiable "newarr int32" "${IDX}" "ldc.i4.0" "stelem.i4"
3086         I=`expr $I + 1`
3087 done
3088
3089 #bad array values
3090 I=1
3091 for ARR in "ldc.i4.0" "ldc.i8 0" "ldc.r4 0" "ldc.r8 0" "newobj instance void ClassA::.ctor()"
3092 do
3093         ./make_stelem_test.sh stelem_bad_index_${I} unverifiable "pop\n\t${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i4"
3094         I=`expr $I + 1`
3095 done
3096
3097
3098 #empty stack
3099 ./make_stelem_test.sh stelem_empty_stack_1 invalid "newarr object" "ldc.i4.0" "pop" "stelem.ref"
3100 ./make_stelem_test.sh stelem_empty_stack_2 invalid "newarr object" "nop" "ldnull" "stelem.ref"
3101 ./make_stelem_test.sh stelem_empty_stack_3 invalid "newarr object" "nop" "nop" "stelem.ref"
3102 ./make_stelem_test.sh stelem_empty_stack_4 invalid "pop" "nop" "nop" "stelem.ref"
3103
3104
3105 #test with multi-dim array
3106 ./make_stelem_test.sh stelem_multi_dim_array unverifiable "ldc.i4.0\n\tnewobj instance void string[,]::.ctor(int32, int32)" "ldc.i4.0" "ldc.i4.0" "stelem.i4"
3107
3108
3109
3110
3111 #adicional tests for stelem
3112 I=1
3113 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int"
3114 do
3115         ./make_stelem_test.sh stelem_token_basic_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem ${ARR}"
3116         I=`expr $I + 1`
3117 done
3118
3119 ./make_stelem_test.sh stelem_token_basic_types_i8 valid "newarr int64" "ldc.i4.0" "ldc.i8 0" "stelem int64"
3120 ./make_stelem_test.sh stelem_token_basic_types_r4 valid "newarr float32" "ldc.i4.0" "ldc.r4 0" "stelem float32"
3121 ./make_stelem_test.sh stelem_token_basic_types_r8 valid "newarr float64" "ldc.i4.0" "ldc.r8 0" "stelem float64"
3122
3123 I=1
3124 for TYPE in "object" "ClassA" "ClassSubA"
3125 do
3126         ./make_stelem_test.sh stelem_token_simple_ref_${I} valid "newarr object" "ldc.i4.0" "newobj instance void ${TYPE}::.ctor()" "stelem object"
3127         I=`expr $I + 1`
3128 done
3129
3130 #the array elem type must be a super type of the stelem token
3131 ./make_stelem_test.sh stelem_token_ref_1 valid "newarr object" "ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem ClassA"
3132 ./make_stelem_test.sh stelem_token_ref_2 valid "newarr ClassA" "ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem ClassA"
3133 ./make_stelem_test.sh stelem_token_ref_3 unverifiable "newarr ClassSubA" "ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem ClassA"
3134
3135 #the value type must be assignment compatible with token
3136 ./make_stelem_test.sh stelem_token_ref_4 valid "newarr object" "ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem ClassA"
3137 ./make_stelem_test.sh stelem_token_ref_5 valid "newarr object" "ldc.i4.0" "newobj instance void ClassSubA::.ctor()" "stelem ClassA"
3138 ./make_stelem_test.sh stelem_token_ref_6 unverifiable "newarr object" "ldc.i4.0" "newobj instance void object::.ctor()" "stelem ClassA"
3139
3140
3141
3142 #cast class and isins tests
3143
3144 #empty stack
3145 ./make_cast_test.sh cast_empty_stack invalid "int32" "nop" "castclass object"
3146 ./make_cast_test.sh isinst_empty_stack invalid "int32"  "nop" "isinst object"
3147
3148 #type
3149 I=1
3150 for OBJ in int32 int64 float32 float64 "int32\&" "valuetype MyStruct" "int32*" "typedref" "method int32 *(int32)"
3151 do
3152         ./make_cast_test.sh cast_object_${I} unverifiable "$OBJ" "ldloc.0" "castclass object"
3153         ./make_cast_test.sh isinst_object_${I} unverifiable "$OBJ" "ldloc.0" "isinst object"
3154         I=`expr $I + 1`
3155 done
3156
3157 for OBJ in "int32[]" "string"
3158 do
3159         ./make_cast_test.sh cast_object_${I} valid "$OBJ" "ldloc.0" "castclass object"
3160         ./make_cast_test.sh isinst_object_${I} valid "$OBJ" "ldloc.0" "isinst object"
3161         I=`expr $I + 1`
3162 done
3163 #token
3164
3165 I=1
3166 for TOKEN in int32 int64 float32 float64 "valuetype MyStruct" "int32[]" "string"
3167 do
3168         ./make_cast_test.sh cast_token_${I} valid "object" "ldloc.0" "castclass $TOKEN"
3169         ./make_cast_test.sh isinst_token_${I} valid "object" "ldloc.0" "isinst $TOKEN"
3170         I=`expr $I + 1`
3171 done
3172
3173 for TOKEN in "int32*" "method int32 *(int32)" "typedref"
3174 do
3175         ./make_cast_test.sh cast_token_${I} unverifiable "object" "ldloc.0" "castclass $TOKEN"
3176         ./make_cast_test.sh isinst_token_${I} unverifiable "object" "ldloc.0" "isinst $TOKEN"
3177         I=`expr $I + 1`
3178 done
3179
3180 for TOKEN in "int32\&"
3181 do
3182         ./make_cast_test.sh cast_token_${I} invalid "object" "ldloc.0" "castclass $TOKEN"
3183         ./make_cast_test.sh isinst_token_${I} invalid "object" "ldloc.0" "isinst $TOKEN"
3184         I=`expr $I + 1`
3185 done
3186
3187 #object
3188
3189 I=1
3190 for LOAD in "ldloc.0" "ldnull" 
3191 do
3192         ./make_cast_test.sh cast_good_obj_${I} valid "object" "$LOAD" "castclass object"
3193         ./make_cast_test.sh isinst_good_obj_${I} valid "object" "$LOAD" "isinst object"
3194         I=`expr $I + 1`
3195 done
3196
3197
3198
3199 #throw tests
3200
3201 #empty stack
3202 ./make_throw_test.sh throw_empty_stack invalid int32 pop
3203
3204 #null literal
3205 ./make_throw_test.sh throw_null_literal valid int32 "pop\n\tldnull"
3206
3207 #valid types
3208 I=1
3209 for TYPE in object string "[mscorlib]System.Exception" "int32[]" "ClassA" "class [mscorlib]System.IComparable\`1<int32>" "int32[,]"
3210 do
3211         ./make_throw_test.sh throw_ref_type_${I} valid "${TYPE}"
3212         I=`expr $I + 1`
3213 done
3214
3215 #invalid types
3216 I=1
3217 for TYPE in "valuetype MyStruct" int32 int64 float32 float64 "native int" "int32*" "typedref" "object\&"
3218 do
3219         ./make_throw_test.sh throw_value_type_${I} unverifiable "${TYPE}"
3220         I=`expr $I + 1`
3221 done
3222
3223
3224 # Exception block branch tests (see 2.19)
3225
3226 I=1; while [ $I -le 2 ]
3227 do
3228         ./make_rethrow_test.sh rethrow_from_catch_${I} invalid ${I}
3229         I=$((I + 1))
3230 done
3231
3232 I=3; while [ $I -le 10 ]
3233 do
3234         ./make_rethrow_test.sh rethrow_from_catch_${I} valid ${I}
3235         I=$((I + 1))
3236 done
3237
3238
3239
3240 # endfinally / endfault
3241
3242 I=1; while [ $I -le 7 ]
3243 do
3244         ./make_endfinally_test.sh endfinally_block_${I} invalid finally ${I}
3245         ./make_endfinally_test.sh endfault_block_${I} invalid fault ${I}
3246         I=$((I + 1))
3247 done
3248
3249 I=8; while [ $I -le 9 ]
3250 do
3251         ./make_endfinally_test.sh endfinally_block_${I} valid finally ${I}
3252         ./make_endfinally_test.sh endfault_block_${I} valid fault ${I}
3253         I=$((I + 1))
3254 done
3255
3256 #stack can have stuff and endfinally or endfault will just empty it
3257
3258 ./make_endfinally_test.sh endfinally_clean_stack valid finally 8 "ldc.i4.0"
3259 ./make_endfinally_test.sh endfault_clean_stack valid fault 8 "ldc.i4.0"
3260
3261
3262
3263 # endfilter
3264
3265 #valid endfilter
3266 ./make_endfilter_test.sh endfilter_at_end_of_filter_block valid 9
3267
3268 #endfilter outside protected block
3269 ./make_endfilter_test.sh endfilter_outside_protected_block invalid 1 "ldc.i4.1\n\t\tendfilter"
3270
3271 #endfilter inside bad protected block
3272 ./make_endfilter_test.sh endfilter_inside_protected_block_3 invalid 3 "ldc.i4.1\n\t\tendfilter"
3273 ./make_endfilter_test.sh endfilter_inside_protected_block_5 strict 5 "ldc.i4.1\n\t\tendfilter"
3274
3275 for I in 2 4 6;
3276 do
3277         ./make_endfilter_test.sh endfilter_inside_protected_block_${I} unverifiable ${I} "ldc.i4.1\n\t\tendfilter"
3278 done
3279
3280
3281 #endfilter is the first instruction
3282 ./make_endfilter_test.sh endfilter_first_instruction_of_filter_block invalid 7 "ldc.i4.1\n\tendfilter"
3283 ./make_endfilter_test.sh endfilter_in_the_midle_instruction_of_filter_block invalid 8 "ldc.i4.1\n\t\tendfilter"
3284
3285 #stack sizes
3286
3287 ./make_endfilter_test.sh endfilter_empty_stack strict 9 "pop"
3288 ./make_endfilter_test.sh endfilter_too_big strict 9 "ldc.i4.0"
3289
3290
3291 I=1
3292 for OP in "ldc.i8 0" "ldnull" "ldc.r4 0" "ldc.r8 1" "ldc.i4.0\n\t\tconv.i" "ldc.r8 99999"
3293 do
3294         ./make_endfilter_test.sh endfilter_bad_arg_${I} strict 9 "pop\t\n\n${OP}"
3295         I=`expr $I + 1`
3296 done
3297
3298
3299 # leave
3300
3301 #leave in all positions
3302
3303 EXTRA="ldloc.0\n\tbrfalse END"
3304
3305 #it's "OK" to use leave as a br
3306 ./make_leave_test.sh "filter_block_test_1" valid "1" "leave END" "$EXTRA"
3307
3308 #but not ok to leave finally or filter
3309 I=2; while [ $I -le 3 ]; do
3310         ./make_leave_test.sh "filter_block_test_${I}" unverifiable "${I}" "leave END" "${EXTRA}_${I}"
3311         I=$((I + 1))
3312 done
3313
3314 #neither is to branch to invalid regions of code
3315 ./make_leave_test.sh "filter_branch_before_start" invalid "1" "leave -400" "$EXTRA"
3316 ./make_leave_test.sh "filter_branch_after_end" invalid "1" "leave 400" "$EXTRA"
3317
3318
3319 # br.X
3320 #valid tests
3321 I=1; while [ $I -le 6 ]; do
3322         ./make_branch_test.sh branch_inside_same_block_${I} valid ${I} "br BLOCK_${I}";
3323         ./make_branch_test.sh branch_inside_same_block_${I}_s valid ${I} "br.s BLOCK_${I}";
3324         I=$((I + 1))
3325 done
3326
3327 #branching outside of the protected block
3328 I=2; while [ $I -le 6 ]; do
3329         ./make_branch_test.sh branch_outside_protected_block_${I} unverifiable ${I} "br END";
3330         I=$((I + 1))
3331 done
3332
3333 #branching to a protected block from the outside
3334 I=2; while [ $I -le 6 ]; do
3335         if [ $I -eq 4 ]; then
3336                 ./make_branch_test.sh branch_inside_protected_block_from_outside_${I}_finally invalid 1 "br BLOCK_${I}" "finally";
3337                 ./make_branch_test.sh branch_inside_protected_block_from_outside_${I}_fault invalid 1 "br BLOCK_${I}" "fault";
3338         else
3339                 ./make_branch_test.sh branch_inside_protected_block_from_outside_${I} unverifiable 1 "br BLOCK_${I}";
3340         fi
3341         I=$((I + 1))
3342 done
3343
3344
3345 #branching out of range
3346 ./make_branch_test.sh branch_out_of_bounds_before_start invalid 1 "br -1000";
3347 ./make_branch_test.sh branch_out_of_bounds_after_end invalid 1 "br 1000";
3348
3349 #branching in the middle of an instruction
3350 ./make_branch_test.sh branch_middle_of_instruction invalid 1 "br 2";
3351
3352 #branching in between prefix and instruction 
3353 ./make_branch_test.sh branch_middle_of_instruction_prefix_1 invalid 1 "br AFTER_FIRST_PREFIX";
3354 ./make_branch_test.sh branch_middle_of_instruction_prefix_2 invalid 1 "br AFTER_SECOND_PREFIX";
3355
3356 #TODO test the encoding of the switch table
3357 # switch
3358 #valid tests
3359 I=1; while [ $I -le 6 ]; do
3360         ./make_switch_test.sh switch_inside_same_block_${I} valid ${I} "ldloc.0" "switch (BLOCK_${I}, BLOCK_${I}_B)";
3361         I=$((I + 1))
3362 done
3363
3364 ./make_switch_test.sh switch_with_native_int_on_stack valid 1 "ldloc.1" "switch (BLOCK_1, BLOCK_1_B)";
3365
3366 #branching outside of the protected block
3367 I=2; while [ $I -le 6 ]; do
3368         ./make_switch_test.sh switch_outside_protected_block_${I} unverifiable ${I} "ldloc.0" "switch (END, BLOCK_1, BLOCK_1_B)";
3369         I=$((I + 1))
3370 done
3371
3372 #branching to a protected block from the outside
3373 I=2; while [ $I -le 6 ]; do
3374         if [ $I -eq 4 ]; then
3375                 ./make_switch_test.sh switch_inside_protected_block_from_outside_${I}_finally invalid 1 "ldloc.0" "switch (BLOCK_${I}, BLOCK_${I}_B)" "finally";
3376                 ./make_switch_test.sh switch_inside_protected_block_from_outside_${I}_fault invalid 1 "ldloc.0" "switch (BLOCK_${I}, BLOCK_${I}_B)" "fault";
3377         else
3378                 ./make_switch_test.sh switch_inside_protected_block_from_outside_${I} unverifiable 1 "ldloc.0" "switch (BLOCK_${I}, BLOCK_${I}_B)";
3379         fi
3380         I=$((I + 1))
3381 done
3382
3383 #TODO branching out of range (FIX ilasm first)
3384 #./make_switch_test.sh switch_out_of_bounds_before_start invalid 1 "ldloc.0" "switch (-1000, -2000)"
3385 #./make_switch_test.sh switch_out_of_bounds_after_end invalid 1 "ldloc.0" "switch (BLOCK_1, 1000, 1500)"
3386
3387 #empty stack
3388 ./make_switch_test.sh switch_empty_stack invalid 1 "nop" "switch (BLOCK_1, BLOCK_1_B)"
3389
3390 #wrong type on stack
3391 I=1
3392 for TYPE in "ldnull" "ldc.i8 0" "ldc.r4 0" "ldc.r8 0"
3393 do
3394         ./make_switch_test.sh switch_bad_type_on_stack_${I} unverifiable 1 "$TYPE" "switch (BLOCK_1, BLOCK_1_B)"
3395         I=`expr $I + 1`
3396 done
3397
3398 #switch landing in the middle of instructions
3399 #FIXME (ilasm don't work with offsets on switch statements)
3400 #./make_switch_test.sh switch_target_middle_of_instruction invalid 1 "ldloc.1" "switch (BLOCK_1, BLOCK_1)";
3401
3402 ./make_switch_test.sh switch_target_between_prefix_1 invalid 1 "ldloc.1" "switch (AFTER_FIRST_PREFIX, BLOCK_1)";
3403 ./make_switch_test.sh switch_target_between_prefix_2 invalid 1 "ldloc.1" "switch (AFTER_SECOND_PREFIX, BLOCK_1)";
3404 ./make_switch_test.sh switch_target_bad_merge_point invalid 1 "ldloc.1" "switch (INVALID_MERGE_POINT, BLOCK_1)";
3405
3406
3407 #TESTS for exception clauses. As described in P1 12.4.2.7.
3408 #regions must not overlap with each other
3409 ./make_exception_overlap_test.sh exception_entry_overlap_separate_1 valid ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END"
3410
3411 ./make_exception_overlap_test.sh exception_entry_overlap_separate_2 valid ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END" ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" 
3412
3413 ./make_exception_overlap_test.sh exception_entry_overlap_try_over_catch invalid ".try TRY_BLOCK_1 to CATCH_BLOCK_1_A catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END"
3414
3415 ./make_exception_overlap_test.sh exception_entry_overlap_try_over_filter invalid ".try TRY_BLOCK_1 to FILTER_BLOCK_3_A filter FILTER_BLOCK_3 handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END" "yes"
3416
3417 #blocks start in the middle of an intruction
3418 ./make_exception_overlap_test.sh try_block_start_in_the_middle_of_a_instruction invalid ".try AFTER_PREFIX_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END"
3419
3420 ./make_exception_overlap_test.sh catch_block_start_in_the_middle_of_a_instruction invalid ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler AFTER_PREFIX_2 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END"
3421
3422 ./make_exception_overlap_test.sh filter_block_start_in_the_middle_of_a_instructior invalid ".try TRY_BLOCK_1 to TRY_BLOCK_1_END filter AFTER_PREFIX_4 handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END" "yes"
3423
3424
3425 #block end in the middle of an instruction
3426 ./make_exception_overlap_test.sh try_block_end_in_the_middle_of_a_instruction invalid ".try TRY_BLOCK_1 to AFTER_PREFIX_4 catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END"
3427
3428 ./make_exception_overlap_test.sh catch_block_end_in_the_middle_of_a_instruction invalid ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to AFTER_PREFIX_5" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END"
3429
3430
3431 #regions are disjoint
3432 ./make_exception_overlap_test.sh exception_entry_overlap_disjoint_1 valid ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END"
3433
3434 ./make_exception_overlap_test.sh exception_entry_overlap_disjoint_2 valid ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END"
3435
3436 #nesting
3437 ./make_exception_overlap_test.sh nested_exception_entry_comes_first valid ".try TRY_BLOCK_1_A to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_1 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END"
3438
3439 ./make_exception_overlap_test.sh nested_exception_entry_comes_after invalid ".try TRY_BLOCK_1 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END" ".try TRY_BLOCK_1_A to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END"
3440
3441
3442 #mutual protectiong
3443 ./make_exception_overlap_test.sh exception_same_try valid ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END"
3444
3445 ./make_exception_overlap_test.sh exception_same_catch invalid ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" ".try TRY_BLOCK_2 to TRY_BLOCK_2_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END"
3446
3447 ./make_exception_overlap_test.sh exception_same_try_with_catch_and_filter valid ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_2 to CATCH_BLOCK_2_END" ".try TRY_BLOCK_1 to TRY_BLOCK_1_END filter FILTER_BLOCK_3 handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" "yes"
3448
3449 ./make_exception_overlap_test.sh exception_same_try_with_catch_and_finally invalid ".try TRY_BLOCK_1 to TRY_BLOCK_1_END finally handler FINALLY_BLOCK_1 to FINALLY_BLOCK_1_END" ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" "no" "yes"
3450
3451 ./make_exception_overlap_test.sh exception_same_try_with_catch_and_fault invalid ".try TRY_BLOCK_1 to TRY_BLOCK_1_END fault handler FINALLY_BLOCK_1 to FINALLY_BLOCK_1_END" ".try TRY_BLOCK_1 to TRY_BLOCK_1_END catch [mscorlib]System.Exception handler CATCH_BLOCK_1 to CATCH_BLOCK_1_END" "no" "yes"
3452
3453
3454 #ldftn
3455 ./make_ldftn_test.sh ldftn_static_method valid "ldftn void class Driver::Method()"
3456 ./make_ldftn_test.sh ldftn_virtual_method valid "ldftn instance void class Driver::VirtMethod()"
3457 ./make_ldftn_test.sh ldftn_corlib_method valid "ldftn instance string string::ToUpper()"
3458
3459 #this is encoded as a memberref
3460 ./make_ldftn_test.sh ldftn_bad_function invalid "ldftn void class Test::NonPresent()"
3461
3462 ./make_ldftn_test.sh ldftn_overflow invalid "ldftn instance void class Driver::Method()" "ldc.i4.0\n\tldc.i4.0"
3463
3464 ./make_ldftn_test.sh ldftn_ctor unverifiable "ldftn void class Test::.ctor()"
3465 ./make_ldftn_test.sh ldftn_static_method valid "ldftn void class Test::StaticMethod()"
3466 ./make_ldftn_test.sh ldftn_non_virtual_method valid "ldftn instance void class Test::Method()"
3467 ./make_ldftn_test.sh ldftn_virtual_method valid "ldftn instance void class Test::VirtMethod()"
3468
3469
3470 #ldvirtftn
3471 #TODO test visibility for ldftn and ldvirtftn
3472
3473 ./make_ldvirtftn_test.sh ldvirtftn_virt_method valid "ldvirtftn instance void class Test::VirtMethod()" "newobj void class Test::.ctor()"
3474 ./make_ldvirtftn_test.sh ldvirtftn_virt_underflow invalid "ldvirtftn instance void class Test::VirtMethod()" "nop"
3475 ./make_ldvirtftn_test.sh ldvirtftn_valid_obj_on_stack valid "ldvirtftn instance string object::ToString()" "newobj void object::.ctor()"
3476
3477 I=1
3478 for TYPE in "ldc.i4.0" "ldc.i8 0" "ldc.r4 2" "ldc.i4.1\n\tconv.i" "ldloca 0" "ldloc.1"
3479 do
3480         ./make_ldvirtftn_test.sh ldvirtftn_invalid_type_on_stack_${I} unverifiable "ldvirtftn instance string object::ToString()" "$TYPE"
3481         I=`expr $I + 1`
3482 done
3483
3484 ./make_ldvirtftn_test.sh ldvirtftn_non_virtual_method valid "ldvirtftn instance void class Test::Method()" "newobj void class Test::.ctor()"
3485
3486 ./make_ldvirtftn_test.sh ldvirtftn_ctor unverifiable "ldvirtftn void class Test::.ctor()" "newobj void class Test::.ctor()"
3487 ./make_ldvirtftn_test.sh ldvirtftn_static_method unverifiable "ldvirtftn void class Test::StaticMethod()" "newobj void class Test::.ctor()"
3488 ./make_ldvirtftn_test.sh ldvirtftn_method_not_present invalid "ldvirtftn void class Test::NonExistant()" "newobj void Test::.ctor()"
3489
3490
3491 ./make_ldvirtftn_test.sh ldvirtftn_method_stack_type_obj_compatible_1 valid "ldvirtftn instance string object::ToString()" "newobj void Test::.ctor()"
3492 ./make_ldvirtftn_test.sh ldvirtftn_method_stack_type_obj_compatible_2 valid "ldvirtftn void class Test::VirtMethod()" "newobj void Test::.ctor()"
3493 ./make_ldvirtftn_test.sh ldvirtftn_method_stack_type_obj_compatible_3 unverifiable "ldvirtftn void class Test::VirtMethod()" "newobj void object::.ctor()"
3494
3495
3496 #Delegates
3497 #ldftn delegates
3498 #pure native int
3499 ./make_delegate_test.sh delegate_with_native_int unverifiable "ldarg.1\n\tconv.i" "DelegateNoArg" "ldarg.0"
3500
3501 #random types
3502 I=1;
3503 for TYPE in "ldc.i4.0" "ldc.i8 0" "ldc.r4 0" "ldc.r8 1" "ldarga 1"
3504 do
3505         ./make_delegate_test.sh delegate_with_bad_type_${I} unverifiable "ldftn void Driver::Method()" "DelegateNoArg" "$TYPE"
3506         I=`expr $I + 1`
3507 done
3508
3509 #ldftn
3510 #static method
3511 ./make_delegate_test.sh delegate_ldftn_static_method_1 valid "ldftn void Driver::Method()" "DelegateNoArg" "ldnull"
3512 ./make_delegate_test.sh delegate_ldftn_static_method_2 valid "ldftn void Driver::Method2(int32)" "DelegateIntArg" "ldnull"
3513 ./make_delegate_test.sh delegate_ldftn_static_method_3 unverifiable "ldftn void Driver::Method2(int32)" "DelegateNoArg" "ldnull"
3514 ./make_delegate_test.sh delegate_ldftn_static_method_4 unverifiable "ldftn void Driver::Method()" "DelegateIntArg" "ldnull"
3515
3516 #non-virtual
3517 #null this
3518 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_1 valid "ldftn instance void Driver::NonVirtMethod()" "DelegateNoArg" "ldnull"
3519 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_2 valid "ldftn instance void Driver::NonVirtMethod2(int32)" "DelegateIntArg" "ldnull"
3520
3521 #method on this
3522 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_3 valid "ldftn instance void Driver::NonVirtMethod()" "DelegateNoArg" "newobj instance void class Driver::.ctor()"
3523 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_4 valid "ldftn instance void Driver::NonVirtMethod2(int32)" "DelegateIntArg" "newobj instance void class Driver::.ctor()"
3524 #method on parent
3525 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_5 valid "ldftn instance void Parent::ParentMethod()" "DelegateNoArg" "newobj instance void class Driver::.ctor()"
3526
3527 #invalid this
3528 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_6 unverifiable "ldftn instance void Driver::NonVirtMethod()" "DelegateNoArg" "newobj void object::.ctor()"
3529 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_7 unverifiable "ldftn instance void Driver::NonVirtMethod()" "DelegateNoArg" "newobj void Parent::.ctor()"
3530
3531 #virtual methods
3532 ./make_delegate_test.sh delegate_ldftn_virtual_method_1 valid "ldftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg.0"
3533 ./make_delegate_test.sh delegate_ldftn_virtual_method_2 valid "ldftn instance void Driver::VirtMethod2(int32)" "DelegateIntArg" "ldarg.0"
3534 ./make_delegate_test.sh delegate_ldftn_virtual_method_3 valid "ldftn instance void Driver::ParentVirtMethod()" "DelegateNoArg" "ldarg.0"
3535 ./make_delegate_test.sh delegate_ldftn_virtual_method_4 valid "ldftn instance void Parent::ParentVirtMethod()" "DelegateNoArg" "ldarg.0"
3536
3537 #other forms of ldarg
3538 ./make_delegate_test.sh delegate_ldftn_virtual_method_5 valid "ldftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg.s 0"
3539 ./make_delegate_test.sh delegate_ldftn_virtual_method_6 valid "ldftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg 0"
3540
3541 #object is not this
3542 ./make_delegate_test.sh delegate_ldftn_virtual_method_7 unverifiable "ldftn instance void Driver::VirtMethod()" "DelegateNoArg" "newobj instance void class Driver::.ctor()"
3543 ./make_delegate_test.sh delegate_ldftn_virtual_method_8 unverifiable "ldftn instance void Parent::VirtMethod()" "DelegateNoArg" "newobj instance void class Driver::.ctor()"
3544 ./make_delegate_test.sh delegate_ldftn_virtual_method_9 unverifiable "ldftn instance void Driver::ParentVirtMethod()" "DelegateNoArg" "newobj instance void class Driver::.ctor()"
3545 ./make_delegate_test.sh delegate_ldftn_virtual_method_10 unverifiable "ldftn instance void Parent::ParentVirtMethod()" "DelegateNoArg" "newobj instance void class Driver::.ctor()"
3546
3547 #static method
3548 ./make_delegate_test.sh delegate_ldftn_virtual_method_11 unverifiable "ldftn void Driver::VirtMethod()" "DelegateNoArg" "ldarg.0" "Driver"
3549 ./make_delegate_test.sh delegate_ldftn_virtual_method_12 unverifiable "ldftn void Parent::VirtMethod()" "DelegateNoArg" "ldarg.0" "Driver"
3550 ./make_delegate_test.sh delegate_ldftn_virtual_method_13 unverifiable "ldftn void Parent::ParentVirtMethod()" "DelegateNoArg" "ldarg.0" "Driver"
3551
3552 #final virtual
3553 ./make_delegate_test.sh delegate_ldftn_virtual_method_14 valid "ldftn instance void Driver::SealedVirtMethod()" "DelegateNoArg" "ldarg.0" "Driver"
3554 ./make_delegate_test.sh delegate_ldftn_virtual_method_15 unverifiable "ldftn instance void Parent::SealedVirtMethod()" "DelegateNoArg" "ldarg.0" "Driver"
3555 ./make_delegate_test.sh delegate_ldftn_virtual_method_16 unverifiable "ldftn instance void Parent::SealedVirtMethod()" "DelegateNoArg" "ldarg.0" "Parent"
3556
3557
3558 #instruction sequence
3559 ./make_delegate_test.sh delegate_ldftn_bad_sequence unverifiable "ldftn void Driver::Method()\n\t\tnop" "DelegateNoArg" "ldarg.0"
3560 #this one is terribly hard to read
3561
3562 ./make_delegate_test.sh delegate_ldftn_different_basic_block unverifiable "pop\n\t\tpop\n\t\tldarg.0\n\t\tldftn void Driver::Method()" "DelegateNoArg" "ldarg.0\n\t\tldftn void Driver::Method()\n\t\tldarg.1\n\t\tbrfalse DELEGATE_OP"
3563
3564 #it's not necessary to test split due to a protected block since the stack must be empty at the beginning.
3565
3566
3567 #virtual method with starg.0
3568 ./make_delegate_test.sh delegate_ldftn_virtual_method_with_starg0_1 unverifiable "ldftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg.0\n\tstarg.s 0\n\tldarg.0"
3569 ./make_delegate_test.sh delegate_ldftn_virtual_method_with_starg0_2 unverifiable "ldftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg.0\n\tstarg 0\n\tldarg.0"
3570
3571 #value types
3572 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_valuetype valid "ldftn instance void MyValueType::NonVirtMethod()" "DelegateNoArg" "ldloc.0\n\tbox MyValueType"
3573 ./make_delegate_test.sh delegate_ldftn_virtual_method_valuetype valid "ldftn instance string MyValueType::ToString()" "ToStringDelegate" "ldloc.0\n\tbox MyValueType"
3574
3575 ./make_delegate_test.sh delegate_ldftn_virtual_method_valuetype_byref unverifiable "ldftn instance string MyValueType::ToString()" "ToStringDelegate" "ldloca 0"
3576
3577
3578 #ldvirtftn
3579 #ok cases
3580 ./make_delegate_test.sh delegate_ldvirtftn_non_virtual_method valid "ldvirtftn instance void Driver::NonVirtMethod()" "DelegateNoArg" "ldarg.0\n\tdup"
3581 ./make_delegate_test.sh delegate_ldvirtftn_virtual_method valid "ldvirtftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg.0\n\tdup"
3582
3583 #wrong instruction sequence
3584 ./make_delegate_test.sh delegate_ldvirtftn_bad_sequence unverifiable "ldvirtftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg.0\n\tldarg.0"
3585
3586 ./make_delegate_test.sh delegate_ldvirtftn_different_basic_block unverifiable "pop\n\t\tdup\n\t\tldvirtftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg.0\n\t\tldarg.0\n\t\tldvirtftn instance void Driver::VirtMethod()\n\t\tldarg.1\n\t\tbrfalse DELEGATE_OP"
3587
3588 ./make_delegate_test.sh delegate_ldvirtftn_different_basic_block_dup unverifiable "DUP_OP: ldvirtftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg.0\n\t\tdup\n\t\tldarg.1\n\t\tbrfalse DUP_OP\n\t\tpop\n\t\tdup"
3589
3590
3591 #tests for ovf opcodes
3592 I=1
3593 for OP in "add.ovf" "add.ovf.un" "mul.ovf" "mul.ovf.un" "sub.ovf" "sub.ovf.un" 
3594 do
3595         for TYPE in "object" "string" "float32" "float64" "int32*" "typedref" "int32[]" "int32[,]" "method int32 *(int32)"
3596         do
3597                 ./make_bin_test.sh bin_ovf_math_1_${I} unverifiable $OP int32 "${TYPE}"
3598                 ./make_bin_test.sh bin_ovf_math_2_${I} unverifiable $OP int64 "${TYPE}"
3599                 ./make_bin_test.sh bin_ovf_math_3_${I} unverifiable $OP "native int" "${TYPE}"
3600                 ./make_bin_test.sh bin_ovf_math_4_${I} unverifiable $OP "int32&" "${TYPE}"
3601                 I=`expr $I + 1`
3602         done
3603
3604         for TYPE in "int32" "native int"
3605         do
3606                 ./make_bin_test.sh bin_ovf_math_5_${I} valid $OP int32 "${TYPE}"
3607                 I=`expr $I + 1`
3608         done
3609
3610         for TYPE in "int32" "native int"
3611         do
3612                 ./make_bin_test.sh bin_ovf_math_6_${I} valid $OP "native int" "${TYPE}"
3613                 I=`expr $I + 1`
3614         done
3615 done
3616         
3617 for OP in "add.ovf.un" "sub.ovf.un" 
3618 do
3619         for TYPE in "int32" "native int" "int32&"
3620         do
3621                 ./make_bin_test.sh bin_ovf_math_7_${I} unverifiable $OP "int32&" "${TYPE}"
3622                 I=`expr $I + 1`
3623         done
3624
3625         for TYPE in "int32" "native int" "int32&"
3626         do
3627                 ./make_bin_test.sh bin_ovf_math_8_${I} unverifiable $OP "${TYPE}" "int32&"
3628                 I=`expr $I + 1`
3629         done
3630 done
3631
3632 #should be invalid
3633 for OP in "add.ovf" "mul.ovf" "mul.ovf.un" "sub.ovf"
3634 do
3635         for TYPE in "int32" "native int" "int32&"
3636         do
3637                 ./make_bin_test.sh bin_ovf_math_7_${I} unverifiable $OP "int32&" "${TYPE}"
3638                 I=`expr $I + 1`
3639         done
3640
3641         for TYPE in "int32" "native int" "int32&"
3642         do
3643                 ./make_bin_test.sh bin_ovf_math_8_${I} unverifiable $OP "${TYPE}" "int32&"
3644                 I=`expr $I + 1`
3645         done
3646 done
3647
3648 #ovf math doesn't work with floats
3649 I=1
3650 for OP in "add.ovf.un" "add.ovf" "sub.ovf.un" "sub.ovf" "mul.ovf.un" "mul.ovf"
3651 do
3652         for TYPE in "float32" "float64"
3653         do
3654                 ./make_bin_test.sh bin_ovf_math_f_${I} unverifiable $OP "${TYPE}" "${TYPE}"
3655                 I=`expr $I + 1`
3656         done
3657 done
3658
3659 #unbox.any
3660
3661 ./make_unbox_any_test.sh unbox_any_valuetype valid object int32 "stloc.1" "ldc.i4.0\n\tbox int32"
3662 ./make_unbox_any_test.sh unbox_any_reference valid object string "stloc.1" "ldstr \"str\""
3663 ./make_unbox_any_test.sh unbox_any_reference_null valid object string "stloc.1" "ldnull"
3664
3665 #object is not a reference type
3666 I=1
3667 for TYPE in "ldc.i4.0" "ldc.i8 0" "ldc.r8 0" "ldloca 0" "ldc.i4.0\n\tconv.u"
3668 do
3669         ./make_unbox_any_test.sh unbox_any_bad_object_${I} unverifiable object int32 "stloc.1" "$TYPE"
3670         I=`expr $I + 1`
3671 done
3672
3673 #token is byref, byref-like or void
3674 ./make_unbox_any_test.sh unbox_any_bad_token_1 invalid object "int32\&" "pop" "ldnull"
3675 ./make_unbox_any_test.sh unbox_any_bad_token_2 unverifiable object typedref "pop" "ldnull"
3676 ./make_unbox_any_test.sh unbox_any_bad_token_3 invalid object void "pop" "ldnull"
3677
3678
3679
3680 #stobj
3681 #bad src
3682 I=1
3683 for TYPE in "int32" "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]" "native int"
3684 do
3685         ./make_stobj_test.sh stobj_simple_${I} valid "$TYPE" "$TYPE\&" "$TYPE" 
3686         I=`expr $I + 1`
3687 done
3688
3689
3690 for TYPE in "int32*" "method int32 *(int32)"
3691 do
3692         ./make_stobj_test.sh stobj_simple_${I} unverifiable "$TYPE" "$TYPE\&" "$TYPE" 
3693         I=`expr $I + 1`
3694 done
3695
3696 for TYPE in "int32\&" "void" "typedref"
3697 do
3698         ./make_stobj_test.sh stobj_simple_${I} invalid "$TYPE" "$TYPE\&" "$TYPE" 
3699         I=`expr $I + 1`
3700 done
3701
3702 #src should not be ptr or byref
3703 I=1
3704 for TYPE in "int32\&" "int32*" "typedref"
3705 do
3706         ./make_stobj_test.sh stobj_bad_src_${I} unverifiable "$TYPE" "int32\&" "int32" 
3707         I=`expr $I + 1`
3708 done
3709
3710 #dest type is not a managed pointer
3711 I=1
3712 for TYPE in "int32" "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]" "native int"
3713 do
3714         ./make_stobj_test.sh stobj_dest_not_managed_pointer_${I} unverifiable "$TYPE" "$TYPE" "$TYPE" 
3715         I=`expr $I + 1`
3716 done
3717
3718 #src is compat to dest
3719 I=1
3720 for TYPE in "int8" "unsigned int8" "bool" "int16" "unsigned int16" "char" "int32" "unsigned int32" "native int" "native unsigned int"
3721 do 
3722         ./make_stobj_test.sh stobj_src_compat_to_token_${I} valid "$TYPE" "int32\&" "int32" 
3723         I=`expr $I + 1`
3724 done
3725
3726 for TYPE in "int64" "unsigned int64" "float32" "float64" string object
3727 do 
3728         ./make_stobj_test.sh stobj_src_compat_to_token_${I} unverifiable "$TYPE" "int32\&" "int32" 
3729         I=`expr $I + 1`
3730 done
3731
3732 for TYPE in string object Class
3733 do 
3734         ./make_stobj_test.sh stobj_src_compat_to_token_${I} valid "$TYPE" "object\&" "object" 
3735         I=`expr $I + 1`
3736 done
3737
3738 ./make_stobj_test.sh stobj_src_compat_to_token_boxed_vt valid "int32" "object\&" "object" "box int32"
3739 ./make_stobj_test.sh stobj_src_compat_to_token_null_literal valid "object" "object\&" "object" "pop\n\tldnull"
3740
3741
3742 #token type subtype of dest_type
3743 for TYPE in string object Class "int32[]" "int32[,]"
3744 do 
3745         ./make_stobj_test.sh stobj_token_subtype_of_dest_${I} valid "$TYPE" "object\&" "$TYPE" 
3746         I=`expr $I + 1`
3747 done
3748
3749
3750
3751
3752 #initobj
3753 I=1
3754 for TYPE in int32 int64 float32 float64 object string MyStruct Class "valuetype StructTemplate\`1<object>" "native int"
3755 do
3756         ./make_initobj_test.sh initobj_good_types_${I} valid "${TYPE}\&" "${TYPE}"
3757         I=`expr $I + 1`
3758 done
3759
3760 #pointers
3761 I=1
3762 for TYPE in "native int" "int32*"
3763 do
3764         ./make_initobj_test.sh initobj_pointer_like_types_${I} unverifiable "${TYPE}" "${TYPE}"
3765         I=`expr $I + 1`
3766 done
3767
3768 #bad dest
3769 I=1
3770 for TYPE in int32 int64 float32 float64 string MyStruct typedref
3771 do
3772         ./make_initobj_test.sh initobj_wrong_on_stack_types_${I} unverifiable "${TYPE}" "${TYPE}"
3773         I=`expr $I + 1`
3774 done
3775
3776
3777 #invalid token
3778 I=1
3779 for TYPE in "int32\&" void
3780 do
3781         ./make_initobj_test.sh initobj_bad_token_type_${I} invalid "int32\&" "${TYPE}"
3782         I=`expr $I + 1`
3783 done
3784
3785 #bad token
3786 I=1
3787 for TYPE in int64 float32 float64 object string MyStruct Class "valuetype StructTemplate\`1<object>"
3788 do
3789         ./make_initobj_test.sh initobj_wrong_type_on_stack_${I} unverifiable "int32\&" "${TYPE}"
3790         I=`expr $I + 1`
3791 done
3792
3793 #type and token are compatible
3794 ./make_initobj_test.sh initobj_compatible_type_on_stack_1 valid "int32\&" "native int"
3795 ./make_initobj_test.sh initobj_compatible_type_on_stack_2 strict "object\&" "string"
3796 ./make_initobj_test.sh initobj_compatible_type_on_stack_3 unverifiable "string\&" "object"
3797
3798 ./make_initobj_test.sh initobj_stack_underflow invalid "int32\&" "int32" "pop"
3799
3800 ./make_initobj_test.sh initobj_null_literal unverifiable "int32\&" "int32" "pop\n\tldnull"
3801 ./make_initobj_test.sh initobj_boxed_value unverifiable "int32\&" "int32" "pop\n\tldc.i4.0\n\tbox int32"
3802
3803
3804
3805 #cpobj
3806 I=1
3807 for TYPE in int32 int64 float32 float64 object string "valuetype MyStruct" "int32[]" "int32[,]" "native int"
3808 do
3809         ./make_cpobj_test.sh cpobj_simple_${I} valid "${TYPE}\&" "${TYPE}\&" "${TYPE}"
3810         I=`expr $I + 1`
3811 done
3812
3813 #should be able to use unmanaged types
3814 for TYPE in "int32*" "method int32 *(int32)"
3815 do
3816         ./make_cpobj_test.sh cpobj_simple_${I} unverifiable "${TYPE}\&" "${TYPE}\&" "${TYPE}"
3817         I=`expr $I + 1`
3818 done
3819
3820 #should be able to use invalid types
3821 for TYPE in "int32\&" "void" "typedref"
3822 do
3823         ./make_cpobj_test.sh cpobj_simple_${I} invalid "${TYPE}\&" "${TYPE}\&" "${TYPE}"
3824         I=`expr $I + 1`
3825 done
3826
3827 #src not a managed pointer
3828 I=1
3829 for TYPE in "int32" "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]" "native int"
3830 do
3831         ./make_cpobj_test.sh cpobj_src_not_byref_${I} unverifiable "${TYPE}" "${TYPE}\&" "${TYPE}"
3832         I=`expr $I + 1`
3833 done
3834
3835 #dest not a managed pointer
3836 I=1
3837 for TYPE in "int32" "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]" "native int"
3838 do
3839         ./make_cpobj_test.sh cpobj_dest_not_byref_${I} unverifiable "${TYPE}\&" "${TYPE}" "${TYPE}"
3840         I=`expr $I + 1`
3841 done
3842
3843 #src and dest not a managed pointer
3844 I=1
3845 for TYPE in "int32" "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]" "native int"
3846 do
3847         ./make_cpobj_test.sh cpobj_src_and_dest_not_byref_${I} unverifiable "${TYPE}" "${TYPE}" "${TYPE}"
3848         I=`expr $I + 1`
3849 done
3850
3851
3852 #bad token type
3853 I=1
3854 for TYPE in "int32\&"
3855 do
3856         ./make_cpobj_test.sh cpobj_bad_token_type_${I} invalid "int32\&" "int32\&" "${TYPE}"
3857         I=`expr $I + 1`
3858 done
3859
3860 ./make_cpobj_test.sh cpobj_bad_token_type_2 badmd "int32\&" "int32\&" "void"
3861
3862 #src compat to token
3863 ./make_cpobj_test.sh cpobj_src_compat_1 valid "int32\&" "int32\&" "native int"
3864 ./make_cpobj_test.sh cpobj_src_compat_2 valid "native int\&" "int32\&" "int32"
3865
3866 ./make_cpobj_test.sh cpobj_src_compat_3 valid "string\&" "object\&" "object"
3867 ./make_cpobj_test.sh cpobj_src_compat_4 valid "Class\&" "object\&" "object"
3868
3869 ./make_cpobj_test.sh cpobj_src_compat_5 unverifiable "object\&" "string\&" "string"
3870 ./make_cpobj_test.sh cpobj_src_compat_6 unverifiable "object\&" "Class\&" "Class"
3871
3872
3873 #src not compat to token
3874 I=1
3875 for TYPE in  "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]"
3876 do
3877         ./make_cpobj_test.sh cpobj_src_not_compat_to_token_${I} unverifiable "${TYPE}\&" "int32\&" "int32"
3878         I=`expr $I + 1`
3879 done
3880
3881 #token compat to dest
3882 ./make_cpobj_test.sh cpobj_token_compat_1 valid "int32\&" "int32\&" "native int"
3883 ./make_cpobj_test.sh cpobj_token_compat_2 valid "int32\&" "native int\&" "int32"
3884
3885 ./make_cpobj_test.sh cpobj_token_compat_3 valid "Class\&" "object\&" "Class"
3886 ./make_cpobj_test.sh cpobj_token_compat_4 valid "string\&" "object\&" "string"
3887
3888 ./make_cpobj_test.sh cpobj_token_compat_5 unverifiable "object\&" "Class\&" "object"
3889 ./make_cpobj_test.sh cpobj_token_compat_6 unverifiable "object\&" "string\&" "object"
3890
3891 #token to compat to dest
3892 I=1
3893 for TYPE in  "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]"
3894 do
3895         ./make_cpobj_test.sh cpobj_token_not_compat_to_dest${I} unverifiable "int32\&" "int32\&" "${TYPE}"
3896         I=`expr $I + 1`
3897 done
3898
3899 #src and dest not a managed pointer
3900 ./make_cpobj_test.sh cpobj_bad_src_and_dest unverifiable "int32" "int32" "int32"
3901
3902 #src or dest are null or boxed
3903 ./make_cpobj_test.sh cpobj_src_is_null unverifiable "int32\&" "int32\&" "int32" "pop\n\tldnull"
3904 ./make_cpobj_test.sh cpobj_dest_is_null unverifiable "int32\&" "int32\&" "int32" "pop\n\tpop\n\tldnull\n\tldloc.0"
3905
3906 ./make_cpobj_test.sh cpobj_src_is_boxed unverifiable "int32" "int32\&" "int32" "box int32"
3907 ./make_cpobj_test.sh cpobj_dest_is_boxed unverifiable "int32\&" "int32" "int32" "pop\n\tbox int32\n\tldloc.0"
3908
3909 ./make_cpobj_test.sh cpobj_underflow_1 invalid "int32\&" "int32\&" "int32" "pop"
3910 ./make_cpobj_test.sh cpobj_underflow_2 invalid "int32\&" "int32\&" "int32" "pop\n\tpop"
3911
3912
3913
3914 #sizeof
3915 I=1
3916 for TYPE in int32 object string "int32[]" "native int" "int32[,]" typedref "int32*" "method int32 *(int32)" "class Template\`1<int32>" "valuetype MyStruct"
3917 do
3918         ./make_sizeof_test.sh sizeof_${I} valid "$TYPE"
3919         I=`expr $I + 1`
3920 done
3921
3922 for TYPE in void "int32&"
3923 do
3924         ./make_sizeof_test.sh sizeof_${I} invalid "$TYPE"
3925         I=`expr $I + 1`
3926 done
3927
3928
3929 #localloc
3930
3931 #valid types
3932 I=1
3933 for INIT in "ldc.i4.1" "ldc.i4.1\n\tconv.i" 
3934 do
3935         ./make_localloc_test.sh localloc_stack_type_$I unverifiable "$INIT"
3936         I=`expr $I + 1`
3937 done
3938
3939 #these types should be invalid
3940 for INIT in "ldc.i8 2" "ldc.r4 2.2" "ldc.r8 2.2" "ldloca 1"
3941 do
3942         ./make_localloc_test.sh localloc_stack_type_$I unverifiable "$INIT"
3943         I=`expr $I + 1`
3944 done
3945
3946 #stack underflow
3947 ./make_localloc_test.sh localloc_empty_stack invalid 
3948 ./make_localloc_test.sh localloc_stack_with_more_than_2_items invalid "ldc.i4.1\n\tldc.i4.1"
3949
3950 #inside exception blocks
3951 ./make_localloc_test.sh localloc_inside_catch_handler invalid "ldc.i4.1" "catch"
3952 ./make_localloc_test.sh localloc_inside_filter invalid "ldc.i4.1" "filter"
3953 ./make_localloc_test.sh localloc_inside_handler invalid "ldc.i4.1" "handler"
3954 ./make_localloc_test.sh localloc_inside_finally invalid "ldc.i4.1" "finally"
3955 ./make_localloc_test.sh localloc_inside_fault invalid "ldc.i4.1" "fault"
3956
3957
3958
3959
3960
3961
3962 #tests for call and callvirt
3963
3964 #call test
3965 #invalid method token
3966 #valid
3967 #validate the this pointer for signatures with HASTHIS. 
3968 #this ptr: reference types must be a value, value type can be a MP or a BT.
3969 #number of args
3970 #args are compatible
3971 #method is abstract
3972 #calling base class constructor
3973 #calling a value type constructor
3974 #visibility
3975 #calling non-final virtual calls on something not a boxed valuetype, this arg must have THIS_POINTER_MASK and no starg.0 or ldarga.0 happens
3976
3977
3978 I=1
3979 for CTYPE in "call" "callvirt"
3980 do
3981         ./make_call_test.sh call_${I}_non_virtual_1 valid "${CTYPE} instance void ClassA::Method1()" "newobj instance void ClassA::.ctor()"
3982         ./make_call_test.sh call_${I}_non_virtual_2 valid "${CTYPE} instance void ClassA::Method1()" "ldnull"
3983         ./make_call_test.sh call_${I}_non_virtual_3 valid "${CTYPE} instance void ClassA::Method2(int32)" "newobj instance void ClassA::.ctor()\n\t\tldc.i4.0"
3984         ./make_call_test.sh call_${I}_non_virtual_underflow invalid "${CTYPE} instance void ClassA::Method12(int32)" "newobj instance void ClassA::.ctor()"
3985         ./make_call_test.sh call_${I}_non_virtual_bad_this invalid "${CTYPE} instance void ClassA::Method12(int32)" "newobj instance void ClassB::.ctor()"
3986
3987         ./make_call_test.sh call_${I}_non_virtual_compat_this_1 valid "${CTYPE} instance void ClassA::Method1()" "newobj instance void ClassC::.ctor()"
3988         ./make_call_test.sh call_${I}_non_virtual_compat_this_2 valid "${CTYPE} instance void ClassC::Method1()" "newobj instance void ClassC::.ctor()"
3989 #This test passes peverify but fails under MS runtime due to a bug on their implementation of method token resolution.
3990         ./make_call_test.sh call_${I}_non_virtual_compat_this_3 valid "${CTYPE} instance void ClassC::Method1()" "newobj instance void ClassA::.ctor()"
3991
3992         ./make_call_test.sh call_${I}_final_virtual_method_1 valid "${CTYPE} instance void ClassC::VirtMethod()" "newobj instance void ClassC::.ctor()"
3993
3994         ./make_call_test.sh call_${I}_virtual_method_1 valid "${CTYPE} instance void Driver::VirtMethod()" "ldarg.0" "instance"
3995         ./make_call_test.sh call_${I}_virtual_method_2 valid "${CTYPE} instance void BaseClass::VirtMethod()" "ldarg.0" "instance"
3996
3997         I=`expr $I + 1`
3998 done
3999
4000
4001 #tests for call only
4002 ./make_call_test.sh call_global_1 valid "call void GlobalMethod1()"
4003 ./make_call_test.sh call_global_2 valid "call void GlobalMethod2(int32)" "ldc.i4.0"
4004 ./make_call_test.sh call_global_underflow invalid "call void GlobalMethod2(int32)" ""
4005 ./make_call_test.sh call_abstract_method unverifiable "call instance void InterfaceA::AbsMethod()" "newobj instance void ImplIfaceA::.ctor()"
4006 ./make_call_test.sh call_final_virtual_method_2 unverifiable "call instance void ClassC::VirtMethod()" "newobj instance void ClassA::.ctor()"
4007 ./make_call_test.sh call_final_virtual_method_3 unverifiable "call instance void ClassA::VirtMethod()" "newobj instance void ClassA::.ctor()"
4008
4009 ./make_call_test.sh call_virtual_method_3 unverifiable "call instance void BaseClass::VirtMethod()" "ldarg.0" "instance" "ldarg.0\n\t\tstarg 0" 
4010 ./make_call_test.sh call_virtual_method_4 unverifiable "call instance void BaseClass::VirtMethod()" "ldarg.0" "instance" "ldarga 0\n\t\tpop"
4011
4012 #value type (we can call non final virtual on boxed VT)
4013 ./make_call_test.sh call_valuetype_1 valid "call instance void MyValueType::Method()" "ldloca 0"
4014 ./make_call_test.sh call_valuetype_2 unverifiable "call instance void MyValueType::Method()" "ldloc.0\n\t\tbox MyValueType"
4015 ./make_call_test.sh call_valuetype_3 unverifiable "call instance void MyValueType::Method()" "ldloc.0"
4016
4017 ./make_call_test.sh call_valuetype_4 unverifiable "call instance int32 [mscorlib]System.ValueType::GetHashCode()" "ldloca 0" "static" "pop"
4018 ./make_call_test.sh call_valuetype_5 valid "call instance int32 MyValueType::GetHashCode()" "ldloca 0" "static" "pop"
4019
4020 ./make_call_test.sh call_valuetype_6 valid "call instance int32 [mscorlib]System.ValueType::GetHashCode()"  "ldloc.0\n\t\tbox MyValueType" "static" "pop"
4021 ./make_call_test.sh call_valuetype_7 valid "call instance bool object::Equals(object)" "ldloc.0\n\t\tbox MyValueType\n\t\tldnull" "static" "pop"
4022
4023 ./make_call_test.sh call_valuetype_8 valid "call instance int32 [mscorlib]System.Object::GetHashCode()"  "ldloc.0\n\t\tbox MyValueType" "static" "pop"
4024
4025 #tests for callvirt only
4026 #FIXME ilasm encode the signature with instance even if it doesn't state so.
4027 #./make_call_test.sh call_virt_global_1 invalid "callvirt void GlobalMethod1()"
4028
4029 ./make_call_test.sh callvirt_abstract_method valid "callvirt instance void InterfaceA::AbsMethod()" "newobj instance void ImplIfaceA::.ctor()"
4030 ./make_call_test.sh callvirt_final_virtual_method_2 unverifiable "callvirt instance void ClassC::VirtMethod()" "newobj instance void ClassA::.ctor()"
4031 ./make_call_test.sh callvirt_final_virtual_method_3 valid "callvirt instance void ClassA::VirtMethod()" "newobj instance void ClassA::.ctor()"
4032
4033 ./make_call_test.sh callvirt_virtual_method_3 valid "callvirt instance void BaseClass::VirtMethod()" "ldarg.0" "instance" "ldarg.0\n\t\tstarg 0" 
4034 ./make_call_test.sh callvirt_virtual_method_4 valid "callvirt instance void BaseClass::VirtMethod()" "ldarg.0" "instance" "ldarga 0\n\t\tpop"
4035
4036 #value type (we can call non final virtual on boxed VT)
4037 ./make_call_test.sh callvirt_valuetype_1 unverifiable "callvirt instance void MyValueType::Method()" "ldloca 0"
4038 ./make_call_test.sh callvirt_valuetype_2 unverifiable "callvirt instance void MyValueType::Method()" "ldloc.0\n\t\tbox MyValueType"
4039 ./make_call_test.sh callvirt_valuetype_3 unverifiable "callvirt instance void MyValueType::Method()" "ldloc.0"
4040
4041 ./make_call_test.sh callvirt_valuetype_4 unverifiable "callvirt instance int32 [mscorlib]System.ValueType::GetHashCode()" "ldloca 0" "static" "pop"
4042 ./make_call_test.sh callvirt_valuetype_5 unverifiable "callvirt instance int32 MyValueType::GetHashCode()" "ldloca 0" "static" "pop"
4043
4044 ./make_call_test.sh callvirt_valuetype_6 valid "callvirt instance int32 [mscorlib]System.ValueType::GetHashCode()"  "ldloc.0\n\t\tbox MyValueType" "static" "pop"
4045 ./make_call_test.sh callvirt_valuetype_7 valid "callvirt instance bool object::Equals(object)" "ldloc.0\n\t\tbox MyValueType\n\t\tldnull" "static" "pop"
4046 ./make_call_test.sh callvirt_valuetype_8 valid "callvirt instance int32 [mscorlib]System.Object::GetHashCode()"  "ldloc.0\n\t\tbox MyValueType" "static" "pop"
4047
4048
4049 #mkrefany
4050 ./make_mkrefany.sh mkrefany_empty_stack invalid int32 int32 "pop"
4051
4052 ./make_mkrefany.sh mkrefany_good_type_1 valid int32 int32
4053 ./make_mkrefany.sh mkrefany_good_type_2 valid int32 "unsigned int32"
4054 ./make_mkrefany.sh mkrefany_good_type_3 valid int32 "native int"
4055 ./make_mkrefany.sh mkrefany_good_type_4 valid object object
4056
4057 ./make_mkrefany.sh mkrefany_type_not_compat_1 unverifiable string object
4058 ./make_mkrefany.sh mkrefany_type_not_compat_2 unverifiable int32 int8
4059 ./make_mkrefany.sh mkrefany_type_not_compat_3 unverifiable object string
4060
4061 ./make_mkrefany.sh mkrefany_native_int unverifiable int32 int32 "conv.i"
4062
4063 ./make_mkrefany.sh mkrefany_bad_type_1 unverifiable int32 int32 "pop\n\t\tldc.i4.0"
4064
4065 ./make_mkrefany.sh mkrefany_bad_type_2 invalid int32 "int32\&"
4066
4067
4068 #method definition return type validation
4069 ./make_invalid_ret_type.sh ret_type_byref unverifiable "int32\&"
4070 ./make_invalid_ret_type.sh ret_type_typedref unverifiable "typedref"
4071 ./make_invalid_ret_type.sh ret_type_arg_interator unverifiable "valuetype [mscorlib]System.ArgIterator"
4072 ./make_invalid_ret_type.sh ret_type_arg_handle unverifiable "valuetype [mscorlib]System.RuntimeArgumentHandle"
4073
4074
4075
4076 #delegate compat tests P. II 14.6
4077 #TODO generic related testss
4078
4079 #for T in {}
4080 #./make_delegate_compat_test.sh valid
4081
4082
4083 #all types
4084 #int32 int64 "native int" float64 "valuetype MyValueType" "class ClassA" "int8\&" "int16\&" "int32\&" "int64\&" "native int\&" "float32\&" "float64\&" "valuetype MyValueType\&" "class ClassA\&" "int32*" "method int32 *(int32)" "method float32 *(int32)" "method int32 *(float64)" "method vararg int32 *(int32)"
4085 #verifiable
4086 #int32 int64 "native int" float64 "valuetype MyValueType" "class ClassA" "int8\&" "int16\&" "int32\&" "int64\&" "native int\&" "float32\&" "float64\&" "valuetype MyValueType\&" "class ClassA\&"
4087
4088 I=1
4089 for TYPE1 in int32 int64 "native int" float64 "valuetype MyValueType" "class ClassA" "int8\&" "int16\&" "int32\&" "int64\&" "native int\&" "float32\&" "float64\&" "valuetype MyValueType\&" "class ClassA\&"
4090 do
4091         ./make_delegate_compat_test.sh delegate_compat_basic_types_${I} valid int32 int32 "$TYPE1" "$TYPE1"
4092         I=`expr $I + 1`
4093 done
4094
4095 for TYPE1 in "int32*" "method int32 *(int32)" "method float32 *(int32)" "method int32 *(float64)" "method vararg int32 *(int32)"
4096 do
4097         ./make_delegate_compat_test.sh delegate_compat_basic_types_${I} unverifiable int32 int32 "$TYPE1" "$TYPE1"
4098         I=`expr $I + 1`
4099 done
4100
4101 #D is delegate and T is target method
4102 #arguments
4103 #3. D:=T if T is a base type or an interface implemented by D. D is not valuetype (primitive, pointers, etc)
4104
4105 ./make_delegate_compat_test.sh delegate_super_type_arg_1 valid int32 int32 string object
4106 ./make_delegate_compat_test.sh delegate_super_type_arg_2 valid int32 int32 ImplA InterfaceA
4107
4108 ./make_delegate_compat_test.sh delegate_super_type_arg_3 unverifiable int32 int32 object string
4109 ./make_delegate_compat_test.sh delegate_super_type_arg_4 unverifiable int32 int32 InterfaceA ImplA
4110
4111 ./make_delegate_compat_test.sh delegate_super_type_arg_5 unverifiable int32 int32 object int32
4112 ./make_delegate_compat_test.sh delegate_super_type_arg_6 unverifiable int32 int32 object "int32\&"
4113 ./make_delegate_compat_test.sh delegate_super_type_arg_7 unverifiable int32 int32 object "object\&"
4114
4115
4116 #primitive type size based conversion - don't work with delegates
4117 ./make_delegate_compat_test.sh delegate_primitive_arg_same_size_1 unverifiable int32 int32 "unsigned int32" int32
4118 ./make_delegate_compat_test.sh delegate_primitive_arg_same_size_2 unverifiable int32 int32 "native int" int32
4119
4120 ./make_delegate_compat_test.sh delegate_primitive_arg_same_size_3 unverifiable int32 int32 int32 "unsigned int32"
4121 ./make_delegate_compat_test.sh delegate_primitive_arg_same_size_4 unverifiable int32 int32 int32 "native int"
4122
4123 #value types
4124 ./make_delegate_compat_test.sh delegate_valuetype_arg_1 valid int32 int32 "valuetype MyValueType" "valuetype MyValueType"
4125 ./make_delegate_compat_test.sh delegate_valuetype_arg_2 unverifiable int32 int32 "valuetype MyValueType" int32
4126
4127
4128 #4. D:=T if both are interfaces and implementation D requires implementation of T (D is a supertype of T)
4129 ./make_delegate_compat_test.sh delegate_super_iface_arg_1 valid int32 int32 InterfaceB InterfaceA
4130 ./make_delegate_compat_test.sh delegate_super_iface_arg_2 unverifiable int32 int32 InterfaceA InterfaceB
4131
4132
4133 #5. D[]:=T[] if D:=T and are both vector or both have the same rank
4134 ./make_delegate_compat_test.sh delegate_array_arg_1 valid int32 int32 "int32[]" "int32[]"
4135 ./make_delegate_compat_test.sh delegate_array_arg_2 valid int32 int32 "string[]" "object[]"
4136
4137 ./make_delegate_compat_test.sh delegate_array_arg_3 unverifiable int32 int32 "object[]" "object[,]"
4138 ./make_delegate_compat_test.sh delegate_array_arg_4 unverifiable int32 int32 "object[,]" "object[]"
4139 ./make_delegate_compat_test.sh delegate_array_arg_5 unverifiable int32 int32 "object[]" "string[]"
4140
4141 #6. D:=T if both are method pointers and obey this rules for all args and params
4142 #TODO how can we cook a test that will be verifiable but use such types
4143 ./make_delegate_compat_test.sh delegate_method_ptr_arg_1 unverifiable int32 int32 "method int32 *(float64)" "method int32 *(float64)"
4144 #no way do say this is invalid
4145 ./make_delegate_compat_test.sh delegate_method_ptr_arg_2 unverifiable int32 int32 "method int32 *(float64)" "method int32 *(int32)"
4146 #and that is is valid
4147 ./make_delegate_compat_test.sh delegate_method_ptr_arg_2 unverifiable int32 int32 "method int32 *(string)" "method int32 *(object)"
4148
4149
4150 #TODO we don't perform proper type load verification
4151 #./make_delegate_compat_test.sh delegate_void_args invalid int32 int32 void void
4152
4153 ./make_delegate_compat_test.sh delegate_enum_args_1 unverifiable int32 int32 Int32Enum int32
4154 ./make_delegate_compat_test.sh delegate_enum_args_2 unverifiable int32 int32 int32 Int32Enum
4155
4156 #TODO check using native method
4157 ./make_delegate_compat_test.sh delegate_pointers_args_1 unverifiable int32 int32 "string*" "object*"
4158 ./make_delegate_compat_test.sh delegate_pointers_args_2 unverifiable int32 int32 "ImplA*" "InterfaceA*"
4159 ./make_delegate_compat_test.sh delegate_pointers_args_3 unverifiable int32 int32 "object*" "string*"
4160 ./make_delegate_compat_test.sh delegate_pointers_args_4 unverifiable int32 int32 "int32*" "int32*"
4161
4162
4163 #TODO: 7,8,9 generic related.
4164
4165 #call conv
4166 ./make_delegate_compat_test.sh delegate_bad_cconv_1 unverifiable int32 int32 int32 int32 "default" "vararg"
4167 #This is invalid because we don't properly decode memberref signatures
4168 ./make_delegate_compat_test.sh delegate_bad_cconv_2 invalid int32 int32 int32 int32 "vararg" "  "
4169
4170 #return type
4171
4172 #3. D:=T if D is a basetype or implemented interface of T and T is not a valuetype
4173
4174 ./make_delegate_compat_test.sh delegate_super_type_ret_1 valid object string int32 int32
4175 ./make_delegate_compat_test.sh delegate_super_type_ret_2 valid InterfaceA ImplA int32 int32
4176
4177 ./make_delegate_compat_test.sh delegate_super_type_ret_3 unverifiable string object int32 int32
4178 ./make_delegate_compat_test.sh delegate_super_type_ret_4 unverifiable ImplA InterfaceA int32 int32
4179
4180 ./make_delegate_compat_test.sh delegate_super_type_ret_5 unverifiable object int32 int32 int32
4181 ./make_delegate_compat_test.sh delegate_super_type_ret_6 unverifiable object "int32\&" int32 int32
4182 ./make_delegate_compat_test.sh delegate_super_type_ret_7 unverifiable object "object\&" int32 int32
4183
4184
4185 #primitive type size based conversion - don't work with delegates
4186 ./make_delegate_compat_test.sh delegate_primitive_ret_same_size_1 unverifiable "unsigned int32" int32 int32 int32
4187 ./make_delegate_compat_test.sh delegate_primitive_ret_same_size_2 unverifiable "native int" int32 int32 int32
4188
4189 ./make_delegate_compat_test.sh delegate_primitive_ret_same_size_3 unverifiable int32 "unsigned int32" int32 int32
4190 ./make_delegate_compat_test.sh delegate_primitive_ret_same_size_4 unverifiable int32 "native int" int32 int32
4191
4192 #value types
4193 ./make_delegate_compat_test.sh delegate_valuetype_ret_1 valid "valuetype MyValueType" "valuetype MyValueType" int32 int32
4194 ./make_delegate_compat_test.sh delegate_valuetype_ret_2 unverifiable "valuetype MyValueType" int32 int32 int32
4195 ./make_delegate_compat_test.sh delegate_valuetype_ret_2 unverifiable int32 "valuetype MyValueType" int32 int32
4196
4197
4198 #4. D:=T if both are interfaces and implementation T requires implementation of D (T is a supertype of D)
4199 ./make_delegate_compat_test.sh delegate_super_iface_arg_1 valid InterfaceA InterfaceB int32 int32
4200 ./make_delegate_compat_test.sh delegate_super_iface_arg_2 valid InterfaceA InterfaceA int32 int32
4201 ./make_delegate_compat_test.sh delegate_super_iface_arg_3 unverifiable InterfaceB InterfaceA int32 int32
4202
4203
4204 #5. D[]:=T[] if D:=T and are both vector or both have the same rank
4205 ./make_delegate_compat_test.sh delegate_array_ret_1 valid "int32[]" "int32[]" int32 int32
4206 ./make_delegate_compat_test.sh delegate_array_ret_2 valid "object[]" "string[]" int32 int32
4207
4208 ./make_delegate_compat_test.sh delegate_array_ret_3 unverifiable "object[]" "object[,]" int32 int32
4209 ./make_delegate_compat_test.sh delegate_array_ret_4 unverifiable "object[,]" "object[]" int32 int32
4210 ./make_delegate_compat_test.sh delegate_array_ret_5 unverifiable "string[]" "object[]" int32 int32
4211
4212 #6. D:=T if both are method pointers and obey this rules for all args and params
4213 #TODO how can we cook a test that will be verifiable but use such types
4214 ./make_delegate_compat_test.sh delegate_method_ptr_arg_1 unverifiable "method int32 *(float64)" "method int32 *(float64)" int32 int32
4215 #no way do say this is invalid
4216 ./make_delegate_compat_test.sh delegate_method_ptr_arg_2 unverifiable "method int32 *(float64)" "method int32 *(int32)" int32 int32
4217 #and that is is valid
4218 ./make_delegate_compat_test.sh delegate_method_ptr_arg_2 unverifiable "method int32 *(object)" "method int32 *(string)" int32 int32
4219
4220 #TODO: 7,8,9 generic related.
4221
4222
4223 ./make_delegate_compat_test.sh delegate_void_ret valid void void int32 int32
4224
4225 ./make_delegate_compat_test.sh delegate_enum_ret_1 unverifiable int32 int32 Int32Enum int32
4226 ./make_delegate_compat_test.sh delegate_enum_ret_2 unverifiable int32 int32 int32 Int32Enum
4227
4228 ./make_delegate_compat_test.sh delegate_pointers_ret_1 unverifiable "object*" "string*" int32 int32
4229 ./make_delegate_compat_test.sh delegate_pointers_ret_2 unverifiable "InterfaceA*" "ImplA*" int32 int32
4230 ./make_delegate_compat_test.sh delegate_pointers_ret_3 unverifiable "string*" "object*" int32 int32 
4231 ./make_delegate_compat_test.sh delegate_pointers_ret_4 unverifiable  "int32*" "int32*" int32 int32
4232
4233
4234 #pointer tests using native method and not invoking
4235 ./make_delegate_compat_test.sh delegate_method_ptr_pinvoke_arg_1 valid int32 int32 "method int32 *(float64)" "method int32 *(float64)" "" "" "pinvoke"
4236 #no way do say this is invalid
4237 ./make_delegate_compat_test.sh delegate_method_ptr_pinvoke_arg_2 unverifiable int32 int32 "method int32 *(float64)" "method int32 *(int32)" "" "" "pinvoke"
4238
4239
4240 #constrained prefix
4241
4242 #good type tests
4243 I=1
4244 for TYPE in object string MyValueType
4245 do
4246         ./make_constrained_test.sh contrained_prefix_basic_types_$I valid "$TYPE" "$TYPE" "callvirt string object::ToString()"
4247         I=`expr $I + 1`
4248 done
4249
4250 #method that exist on the value type
4251 ./make_constrained_test.sh contrained_prefix_basic_types_$I valid "MyValueType" "MyValueType" "callvirt int32 object::GetHashCode()"
4252
4253
4254 #mismatch between constrained. type token and this argument
4255 ./make_constrained_test.sh contrained_prefix_type_mismatch_1 unverifiable "object" "string" "callvirt instance int32 object::GetHashCode()"
4256 ./make_constrained_test.sh contrained_prefix_type_mismatch_2 unverifiable "string" "object" "callvirt instance int32 object::GetHashCode()"
4257
4258 ./make_constrained_test.sh contrained_prefix_type_mismatch_3 unverifiable "object" "MyValueType" "callvirt instance int32 object::GetHashCode()"
4259 ./make_constrained_test.sh contrained_prefix_type_mismatch_4 unverifiable "MyValueType" "object" "callvirt instance int32 object::GetHashCode()"
4260
4261 #bad contrained token
4262 ./make_constrained_test.sh contrained_prefix_bad_token_1 unverifiable "object" "object&" "callvirt instance int32 object::GetHashCode()"
4263 ./make_constrained_test.sh contrained_prefix_bad_token_1 unverifiable "object*" "object*" "callvirt instance int32 object::GetHashCode()"
4264
4265 #contrained no before a callvirt
4266 ./make_constrained_test.sh contrained_prefix_not_before_a_callvirt invalid "string" "string" "call instance string string::Trim()"
4267
4268 #wrong stack type
4269
4270 ./make_constrained_test.sh contrained_prefix_bad_stack_type_1 unverifiable "object" "object" "callvirt instance int32 object::GetHashCode()" "ldloc.0"
4271 ./make_constrained_test.sh contrained_prefix_bad_stack_type_2 unverifiable "object" "object" "callvirt instance int32 object::GetHashCode()" "ldnull"
4272 ./make_constrained_test.sh contrained_prefix_bad_stack_type_3 unverifiable "object" "object" "callvirt instance int32 object::GetHashCode()" "ldc.i4.0"
4273
4274
4275
4276 #cmmp support
4277 #ldind.x tests
4278 I=1
4279 for TYPE in "ldind.i1 int8" "ldind.u1 int8" "ldind.i2 int16" "ldind.u2 int16" "ldind.i4 int32" "ldind.u4 int32" "ldind.i8 int64" "ldind.u8 int64" "ldind.i native int" "ldind.r4 float32" "ldind.r8 float64"
4280 do
4281         LOAD=`echo $TYPE | cut -d' ' -f 1` 
4282         TYPE=`echo $TYPE | cut -d' ' -f 2-` 
4283         ./make_cmmp_test.sh cmmp_basic_test_ro_$I valid "readonly. ldelema $TYPE" "$LOAD" "$TYPE"
4284         ./make_cmmp_test.sh cmmp_basic_test_ub_$I valid "unbox $TYPE" "$LOAD" "$TYPE"
4285         I=`expr $I + 1`
4286 done
4287
4288 #unbox is only for value types, so cannot be paired with ldind.ref
4289 ./make_cmmp_test.sh cmmp_basic_test_ro_$I valid "readonly. ldelema object" "ldind.ref" "object"
4290
4291 ./make_cmmp_test.sh cmmp_basic_test_ro_ldobj valid "readonly. ldelema int32" "ldobj int32" "int32"
4292 ./make_cmmp_test.sh cmmp_basic_test_ub_ldobj valid "unbox int32" "ldobj int32" "int32"
4293
4294 ./make_cmmp_test.sh cmmp_basic_test_ro_ldfld valid "readonly. ldelema valuetype MyStruct" "ldfld int32 MyStruct::foo" "valuetype MyStruct"
4295 ./make_cmmp_test.sh cmmp_basic_test_ub_ldfld valid "unbox valuetype MyStruct" "ldfld int32 MyStruct::foo" "valuetype MyStruct "
4296
4297 ./make_cmmp_test.sh cmmp_basic_test_ro_ldflda valid "readonly. ldelema valuetype MyStruct" "ldflda int32 MyStruct::foo" "valuetype MyStruct"
4298 ./make_cmmp_test.sh cmmp_basic_test_ub_ldflda valid "unbox valuetype MyStruct" "ldflda int32 MyStruct::foo" "valuetype MyStruct "
4299
4300 #as the object parameter of callvirt, constrained. callvirt
4301 #ldobj
4302
4303 ./make_cmmp_test.sh cmmp_basic_test_ro_stfld_ptr valid "readonly. ldelema valuetype MyStruct" "ldc.i4.0\n\tstfld int32 MyStruct::foo" "valuetype MyStruct"
4304 ./make_cmmp_test.sh cmmp_basic_test_ub_stfld_ptr valid "unbox valuetype MyStruct" "ldc.i4.0\n\tstfld int32 MyStruct::foo" "valuetype MyStruct "
4305
4306 #testing for second argument in stfld is pointless as fields cannot be a byref type
4307
4308 #can be the this ptr for call
4309 ./make_cmmp_test.sh cmmp_basic_test_ro_call_this valid "readonly. ldelema int32" "ldc.i4.0\n\tcall instance int32 int32::CompareTo(int32)" "int32"
4310 ./make_cmmp_test.sh cmmp_basic_test_ub_call_this valid "unbox int32" "ldc.i4.0\n\tcall instance int32 int32::CompareTo(int32)" "int32"
4311
4312
4313 #cannot be parameter
4314 ./make_cmmp_test.sh cmmp_basic_test_ro_call_arg unverifiable "readonly. ldelema valuetype MyStruct" "call void MyStruct::Test(MyStruct\&)" "valuetype MyStruct"
4315 ./make_cmmp_test.sh cmmp_basic_test_ub_call_arg unverifiable "unbox valuetype MyStruct" "call void MyStruct::Test(MyStruct\&)" "valuetype MyStruct"
4316
4317
4318 #FIXME it's not possible to use a managed pointer with an unconstrained callvirt
4319
4320 #constrained. callvirt
4321 ./make_cmmp_test.sh cmmp_basic_test_ro_callvirt_this valid "readonly. ldelema int32" "constrained. int32 callvirt instance int32 object::GetHashCode()" "int32"
4322 ./make_cmmp_test.sh cmmp_basic_test_ub_callvirt_this valid "unbox int32" "constrained. int32 callvirt instance int32 object::GetHashCode()" "int32"
4323
4324
4325 #constrained. callvirt as parameter
4326 ./make_cmmp_test.sh cmmp_basic_test_ro_callvirt_arg unverifiable "readonly. ldelema ClassA" "dup\n\tconstrained. ClassA callvirt instance void ClassA::VirtTest(ClassA\&)" "ClassA"
4327
4328
4329 #invalid instructions with cmmp argument
4330 #test, at least, stobj, cpobj, stind, initobj, mkrefany, newobj, ceq
4331
4332 #stind.x
4333 I=1
4334 for TYPE in "stind.i1 int8" "stind.i2 int16" "stind.i4 int32" "stind.i8 int64" "stind.r4 float32" "stind.r8 float64" "stind.i native int"
4335 do
4336         STORE=`echo $TYPE | cut -d' ' -f 1` 
4337         TYPE=`echo $TYPE | cut -d' ' -f 2-` 
4338         ./make_cmmp_test.sh cmmp_bad_ops_test_ro_$I unverifiable "readonly. ldelema $TYPE" "ldloc.0\n\t$STORE" "$TYPE"
4339         ./make_cmmp_test.sh cmmp_bad_ops_test_ub_$I unverifiable "unbox $TYPE" "ldloc.0\n\t$STORE" "$TYPE"
4340         I=`expr $I + 1`
4341 done
4342
4343 #unbox is only for value types, so cannot be paired with ldind.ref
4344 ./make_cmmp_test.sh cmmp_bad_ops_test_ro_$I unverifiable "readonly. ldelema object" "ldloc.0\n\tstind.ref" "object"
4345
4346
4347 ./make_cmmp_test.sh cmmp_stobj_test_ro unverifiable "readonly. ldelema int32" "ldloc.0\n\tstobj int32" "int32"
4348 ./make_cmmp_test.sh cmmp_stobj_test_ub unverifiable "unbox int32" "ldloc.0\n\tstobj int32" "int32"
4349
4350 ./make_cmmp_test.sh cmmp_cpobj_src_ro valid "readonly. ldelema int32" "cpobj int32" "int32" "ldloca 0"
4351 ./make_cmmp_test.sh cmmp_cpobj_src_ub valid "unbox int32" "cpobj int32" "int32" "ldloca 0"
4352
4353 ./make_cmmp_test.sh cmmp_cpobj_dst_ro unverifiable "readonly. ldelema int32" "ldloca 0\n\tcpobj int32" "int32"
4354 ./make_cmmp_test.sh cmmp_cpobj_dst_ub unverifiable "unbox int32" "ldloca 0\n\tcpobj int32" "int32"
4355
4356 ./make_cmmp_test.sh cmmp_initobj_test_ro unverifiable "readonly. ldelema int32" "initobj int32" "int32"
4357 ./make_cmmp_test.sh cmmp_initobj_test_ub unverifiable "unbox int32" "initobj int32" "int32"
4358
4359 ./make_cmmp_test.sh cmmp_mkrefany_test_ro unverifiable "readonly. ldelema int32" "mkrefany int32" "int32"
4360 ./make_cmmp_test.sh cmmp_mkrefany_test_ub unverifiable "unbox int32" "mkrefany int32" "int32"
4361
4362 ./make_cmmp_test.sh cmmp_newobj_test_ro unverifiable "readonly. ldelema int32" "newobj instance void class ClassA::.ctor(int32\&)" "int32"
4363 ./make_cmmp_test.sh cmmp_newobj_test_ub unverifiable "unbox int32" "newobj instance void class ClassA::.ctor(int32\&)" "int32"
4364
4365 ./make_cmmp_test.sh cmmp_ceq_test_ro valid "readonly. ldelema int32" "dup\n\tceq" "int32"
4366 ./make_cmmp_test.sh cmmp_ceq_test_ub valid "unbox int32" "dup\n\tceq" "int32"
4367
4368 ./make_cmmp_test.sh cmmp_basic_test_address_method_1 valid "ldc.i4.1\n\tldc.i4.1\n\tnewobj instance void int32[,]::.ctor(int32, int32)\n\tldc.i4.0\n\tldc.i4.0\n\tcall instance int32\&  int32[,]::Address(int32, int32)" "ldloc.0\n\tstind.i4" "int32"
4369
4370 ./make_cmmp_test.sh cmmp_basic_test_address_method_2 unverifiable "ldc.i4.1\n\tldc.i4.1\n\tnewobj instance void int32[,]::.ctor(int32, int32)\n\tldc.i4.0\n\tldc.i4.0\n\treadonly. call instance int32\&  int32[,]::Address(int32, int32)" "ldloc.0\n\tstind.i4" "int32"
4371
4372
4373 #readonly before an invalid instruction
4374 ./make_cmmp_test.sh readonly_before_invalid_instruction_1 invalid "readonly. ldelem int32" "nop" "int32"
4375 ./make_cmmp_test.sh readonly_before_invalid_instruction_2 invalid "ldstr \"tst\"\n\treadonly. call string int32::Parse(string)" "nop" "int32"
4376
4377
4378
4379 #type constraint verification
4380 #see PII 10.1.7 for details
4381
4382 #TODO test usage of open types
4383 #TODO test recursive types
4384
4385 I=1
4386 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace IFaceImpl "valuetype MyEnum"
4387 do
4388         ./make_type_constraint_test.sh type_constraint_no_ct_$I valid "$TYPE" ""
4389         ./make_type_constraint_test.sh type_constraint_object_ct_$I valid "$TYPE" "(class [mscorlib]System.Object)"
4390
4391         ./make_method_constraint_test.sh method_constraint_no_ct_$I valid "$TYPE" ""
4392         ./make_method_constraint_test.sh method_constraint_object_ct_$I valid "$TYPE" "(class [mscorlib]System.Object)"
4393
4394         I=`expr $I + 1`
4395 done
4396
4397
4398 I=1
4399 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace IFaceImpl
4400 do
4401         ./make_type_constraint_test.sh type_constraint_class_ct_$I valid "$TYPE" "class "
4402         ./make_type_constraint_test.sh type_constraint_class_object_ct_$I valid "$TYPE" "class (class [mscorlib]System.Object)"
4403
4404         ./make_method_constraint_test.sh method_constraint_class_ct_$I valid "$TYPE" "class "
4405         ./make_method_constraint_test.sh method_constraint_class_object_ct_$I valid "$TYPE" "class (class [mscorlib]System.Object)"
4406
4407         I=`expr $I + 1`
4408 done
4409
4410 for TYPE in "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "valuetype MyEnum"
4411 do
4412         ./make_type_constraint_test.sh type_constraint_class_ct_$I invalid "$TYPE" "class "
4413         ./make_type_constraint_test.sh type_constraint_class_object_ct_$I invalid "$TYPE" "class (class [mscorlib]System.Object)"
4414
4415         ./make_method_constraint_test.sh method_constraint_class_ct_$I invalid "$TYPE" "class "
4416         ./make_method_constraint_test.sh method_constraint_class_object_ct_$I invalid "$TYPE" "class (class [mscorlib]System.Object)"
4417
4418         I=`expr $I + 1`
4419 done
4420
4421
4422 I=1
4423 for TYPE in object AbstractClass ClassWithDefaultCtor IFaceImpl
4424 do
4425         ./make_type_constraint_test.sh type_constraint_class_ctor_ct_$I valid "$TYPE" "class .ctor"
4426         ./make_type_constraint_test.sh type_constraint_class_ctor_object_ct_$I valid "$TYPE" "class .ctor(class [mscorlib]System.Object)"
4427
4428         ./make_method_constraint_test.sh method_constraint_class_ctor_ct_$I valid "$TYPE" "class .ctor"
4429         ./make_method_constraint_test.sh method_constraint_class_ctor_object_ct_$I valid "$TYPE" "class .ctor(class [mscorlib]System.Object)"
4430
4431         I=`expr $I + 1`
4432 done
4433
4434 for TYPE in ClassNoDefaultCtor ClassWithDefaultCtorNotVisible "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace "valuetype MyEnum"
4435 do
4436         ./make_type_constraint_test.sh type_constraint_class_ctor_ct_$I invalid "$TYPE" "class .ctor"
4437         ./make_type_constraint_test.sh type_constraint_class_ctor_object_ct_$I invalid "$TYPE" "class .ctor(class [mscorlib]System.Object)"
4438
4439         ./make_method_constraint_test.sh method_constraint_class_ctor_ct_$I invalid "$TYPE" "class .ctor"
4440         ./make_method_constraint_test.sh method_constraint_class_ctor_object_ct_$I invalid "$TYPE" "class .ctor(class [mscorlib]System.Object)"
4441
4442         I=`expr $I + 1`
4443 done
4444
4445
4446 I=1
4447 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace IFaceImpl
4448 do
4449         ./make_type_constraint_test.sh type_constraint_vt_ct_$I invalid "$TYPE" "valuetype"
4450         ./make_type_constraint_test.sh type_constraint_vt_object_ct_$I invalid "$TYPE" "valuetype(class [mscorlib]System.Object)"
4451
4452         ./make_method_constraint_test.sh method_constraint_vt_ct_$I invalid "$TYPE" "valuetype"
4453         ./make_method_constraint_test.sh method_constraint_vt_object_ct_$I invalid "$TYPE" "valuetype(class [mscorlib]System.Object)"
4454
4455         I=`expr $I + 1`
4456 done
4457
4458 for TYPE in "valuetype MyValueType" "valuetype MyEnum"
4459 do
4460         ./make_type_constraint_test.sh type_constraint_vt_ct_$I valid "$TYPE" "valuetype"
4461         ./make_type_constraint_test.sh type_constraint_vt_object_ct_$I valid "$TYPE" "valuetype(class [mscorlib]System.Object)"
4462
4463         ./make_method_constraint_test.sh method_constraint_vt_ct_$I valid "$TYPE" "valuetype"
4464         ./make_method_constraint_test.sh method_constraint_vt_object_ct_$I valid "$TYPE" "valuetype(class [mscorlib]System.Object)"
4465
4466         I=`expr $I + 1`
4467 done
4468
4469
4470 I=1
4471 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace IFaceImpl
4472 do
4473         ./make_type_constraint_test.sh type_constraint_vt_ctor_ct_$I invalid "$TYPE"  "valuetype .ctor"
4474         ./make_type_constraint_test.sh type_constraint_vt_ctor_object_ct_$I invalid "$TYPE"  "valuetype .ctor(class [mscorlib]System.Object)"
4475
4476         ./make_method_constraint_test.sh method_constraint_vt_ctor_ct_$I invalid "$TYPE"  "valuetype .ctor"
4477         ./make_method_constraint_test.sh method_constraint_vt_ctor_object_ct_$I invalid "$TYPE"  "valuetype .ctor(class [mscorlib]System.Object)"
4478
4479         I=`expr $I + 1`
4480 done
4481
4482 for TYPE in "valuetype MyValueType" "valuetype MyEnum"
4483 do
4484         ./make_type_constraint_test.sh type_constraint_vt_ctor_ct_$I valid "$TYPE"  "valuetype .ctor"
4485         ./make_type_constraint_test.sh type_constraint_vt_ctor_object_ct_$I valid "$TYPE"  "valuetype .ctor(class [mscorlib]System.Object)"
4486
4487         ./make_method_constraint_test.sh method_constraint_vt_ctor_ct_$I valid "$TYPE"  "valuetype .ctor"
4488         ./make_method_constraint_test.sh method_constraint_vt_ctor_object_ct_$I valid "$TYPE"  "valuetype .ctor(class [mscorlib]System.Object)"
4489
4490         I=`expr $I + 1`
4491 done
4492
4493
4494 I=1
4495 for TYPE in object AbstractClass ClassWithDefaultCtor "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" IFaceImpl "valuetype MyEnum"
4496 do
4497         ./make_type_constraint_test.sh type_constraint_ctor_ct_$I valid "$TYPE" ".ctor"
4498         ./make_type_constraint_test.sh type_constraint_ctor_object_ct_$I valid "$TYPE" ".ctor(class [mscorlib]System.Object)"
4499
4500         ./make_method_constraint_test.sh method_constraint_ctor_ct_$I valid "$TYPE" ".ctor"
4501         ./make_method_constraint_test.sh method_constraint_ctor_object_ct_$I valid "$TYPE" ".ctor(class [mscorlib]System.Object)"
4502
4503         I=`expr $I + 1`
4504 done
4505
4506 for TYPE in ClassNoDefaultCtor ClassWithDefaultCtorNotVisible "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace
4507 do
4508         ./make_type_constraint_test.sh type_constraint_ctor_ct_$I invalid "$TYPE" ".ctor"
4509         ./make_type_constraint_test.sh type_constraint_ctor_object_ct_$I invalid "$TYPE" ".ctor(class [mscorlib]System.Object)"
4510
4511         ./make_method_constraint_test.sh method_constraint_ctor_ct_$I invalid "$TYPE" ".ctor"
4512         ./make_method_constraint_test.sh method_constraint_ctor_object_ct_$I invalid "$TYPE" ".ctor(class [mscorlib]System.Object)"
4513
4514         I=`expr $I + 1`
4515 done
4516
4517
4518 I=1
4519 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace IFaceImpl "valuetype MyEnum"
4520 do
4521         ./make_type_constraint_test.sh type_constraint_class_vt_ct_$I invalid "$TYPE" "class valuetype"
4522         ./make_type_constraint_test.sh type_constraint_class_vt_object_ct_$I invalid "$TYPE" "class valuetype(class [mscorlib]System.Object)"
4523
4524         ./make_method_constraint_test.sh method_constraint_class_vt_ct_$I invalid "$TYPE" "class valuetype"
4525         ./make_method_constraint_test.sh method_constraint_class_vt_object_ct_$I invalid "$TYPE" "class valuetype(class [mscorlib]System.Object)"
4526
4527         I=`expr $I + 1`
4528 done
4529
4530 I=1
4531 for TYPE in ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace
4532 do
4533         ./make_type_constraint_test.sh type_constraint_class_vt_ctor_ct_$I invalid "$TYPE" "class valuetype .ctor"
4534         ./make_type_constraint_test.sh type_constraint_class_vt_ctor_object_ct_$I invalid "$TYPE" "class valuetype .ctor(class [mscorlib]System.Object)"
4535
4536         ./make_method_constraint_test.sh method_constraint_class_vt_ctor_ct_$I invalid "$TYPE" "class valuetype .ctor"
4537         ./make_method_constraint_test.sh method_constraint_class_vt_ctor_object_ct_$I invalid "$TYPE" "class valuetype .ctor(class [mscorlib]System.Object)"
4538
4539         I=`expr $I + 1`
4540 done
4541
4542
4543
4544 I=1
4545 for TYPE in "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "valuetype MyEnum"
4546 do
4547         ./make_type_constraint_test.sh type_constraint_system_valuetype_ctor_ct_$I valid "$TYPE" ".ctor (class [mscorlib]System.ValueType)"
4548
4549         ./make_method_constraint_test.sh method_constraint_system_valuetype_ctor_ct_$I valid "$TYPE" ".ctor (class [mscorlib]System.ValueType)"
4550
4551         I=`expr $I + 1`
4552 done
4553
4554 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace IFaceImpl
4555 do
4556         ./make_type_constraint_test.sh type_constraint_system_valuetype_ctor_ct_$I invalid "$TYPE" ".ctor (class [mscorlib]System.ValueType)"
4557
4558         ./make_method_constraint_test.sh method_constraint_system_valuetype_ctor_ct_$I invalid "$TYPE" ".ctor (class [mscorlib]System.ValueType)"
4559
4560         I=`expr $I + 1`
4561 done
4562
4563
4564 I=1
4565 for TYPE in "valuetype MyValueType" "valuetype MyEnum"
4566 do
4567         ./make_type_constraint_test.sh type_constraint_system_valuetype_vt_ct_$I valid "$TYPE" "valuetype(class [mscorlib]System.ValueType)"
4568
4569         ./make_method_constraint_test.sh method_constraint_system_valuetype_vt_ct_$I valid "$TYPE" "valuetype(class [mscorlib]System.ValueType)"
4570
4571         I=`expr $I + 1`
4572 done
4573
4574 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor  "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace IFaceImpl
4575 do
4576         ./make_type_constraint_test.sh type_constraint_system_valuetype_vt_ct_$I invalid "$TYPE" "valuetype(class [mscorlib]System.ValueType)"
4577
4578         ./make_method_constraint_test.sh method_constraint_system_valuetype_vt_ct_$I invalid "$TYPE" "valuetype(class [mscorlib]System.ValueType)"
4579
4580         I=`expr $I + 1`
4581 done
4582
4583
4584 I=1
4585 for TYPE in "valuetype MyValueType" "valuetype MyEnum"
4586 do
4587         ./make_type_constraint_test.sh type_constraint_system_valuetype_vt_ctor_ct_$I valid "$TYPE" "valuetype .ctor(class [mscorlib]System.ValueType)"
4588
4589         ./make_method_constraint_test.sh method_constraint_system_valuetype_vt_ctor_ct_$I valid "$TYPE" "valuetype .ctor(class [mscorlib]System.ValueType)"
4590
4591         I=`expr $I + 1`
4592 done
4593
4594 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace IFaceImpl
4595 do
4596         ./make_type_constraint_test.sh type_constraint_system_valuetype_vt_ctor_ct_$I invalid "$TYPE" "valuetype .ctor(class [mscorlib]System.ValueType)"
4597
4598         ./make_method_constraint_test.sh method_constraint_system_valuetype_vt_ctor_ct_$I invalid "$TYPE" "valuetype .ctor(class [mscorlib]System.ValueType)"
4599
4600         I=`expr $I + 1`
4601 done
4602
4603
4604 I=1
4605 for TYPE in "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" "[mscorlib]System.Enum"  "valuetype MyEnum"
4606 do
4607         ./make_type_constraint_test.sh type_constraint_system_valuetype_ct_$I valid "$TYPE" "(class [mscorlib]System.ValueType)"
4608
4609         ./make_method_constraint_test.sh method_constraint_system_valuetype_ct_$I valid "$TYPE" "(class [mscorlib]System.ValueType)"
4610
4611         I=`expr $I + 1`
4612 done
4613
4614 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor IFace IFaceImpl
4615 do
4616         ./make_type_constraint_test.sh type_constraint_system_valuetype_ct_$I invalid "$TYPE" "(class [mscorlib]System.ValueType)"
4617
4618         ./make_method_constraint_test.sh method_constraint_system_valuetype_ct_$I invalid "$TYPE" "(class [mscorlib]System.ValueType)"
4619
4620         I=`expr $I + 1`
4621 done
4622
4623
4624 I=1
4625 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" IFace IFaceImpl "valuetype MyEnum"
4626 do
4627         ./make_type_constraint_test.sh type_constraint_system_valuetype_class_ct_$I invalid "$TYPE" "class (class [mscorlib]System.ValueType)"
4628
4629         ./make_method_constraint_test.sh method_constraint_system_valuetype_class_ct_$I invalid "$TYPE" "class (class [mscorlib]System.ValueType)"
4630
4631         I=`expr $I + 1`
4632 done
4633
4634 for TYPE in "[mscorlib]System.ValueType" "[mscorlib]System.Enum"
4635 do
4636         ./make_type_constraint_test.sh type_constraint_system_valuetype_class_ct_$I valid "$TYPE" "class (class [mscorlib]System.ValueType)"
4637
4638         ./make_method_constraint_test.sh method_constraint_system_valuetype_class_ct_$I valid "$TYPE" "class (class [mscorlib]System.ValueType)"
4639
4640         I=`expr $I + 1`
4641 done
4642
4643
4644 I=1
4645 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace IFaceImpl "valuetype MyEnum"
4646 do
4647         ./make_type_constraint_test.sh type_constraint_system_valuetype_class_ctor_ct_$I invalid "$TYPE" "class .ctor(class [mscorlib]System.ValueType)"
4648
4649         ./make_method_constraint_test.sh method_constraint_system_valuetype_class_ctor_ct_$I invalid "$TYPE" "class .ctor(class [mscorlib]System.ValueType)"
4650
4651         I=`expr $I + 1`
4652 done
4653
4654
4655
4656 I=1
4657 for TYPE in "valuetype MyEnum"
4658 do
4659         ./make_type_constraint_test.sh type_constraint_system_enum_ctor_ct_$I valid "$TYPE" ".ctor (class [mscorlib]System.Enum)"
4660         ./make_type_constraint_test.sh type_constraint_system_enum_vt_ct_$I valid "$TYPE" "valuetype (class [mscorlib]System.Enum)"
4661         ./make_type_constraint_test.sh type_constraint_system_enum_vt_ctor_ct_$I valid "$TYPE" "valuetype .ctor(class [mscorlib]System.Enum)"
4662
4663         ./make_method_constraint_test.sh method_constraint_system_enum_ctor_ct_$I valid "$TYPE" ".ctor (class [mscorlib]System.Enum)"
4664         ./make_method_constraint_test.sh method_constraint_system_enum_vt_ct_$I valid "$TYPE" "valuetype (class [mscorlib]System.Enum)"
4665         ./make_method_constraint_test.sh method_constraint_system_enum_vt_ctor_ct_$I valid "$TYPE" "valuetype .ctor(class [mscorlib]System.Enum)"
4666
4667         I=`expr $I + 1`
4668 done
4669
4670 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace IFaceImpl 
4671 do
4672         ./make_type_constraint_test.sh type_constraint_system_enum_ctor_ct_$I invalid "$TYPE" ".ctor (class [mscorlib]System.Enum)"
4673         ./make_type_constraint_test.sh type_constraint_system_enum_vt_ct_$I invalid "$TYPE" "valuetype (class [mscorlib]System.Enum)"
4674         ./make_type_constraint_test.sh type_constraint_system_enum_vt_ctor_ct_$I invalid "$TYPE" "valuetype .ctor(class [mscorlib]System.Enum)"
4675
4676         ./make_method_constraint_test.sh method_constraint_system_enum_ctor_ct_$I invalid "$TYPE" ".ctor (class [mscorlib]System.Enum)"
4677         ./make_method_constraint_test.sh method_constraint_system_enum_vt_ct_$I invalid "$TYPE" "valuetype (class [mscorlib]System.Enum)"
4678         ./make_method_constraint_test.sh method_constraint_system_enum_vt_ctor_ct_$I invalid "$TYPE" "valuetype .ctor(class [mscorlib]System.Enum)"
4679
4680         I=`expr $I + 1`
4681 done
4682
4683
4684 I=1
4685 for TYPE in "[mscorlib]System.Enum" "valuetype MyEnum"
4686 do
4687         ./make_type_constraint_test.sh type_constraint_system_enum_ct_$I valid "$TYPE" "(class [mscorlib]System.Enum)"
4688
4689         ./make_method_constraint_test.sh method_constraint_system_enum_ct_$I valid "$TYPE" "(class [mscorlib]System.Enum)"
4690
4691         I=`expr $I + 1`
4692 done
4693
4694 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" IFace IFaceImpl
4695 do
4696         ./make_type_constraint_test.sh type_constraint_system_enum_ct_$I invalid "$TYPE" "(class [mscorlib]System.Enum)"
4697
4698         ./make_method_constraint_test.sh method_constraint_system_enum_ct_$I invalid "$TYPE" "(class [mscorlib]System.Enum)"
4699
4700         I=`expr $I + 1`
4701 done
4702
4703
4704 I=1
4705 for TYPE in "[mscorlib]System.Enum"
4706 do
4707         ./make_type_constraint_test.sh type_constraint_system_enum_class_ct_$I valid "$TYPE" "class (class [mscorlib]System.Enum)"
4708
4709         ./make_method_constraint_test.sh method_constraint_system_enum_class_ct_$I valid "$TYPE" "class (class [mscorlib]System.Enum)"
4710
4711         I=`expr $I + 1`
4712 done
4713
4714 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" IFace IFaceImpl "valuetype MyEnum"
4715 do
4716         ./make_type_constraint_test.sh type_constraint_system_enum_class_ct_$I invalid "$TYPE" "class (class [mscorlib]System.Enum)"
4717
4718         ./make_method_constraint_test.sh method_constraint_system_enum_class_ct_$I invalid "$TYPE" "class (class [mscorlib]System.Enum)"
4719
4720         I=`expr $I + 1`
4721 done
4722
4723
4724 I=1
4725 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" "[mscorlib]System.Enum" IFace IFaceImpl "valuetype MyEnum"
4726 do
4727         ./make_type_constraint_test.sh type_constraint_system_enum_class_ctor_ct_$I invalid "$TYPE" "class .ctor(class [mscorlib]System.Enum)"
4728
4729         ./make_method_constraint_test.sh method_constraint_system_enum_class_ctor_ct_$I invalid "$TYPE" "class .ctor(class [mscorlib]System.Enum)"
4730
4731         I=`expr $I + 1`
4732 done
4733
4734
4735 I=1
4736 for TYPE in IFace IFaceImpl
4737 do
4738         ./make_type_constraint_test.sh type_constraint_iface_ct_$I valid "$TYPE" "(IFace)"
4739
4740         ./make_method_constraint_test.sh method_constraint_iface_ct_$I valid "$TYPE" "(IFace)"
4741
4742         I=`expr $I + 1`
4743 done
4744
4745 for TYPE in object ClassNoDefaultCtor AbstractClass ClassWithDefaultCtorNotVisible ClassWithDefaultCtor "valuetype MyValueType" "valuetype [mscorlib]System.Nullable\`1<valuetype MyValueType>" "[mscorlib]System.ValueType" "[mscorlib]System.Enum" "valuetype MyEnum"
4746 do
4747         ./make_type_constraint_test.sh type_constraint_iface_ct_$I invalid "$TYPE" "(IFace)"
4748
4749         ./make_method_constraint_test.sh method_constraint_iface_ct_$I invalid "$TYPE" "(IFace)"
4750
4751         I=`expr $I + 1`
4752 done
4753
4754 #misc tests
4755 ./make_type_constraint_test.sh type_constraint_nested_class invalid "class TemplateTarget<valuetype MyValueType>" "class"
4756
4757
4758 #prefixes volatile. and unaligned
4759
4760 #stind.x
4761 I=1
4762 for TYPE in "stind.i1 int8" "stind.i2 int16" "stind.i4 int32" "stind.i8 int64" "stind.r4 float32" "stind.r8 float64" "stind.i native int"
4763 do
4764         STORE=`echo $TYPE | cut -d' ' -f 1` 
4765         TYPE=`echo $TYPE | cut -d' ' -f 2-` 
4766         ./make_prefix_test.sh "prefix_test_stind_volatile_$I" valid "volatile. $STORE" "ldloca 0\n\tldloc.0" "$TYPE"
4767         ./make_prefix_test.sh "prefix_test_stind_unaligned_$I" valid  "unaligned. 1 $STORE" "ldloca 0\n\tldloc.0" "$TYPE"
4768         I=`expr $I + 1`
4769 done
4770
4771 ./make_prefix_test.sh "prefix_test_stind_volatile_$I" valid "volatile. stind.ref" "ldloca 0\n\tldnull" "object"
4772 ./make_prefix_test.sh "prefix_test_stind_unaligned_$I" valid  "unaligned. 1 stind.ref" "ldloca 0\n\tldnull" "object"
4773
4774
4775 #ldind.x
4776 I=1
4777 for TYPE in "ldind.i1 int8" "ldind.u1 unsigned int8" "ldind.i2 int16" "ldind.u2 unsigned int16" "ldind.i4 int32" "ldind.u4 unsigned int32" "ldind.i8 int64" "ldind.u8 unsigned int64" "ldind.r4 float32" "ldind.r8 float64" "ldind.i native int"
4778 do
4779         STORE=`echo $TYPE | cut -d' ' -f 1` 
4780         TYPE=`echo $TYPE | cut -d' ' -f 2-` 
4781         ./make_prefix_test.sh "prefix_test_ldind_volatile_$I" valid "volatile. $STORE" "ldloca 0" "$TYPE"
4782         ./make_prefix_test.sh "prefix_test_ldind_unaligned_$I" valid  "unaligned. 1 $STORE" "ldloca 0" "$TYPE"
4783         I=`expr $I + 1`
4784 done
4785
4786 ./make_prefix_test.sh "prefix_test_ldind_volatilee_$I" valid "volatile. ldind.ref" "ldloca 0" "object"
4787 ./make_prefix_test.sh "prefix_test_ldind_unalignede_$I" valid  "unaligned. 1 ldind.ref" "ldloca 0" "object"
4788
4789
4790 ./make_prefix_test.sh "prefix_test_ldfld_volatile" valid "volatile. ldfld int32 MyStruct::foo" "ldloca 0" "MyStruct"
4791 ./make_prefix_test.sh "prefix_test_ldfld_unaligned" valid  "unaligned. 1 ldfld int32 MyStruct::foo " "ldloca 0" "MyStruct"
4792
4793
4794 ./make_prefix_test.sh "prefix_test_stfld_volatile" valid "volatile. stfld int32 MyStruct::foo" "ldloca 0\n\tldc.i4.0" "MyStruct"
4795 ./make_prefix_test.sh "prefix_test_stfld_unaligned" valid  "unaligned. 1 stfld int32 MyStruct::foo" "ldloca 0\n\tldc.i4.0" "MyStruct"
4796
4797 ./make_prefix_test.sh "prefix_test_ldobj_volatile" valid "volatile. ldobj MyStruct" "ldloca 0" "MyStruct"
4798 ./make_prefix_test.sh "prefix_test_ldobj_unaligned" valid  "unaligned. 1 ldobj MyStruct" "ldloca 0" "MyStruct"
4799
4800 ./make_prefix_test.sh "prefix_test_stobj_volatile" valid "volatile. stobj MyStruct" "ldloca 0\n\tldloc.0" "MyStruct"
4801 ./make_prefix_test.sh "prefix_test_stobj_unaligned" valid  "unaligned. 1 stobj MyStruct" "ldloca 0\n\tldloc.0" "MyStruct"
4802
4803 ./make_prefix_test.sh "prefix_test_cpblk_volatile" unverifiable "volatile. cpblk" "ldloca 0\n\tldloca 0\n\tldc.i4.1" "MyStruct"
4804 ./make_prefix_test.sh "prefix_test_cpblk_unaligned" unverifiable  "unaligned. 1 cpblk" "ldloca 0\n\tldloca 0\n\tldc.i4.1" "MyStruct"
4805
4806 ./make_prefix_test.sh "prefix_test_initblk_volatile" unverifiable "volatile. initblk" "ldloca 0\n\tldc.i4.0\n\tldc.i4.1" "MyStruct"
4807 ./make_prefix_test.sh "prefix_test_initblk_unaligned" unverifiable  "unaligned. 1 initblk" "ldloca 0\n\tldc.i4.0\n\tldc.i4.1" "MyStruct"
4808
4809 ./make_prefix_test.sh "prefix_test_stsfld_volatile" valid "volatile. stsfld int32 MyStruct::stFoo" "ldc.i4.0" "MyStruct"
4810 ./make_prefix_test.sh "prefix_test_stsfld_unaligned" invalid  "unaligned. 1 stsfld int32 MyStruct::stFoo" "ldc.i4.0" "MyStruct"
4811
4812 ./make_prefix_test.sh "prefix_test_ldsfld_volatile" valid "volatile. ldsfld int32 MyStruct::stFoo" "" "MyStruct"
4813 ./make_prefix_test.sh "prefix_test_ldsfld_unaligned" invalid  "unaligned. 1 ldsfld int32 MyStruct::stFoo" "" "MyStruct"
4814
4815
4816 I=1
4817 for TYPE in "nop" "new object::.ctor()" "call void MyStruct::Test()"
4818 do
4819         ./make_prefix_test.sh "prefix_test_invalid_op_volatile_$I" invalid  "volatile. $OP" "nop" "int32"
4820         ./make_prefix_test.sh "prefix_test_invalid_op_unaligned_$I" invalid  "unaligned. 1 nop" "nop" "int32"
4821         I=`expr $I + 1`
4822 done
4823
4824
4825
4826 #prefix tail.
4827 ./make_tail_call_test.sh "prefix_test_tail_call" valid "call void MyStruct::Test()" "" "int32"
4828 ./make_tail_call_test.sh "prefix_test_tail_callvirt" valid "callvirt instance void ClassA::VirtTest()" "newobj instance void ClassA::.ctor()" "int32"
4829
4830 #MS runtime maks calli as been unverifiable even on a scenario that is verifiable by the spec.
4831 ./make_tail_call_test.sh "prefix_test_tail_calli" unverifiable "calli void()" "ldftn void MyStruct::Test()" "int32"
4832
4833 #not followed by a ret
4834 ./make_tail_call_test.sh "prefix_test_tail_call_not_followed_by_ret" unverifiable "call void MyStruct::Test()\n\tnop" "" "int32"
4835
4836 #caller return type is diferent
4837 ./make_tail_call_test.sh "prefix_test_tail_call_different_return_type" invalid "call void MyStruct::Test()\n\tnop" "" "int32" "int32"
4838
4839
4840 ./make_tail_call_test.sh "prefix_test_tail_call_compatible_return_type" valid "call string MyStruct::StrTest()" "" "string" "object"
4841
4842
4843 #callee receive byref
4844 ./make_tail_call_test.sh "prefix_test_tail_call_callee_with_byref_arg" invalid "call void MyStruct::Test(int32\&)\n\tnop" "ldloca 0" "int32"
4845
4846
4847 ./make_tail_call_test.sh "prefix_test_tail_call_middle_of_instruction" invalid "call void MyStruct::Test()" "newobj instance void object::.ctor()\n\tcallvirt instance int32 object::GetHashCode()\n\tbrtrue MIDDLE" "int32"
4848
4849 ./make_tail_call_test.sh "prefix_test_tail_with_invalid_instruction" invalid "nop" "" "int32"
4850
4851
4852 #ckfinite
4853
4854 I=1
4855 for TYPE in float32 float64
4856 do
4857         ./make_unary_test.sh ck_finite_test_$I valid "ckfinite" "$TYPE"
4858         I=`expr $I + 1`
4859 done
4860
4861 I=1
4862 for TYPE in int8 bool int32 int64 "int32&" object
4863 do
4864         ./make_unary_test.sh ck_finite_test_bad_arg_$I invalid "ckfinite" "$TYPE"
4865         I=`expr $I + 1`
4866 done
4867
4868 ./make_unary_test.sh ck_finite_tes_underflow invalid "pop\n\tckfinite" "$TYPE"
4869
4870
4871 #overlapped types
4872 ./make_overlapped_test.sh not_overlapped_test valid 0 4 0
4873
4874 ./make_overlapped_test.sh obj_overlapped_with_long invalid 0 4 0 int64
4875
4876
4877 for I in 0 1 2 3
4878 do
4879         ./make_overlapped_test.sh bad_overlapped_$I invalid 0 $I 0
4880 done
4881
4882 for I in 1 2 3 5 6 7
4883 do
4884         ./make_overlapped_test.sh bad_overlapped_end_$I invalid 0 $I 4
4885 done
4886
4887 for I in 1 2 3 5 6 7
4888 do
4889         ./make_overlapped_test.sh obj_bad_aligned_$I invalid 0 $I 0
4890 done
4891
4892 #we must be carefull as on 64 bits machines a reference takes 8 bytes.
4893 for I in 13 14 15
4894 do
4895         ./make_overlapped_test.sh int_bad_aligned_$I valid 0 4 $I
4896 done
4897
4898 #Tests for aligned overllaping reference fields.
4899 ./make_overlapped_test.sh ref_only_overlapping_1 typeunverifiable 0 0 8 object
4900 ./make_overlapped_test.sh ref_only_overlapping_2 invalid 0 1 8 object
4901 ./make_overlapped_test.sh ref_only_overlapping_3 invalid 0 2 8 object
4902 ./make_overlapped_test.sh ref_only_overlapping_4 typeunverifiable 0 0 8 "int8[]"
4903 ./make_overlapped_test.sh ref_only_overlapping_5 invalid 0 0 8 int32
4904
4905 #invalid opcodes
4906 I=166; while [ $I -le 178 ]
4907 do
4908         ./make_bad_op_test.sh bad_op_$I invalid $I
4909         I=$((I + 1))
4910 done
4911
4912
4913 I=187; while [ $I -le 193 ]
4914 do
4915         ./make_bad_op_test.sh bad_op_$I invalid $I
4916         I=$((I + 1))
4917 done
4918
4919 I=196; while [ $I -le 207 ]
4920 do
4921         ./make_bad_op_test.sh bad_op_$I invalid $I
4922         I=$((I + 1))
4923 done
4924
4925 I=225; while [ $I -le 253 ]
4926 do
4927         ./make_bad_op_test.sh bad_op_$I invalid $I
4928         I=$((I + 1))
4929 done
4930
4931 ./make_bad_op_test.sh bad_op_xff invalid 255
4932
4933
4934 I=35; while [ $I -le 255 ]
4935 do
4936         ./make_bad_op_test.sh bad_op_with_prefix_$I invalid 0xFE $I
4937         I=$((I + 1))
4938 done
4939
4940
4941
4942
4943 #interaction between boxed generic arguments and its constraints
4944 ./make_boxed_genarg_test.sh boxed_genarg_cnstr_obj valid "constrained. !0 callvirt instance int32 object::GetHashCode()" "ldloca 0"
4945 ./make_boxed_genarg_test.sh boxed_genarg_cnstr_iface valid "constrained. !0 callvirt instance void class IFace::Tst()" "ldloca 0"
4946
4947 ./make_boxed_genarg_test.sh boxed_genarg_delegate valid "ldvirtftn instance void class IFace::Tst()\n\tnewobj instance void class TstDelegate::'.ctor'(object, native int)" "ldloc.0\n\tbox !T\n\tdup"
4948
4949 ./make_boxed_genarg_test.sh boxed_genarg_stfld_arg valid "stfld IFace class DriverClass<!0>::ifField" "ldarg.0\n\tldloc.0\n\tbox !T"
4950
4951 ./make_boxed_genarg_test.sh boxed_genarg_stfld_this_1 valid "stfld int32 class BaseClass::fld" "ldloc.0\n\tbox !T\n\tldc.i4.1" "BaseClass"
4952
4953 ./make_boxed_genarg_test.sh boxed_genarg_stfld_this_2 unverifiable "stfld int32 class BaseClass::fld" "ldloc.0\n\tldc.i4.1" "BaseClass"
4954
4955 ./make_boxed_genarg_test.sh boxed_genarg_ldfld_1 valid "ldfld int32 class BaseClass::fld" "ldloc.0\n\tbox !T" "BaseClass"
4956
4957 ./make_boxed_genarg_test.sh boxed_genarg_ldfld_2 unverifiable "ldfld int32 class BaseClass::fld" "ldloc.0" "BaseClass"
4958
4959
4960 ./make_boxed_genarg_test.sh boxed_genarg_initobj_1 unverifiable "initobj IFace" "ldloca 0"
4961 ./make_boxed_genarg_test.sh boxed_genarg_initobj_2 unverifiable "initobj !0" "ldloca 1"
4962
4963 ./make_boxed_genarg_test.sh boxed_genarg_stobj_1 unverifiable "stobj IFace" "ldloca 0\n\tldloc.0\n\tbox !T"
4964 ./make_boxed_genarg_test.sh boxed_genarg_stobj_2 unverifiable "stobj !0" "ldloca 0\n\tldloc.0\n\tbox !T"
4965 ./make_boxed_genarg_test.sh boxed_genarg_stobj_3 valid "stobj IFace" "ldloca 1\n\tldloc.0\n\tbox !T"
4966 ./make_boxed_genarg_test.sh boxed_genarg_stobj_4 unverifiable "stobj !0" "ldloca 1\n\tldloc.0\n\tbox !T"
4967 ./make_boxed_genarg_test.sh boxed_genarg_stobj_5 valid "stobj !0" "ldloca 0\n\tldloc.0"
4968
4969 ./make_stobj_test.sh stobj_boxing_test_1 valid "int32" "int32\&" "int32" ""
4970 ./make_stobj_test.sh stobj_boxing_test_2 unverifiable "int32" "int32\&" "int32" "box int32"
4971 ./make_stobj_test.sh stobj_boxing_test_3 valid "object" "object\&" "object" "box object"
4972
4973 ./make_boxed_genarg_test.sh boxed_genarg_stind_ref_1 unverifiable "stind.ref" "ldloca 0\n\tldloc.0"
4974 ./make_boxed_genarg_test.sh boxed_genarg_stind_ref_2 unverifiable "stind.ref" "ldloca 0\n\tldloc.0\n\tbox !T"
4975
4976 ./make_boxed_genarg_test.sh boxed_genarg_stind_ref_3 unverifiable "stind.ref" "ldloca 1\n\tldloc.0"
4977 ./make_boxed_genarg_test.sh boxed_genarg_stind_ref_4 valid "stind.ref" "ldloca 1\n\tldloc.0\n\tbox !T"
4978
4979 ./make_boxed_genarg_test.sh boxed_genarg_stelem_1 unverifiable "stelem IFace" "ldloc.2\n\tldc.i4.0\n\tldloc.0\n\tbox !T"
4980 ./make_boxed_genarg_test.sh boxed_genarg_stelem_2 unverifiable "stelem !0" "ldloc.2\n\tldc.i4.0\n\tldloc.0\n\tbox !T"
4981
4982 ./make_boxed_genarg_test.sh boxed_genarg_stelem_3 unverifiable "stelem IFace" "ldloc.2\n\tldc.i4.0\n\tldloc.1"
4983 ./make_boxed_genarg_test.sh boxed_genarg_stelem_4 unverifiable "stelem !0" "ldloc.2\n\tldc.i4.0\n\tldloc.1"
4984
4985 ./make_boxed_genarg_test.sh boxed_genarg_stelem_5 valid "stelem IFace" "ldloc.3\n\tldc.i4.0\n\tldloc.0\n\tbox !T"
4986 ./make_boxed_genarg_test.sh boxed_genarg_stelem_6 unverifiable "stelem !0" "ldloc.3\n\tldc.i4.0\n\tldloc.0\n\tbox !T"
4987
4988 ./make_boxed_genarg_test.sh boxed_genarg_stelem_7 valid "stelem IFace" "ldloc.3\n\tldc.i4.0\n\tldloc.1"
4989 ./make_boxed_genarg_test.sh boxed_genarg_stelem_8 unverifiable "stelem !0" "ldloc.3\n\tldc.i4.0\n\tldloc.1"
4990
4991 ./make_boxed_genarg_test.sh boxed_genarg_stelem_9 unverifiable "stelem IFace" "ldloc.2\n\tldc.i4.0\n\tldloc.0"
4992 ./make_boxed_genarg_test.sh boxed_genarg_stelem_10 valid "stelem !0" "ldloc.2\n\tldc.i4.0\n\tldloc.0"
4993
4994 ./make_boxed_genarg_test.sh boxed_genarg_stelem_11 unverifiable "stelem IFace" "ldloc.3\n\tldc.i4.0\n\tldloc.0"
4995 ./make_boxed_genarg_test.sh boxed_genarg_stelem_12 unverifiable "stelem !0" "ldloc.3\n\tldc.i4.0\n\tldloc.0"
4996
4997
4998 ./make_boxed_genarg_test.sh boxed_genarg_stack_merge_1 valid "pop\n\tldloc.1" "ldloc.1\n\tnewobj instance void object::.ctor()\n\tcallvirt instance int32 object::GetHashCode()\n\tbrtrue TARGET"
4999
5000
5001 ./make_boxed_genarg_test.sh boxed_genarg_stack_merge_2 unverifiable "pop\n\tldloc.1" "ldloc.0\n\tnewobj instance void object::.ctor()\n\tcallvirt instance int32 object::GetHashCode()\n\tbrtrue TARGET"
5002
5003 ./make_boxed_genarg_test.sh boxed_genarg_stack_merge_3 valid "pop\n\tldloc.1" "ldloc.0\n\tbox !T\n\tnewobj instance void object::.ctor()\n\tcallvirt instance int32 object::GetHashCode()\n\tbrtrue TARGET"
5004
5005 ./make_boxed_genarg_test.sh boxed_genarg_stack_merge_4 unverifiable "pop\n\tldloc.1" "ldloc.0\n\tbox IFace\n\tnewobj instance void object::.ctor()\n\tcallvirt instance int32 object::GetHashCode()\n\tbrtrue TARGET"
5006
5007
5008 ./make_boxed_genarg_test.sh boxed_genarg_stack_merge_5 unverifiable "pop\n\tldloc.0" "ldloc.1\n\tnewobj instance void object::.ctor()\n\tcallvirt instance int32 object::GetHashCode()\n\tbrtrue TARGET"
5009
5010 ./make_boxed_genarg_test.sh boxed_genarg_stack_merge_6 valid "pop\n\tldloc.0\n\tbox !T" "ldloc.1\n\tnewobj instance void object::.ctor()\n\tcallvirt instance int32 object::GetHashCode()\n\tbrtrue TARGET"
5011
5012 ./make_boxed_genarg_test.sh boxed_genarg_stack_merge_7 unverifiable "pop\n\tldloc.0\n\tbox IFace" "ldloc.1\n\tnewobj instance void object::.ctor()\n\tcallvirt instance int32 object::GetHashCode()\n\tbrtrue TARGET"
5013
5014
5015
5016 #test for IL overflow
5017
5018 for I in 0x0E 0x0F 0x10 0x11 0x12 0x13 0x1F 0x2B 0x2C 0x2D 0x2E 0x2F 0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0xDE 0xFE
5019 do
5020         ./make_il_overflow_test.sh incomplete_op_${I} invalid $I
5021 done
5022
5023 for I in 0x20 0x21 0x22 0x23 0x28 0x29 0x38 0x39 0x3A 0x3B 0x3C 0x3D 0x3E 0x3F 0x40 0x41 0x42 0x43 0x44 0x6F 0x70 0x71 0x72 0x73 0x74 0x75 0x79 0x7B 0x7C 0x7D 0x7E 0x7F 0x80 0x81 0x8D 0x8C 0x8F 0xA3 0xA4 0xA5 0xC2 0xC6 0xD0 0xDD
5024 do
5025         ./make_il_overflow_test.sh incomplete_op_${I} invalid $I
5026         ./make_il_overflow_test.sh incomplete_op_${I}_0x00 invalid $I 0x00
5027         ./make_il_overflow_test.sh incomplete_op_${I}_0x00_0x00 invalid $I 0x00 0x00
5028         ./make_il_overflow_test.sh incomplete_op_${I}_0x00_0x00_0x00 invalid $I 0x00 0x00
5029 done
5030
5031
5032 for I in 0x06 0x07 0x09 0x0A 0x0E 0x0B 0x0C 0x0D 0x12 0x15 0x16 0x19 0x1C
5033 do
5034         ./make_il_overflow_test.sh incomplete_op_0xFE_${I} invalid 0xFE $I
5035         ./make_il_overflow_test.sh incomplete_op_0xFE_${I}_0x00 invalid 0xFE $I 0x00
5036 done
5037
5038 #switch
5039 ./make_il_overflow_test.sh incomplete_switch_1 invalid 0x45
5040 ./make_il_overflow_test.sh incomplete_switch_2 invalid 0x45 0x00
5041 ./make_il_overflow_test.sh incomplete_switch_3 invalid 0x45 0x00 0x00
5042 ./make_il_overflow_test.sh incomplete_switch_4 invalid 0x45 0x00 0x00
5043
5044 ./make_il_overflow_test.sh incomplete_switch_arg_1 invalid 0x45 0x00 0x00 0x00 0x01
5045 ./make_il_overflow_test.sh incomplete_switch_arg_2 invalid 0x45 0x00 0x00 0x00 0x01 0x00
5046
5047
5048
5049 #tests for visibility of instantiated generic types and methods
5050 ./make_type_visibility_test.sh type_vis_gist_1 valid "newobj instance void class Foo<[test_lib]ClassC>::.ctor()"
5051 ./make_type_visibility_test.sh type_vis_gist_2 unverifiable "newobj instance void class Foo<[test_lib]NotExportedA>::.ctor()"
5052
5053
5054 ./make_type_visibility_test.sh type_vis_cast_1 valid "castclass class [test_lib]ClassC"
5055 ./make_type_visibility_test.sh type_vis_cast_2 valid "castclass class [test_lib]NotExportedA"
5056 ./make_type_visibility_test.sh type_vis_cast_gist_1 valid "castclass class Foo<[test_lib]ClassC>"
5057 ./make_type_visibility_test.sh type_vis_cast_gist_2 valid "castclass class Foo<[test_lib]NotExportedA>"
5058
5059
5060 ./make_type_visibility_test.sh type_vis_sizeof_1 valid "sizeof class [test_lib]ClassC"
5061 ./make_type_visibility_test.sh type_vis_sizeof_2 valid "sizeof class [test_lib]NotExportedA"
5062 ./make_type_visibility_test.sh type_vis_sizeof_gist_1 valid "sizeof class Foo<[test_lib]ClassC>"
5063 ./make_type_visibility_test.sh type_vis_sizeof_gist_2 valid "sizeof class Foo<[test_lib]NotExportedA>"
5064
5065
5066 ./make_type_visibility_test.sh type_vis_newarr_1 valid "newarr class [test_lib]ClassC" "ldc.i4.1"
5067 ./make_type_visibility_test.sh type_vis_newarr_2 valid "newarr class [test_lib]NotExportedA" "ldc.i4.1"
5068 ./make_type_visibility_test.sh type_vis_newarr_gist_1 valid "newarr class Foo<[test_lib]ClassC>" "ldc.i4.1"
5069 ./make_type_visibility_test.sh type_vis_newarr_gist_2 valid "newarr class Foo<[test_lib]NotExportedA>" "ldc.i4.1"
5070
5071
5072 ./make_type_visibility_test.sh type_vis_ldelem_1 valid "ldelem class [test_lib]ClassC" "ldc.i4.1\n\tnewarr class [test_lib]ClassC\n\tldc.i4.0"
5073 ./make_type_visibility_test.sh type_vis_ldelem_2 valid "ldelem class [test_lib]NotExportedA" "ldc.i4.1\n\tnewarr class [test_lib]NotExportedA\n\tldc.i4.0"
5074 ./make_type_visibility_test.sh type_vis_ldelem_gist_1 valid "ldelem class Foo<[test_lib]ClassC>" "ldc.i4.1\n\tnewarr class Foo<[test_lib]ClassC>\n\tldc.i4.0"
5075 ./make_type_visibility_test.sh type_vis_ldelem_gist_2 valid "ldelem class Foo<[test_lib]NotExportedA>" "ldc.i4.1\n\tnewarr class Foo<[test_lib]NotExportedA>\n\tldc.i4.0"
5076
5077
5078 ./make_type_visibility_test.sh type_vis_stelem_1 valid "stelem class [test_lib]ClassC" "ldc.i4.1\n\tnewarr class [test_lib]ClassC\n\tldc.i4.0\n\tldnull"
5079 ./make_type_visibility_test.sh type_vis_stelem_2 valid "stelem class [test_lib]NotExportedA" "ldc.i4.1\n\tnewarr class [test_lib]NotExportedA\n\tldc.i4.0\n\tldnull"
5080 ./make_type_visibility_test.sh type_vis_stelem_gist_1 valid "stelem class Foo<[test_lib]ClassC>" "ldc.i4.1\n\tnewarr class Foo<[test_lib]ClassC>\n\tldc.i4.0\n\tldnull"
5081 ./make_type_visibility_test.sh type_vis_stelem_gist_2 valid "stelem class Foo<[test_lib]NotExportedA>" "ldc.i4.1\n\tnewarr class Foo<[test_lib]NotExportedA>\n\tldc.i4.0\n\tldnull"
5082
5083
5084 ./make_type_visibility_test.sh type_vis_box_1 valid "box valuetype [test_lib]PublicStruct" "ldloc.1" "valuetype [test_lib]PublicStruct"
5085 ./make_type_visibility_test.sh type_vis_box_2 valid "box valuetype [test_lib]NBStruct" "ldloc.1" "valuetype [test_lib]NBStruct"
5086
5087
5088 #generic method
5089
5090 ./make_type_visibility_test.sh type_vis_gmethod_1 valid "call void SimpleClass::Generic<[test_lib]ClassC>()"
5091 ./make_type_visibility_test.sh type_vis_gmethod_2 unverifiable "call void SimpleClass::Generic<[test_lib]NotExportedA>()"
5092
5093
5094 #Constructor tests
5095
5096 ./make_ctor_test.sh ctor_good_ops_1 valid "call instance void object::'.ctor'()"
5097 ./make_ctor_test.sh ctor_good_ops_2 valid "nop\n\tcall instance void object::'.ctor'()"
5098 ./make_ctor_test.sh ctor_good_ops_3 valid "dup\n\tldc.i4.0\n\tstfld int32 Test::val\n\tcall instance void object::'.ctor'()"
5099 ./make_ctor_test.sh ctor_good_ops_4 valid "dup\n\tldfld int32 Test::val\n\tpop\n\tcall instance void object::'.ctor'()"
5100 ./make_ctor_test.sh ctor_good_ops_5 valid "dup\n\tpop\n\tcall instance void object::'.ctor'()"
5101
5102 ./make_ctor_test.sh ctor_call_super_2x valid "call instance void object::'.ctor'()\n\tldarg.0\n\tcall instance void object::'.ctor'()"
5103
5104 ./make_ctor_test.sh ctor_pass_this_as_arg_1 unverifiable "ldarg.0\n\tcall instance void TestClass::'.ctor'(object)" "other"
5105 ./make_ctor_test.sh ctor_pass_this_as_arg_2 unverifiable "dup\n\tcall instance void TestClass::'.ctor'(object)" "other"
5106
5107
5108 ./make_ctor_test.sh ctor_no_super_call unverifiable "nop"
5109 ./make_ctor_test.sh ctor_call_invalid_super unverifiable "call instance void TestClass::'.ctor'()"
5110 ./make_call_test.sh ctor_call_outside_ctor unverifiable "call instance void ClassA::.ctor()" "newobj instance void ClassA::.ctor()"
5111
5112 ./make_ctor_test.sh ctor_use_non_this_ptr unverifiable "ldloc.0\n\tcall instance void object::'.ctor'()"
5113 ./make_ctor_test.sh ctor_store_this_on_field unverifiable "dup\n\tdup\n\tstfld object Test::obj\n\tcall instance void object::'.ctor'()"
5114
5115
5116 ./make_ctor_test.sh ctor_use_uninit_this_1 unverifiable "dup\n\tcall void Test::StaticMethod(object)\n\tcall instance void object::'.ctor'()"
5117 ./make_ctor_test.sh ctor_use_uninit_this_2 unverifiable "dup\n\tcall instance void Test::InstanceMethod()\n\tcall instance void object::'.ctor'()"
5118 ./make_ctor_test.sh ctor_use_uninit_this_3 unverifiable "dup\n\tcastclass [mscorlib]System.String\n\tcall instance void object::'.ctor'()"
5119 ./make_ctor_test.sh ctor_use_uninit_this_4 unverifiable "dup\n\tunbox.any Test\n\tcall instance void object::'.ctor'()"
5120 ./make_ctor_test.sh ctor_use_uninit_this_5 unverifiable "dup\n\tcall instance void object::'.ctor'()\n\tcall instance void Test::InstanceMethod()"
5121
5122 ./make_ctor_test.sh ctor_bad_ops_1 unverifiable "dup\n\tstloc.0\n\tcall instance void object::'.ctor'()"
5123 ./make_ctor_test.sh ctor_bad_ops_2 unverifiable "dup\n\tcall instance void object::'.ctor'()\n\tcall instance void Test::InstanceMethod()"
5124
5125 #TODO try / catch inside constructor
5126
5127
5128 #TODO methods cannot have variance, but this should be checked at load time
5129 #TODO check for variance compatibility between types
5130
5131 #generic delegate validation
5132
5133 ./make_generic_argument_constraints_test.sh no_constraints valid "" ""
5134
5135 I=1
5136 for SRC in "(IfaceA)" "(IfaceB)" "(IfaceA, IfaceB)" ".ctor" "class" 
5137 do
5138         ./make_generic_argument_constraints_test.sh src_ctrs_only_${I} unverifiable "$SRC" ""
5139         I=`expr $I + 1`
5140 done
5141
5142 ./make_generic_argument_constraints_test.sh src_ctrs_only_vt unverifiable "valuetype" "" "int32"
5143
5144
5145 #Type arg compatibility
5146 ./make_generic_argument_constraints_test.sh type_ctrs_1 valid "(IfaceA)" "(IfaceA)"
5147 ./make_generic_argument_constraints_test.sh type_ctrs_2 valid "(IfaceA)" "(IfaceB, IfaceA)"
5148 ./make_generic_argument_constraints_test.sh type_ctrs_3 unverifiable "(IfaceA)" "(IfaceB)"
5149 ./make_generic_argument_constraints_test.sh type_ctrs_4 unverifiable "(IfaceA, IfaceB)" "(IfaceA)"
5150
5151 #DefaultArgument implements IfaceA
5152 ./make_generic_argument_constraints_test.sh type_ctrs_5 valid "(IfaceA)" "(DefaultArgument)"
5153
5154
5155 ./make_generic_argument_constraints_test.sh type_ctor_1 valid ".ctor" ".ctor"
5156
5157 ./make_generic_argument_constraints_test.sh type_class_1 valid "class" "class"
5158
5159 ./make_generic_argument_constraints_test.sh type_valuetype_1 valid "valuetype" "valuetype" "int32"
5160
5161 ./make_generic_argument_constraints_test.sh type_mixed_1 valid "class (IfaceA)" "class (IfaceA)"
5162 ./make_generic_argument_constraints_test.sh type_mixed_2 valid "(IfaceA)" "class (IfaceA)"
5163
5164 ./make_generic_argument_constraints_test.sh type_mixed_3 valid "" "(IfaceA)"
5165 ./make_generic_argument_constraints_test.sh type_mixed_4 valid "" "class (IfaceA)"