2008-01-17 Rodrigo Kumpera <rkumpera@novell.com>
[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
193 for OP in ceq
194 do
195   ./make_bin_test.sh bin_comp_op_27_${I} unverifiable $OP 'native int' 'native int&'
196   ./make_bin_test.sh bin_comp_op_28_${I} unverifiable $OP 'native int&' 'native int'
197   I=`expr $I + 1`
198 done
199
200 # Table 5: Integer Operations
201 I=1
202 for OP in and or xor
203 do
204   ./make_bin_test.sh bin_int_op_1_${I} unverifiable "$OP" int32 int64
205   ./make_bin_test.sh bin_int_op_2_${I} unverifiable "$OP" int32 float64
206   ./make_bin_test.sh bin_int_op_3_${I} unverifiable "$OP" int32 'int32&'
207   ./make_bin_test.sh bin_int_op_4_${I} unverifiable "$OP" int32 object
208
209   ./make_bin_test.sh bin_int_op_5_${I} unverifiable "$OP" int64 int32
210   ./make_bin_test.sh bin_int_op_6_${I} unverifiable "$OP" int64 'native int'
211   ./make_bin_test.sh bin_int_op_7_${I} unverifiable "$OP" int64 float64
212   ./make_bin_test.sh bin_int_op_8_${I} unverifiable "$OP" int64 'int64&'
213   ./make_bin_test.sh bin_int_op_9_${I} unverifiable "$OP" int64 object
214
215   ./make_bin_test.sh bin_int_op_10_${I} unverifiable "$OP" 'native int' int64
216   ./make_bin_test.sh bin_int_op_11_${I} unverifiable "$OP" 'native int' float64
217   ./make_bin_test.sh bin_int_op_12_${I} unverifiable "$OP" 'native int' 'native int&'
218   ./make_bin_test.sh bin_int_op_13_${I} unverifiable "$OP" 'native int' object
219
220   ./make_bin_test.sh bin_int_op_14_${I} unverifiable "$OP" float64 int32
221   ./make_bin_test.sh bin_int_op_15_${I} unverifiable "$OP" float64 int64
222   ./make_bin_test.sh bin_int_op_16_${I} unverifiable "$OP" float64 'native int'
223   ./make_bin_test.sh bin_int_op_17_${I} unverifiable "$OP" float64 float64
224   ./make_bin_test.sh bin_int_op_18_${I} unverifiable "$OP" float64 'int32&'
225   ./make_bin_test.sh bin_int_op_19_${I} unverifiable "$OP" float64 object
226
227   ./make_bin_test.sh bin_int_op_20_${I} unverifiable "$OP" 'int32&' int32
228   ./make_bin_test.sh bin_int_op_21_${I} unverifiable "$OP" 'int64&' int64
229   ./make_bin_test.sh bin_int_op_22_${I} unverifiable "$OP" 'native int&' 'native int'
230   ./make_bin_test.sh bin_int_op_23_${I} unverifiable "$OP" 'float64&' float64
231   ./make_bin_test.sh bin_int_op_24_${I} unverifiable "$OP" 'int32&' 'int32&'
232   ./make_bin_test.sh bin_int_op_25_${I} unverifiable "$OP" 'float64&' object
233
234   ./make_bin_test.sh bin_int_op_26_${I} unverifiable "$OP" object int32
235   ./make_bin_test.sh bin_int_op_27_${I} unverifiable "$OP" object int64
236   ./make_bin_test.sh bin_int_op_28_${I} unverifiable "$OP" object 'native int'
237   ./make_bin_test.sh bin_int_op_29_${I} unverifiable "$OP" object float64
238   ./make_bin_test.sh bin_int_op_30_${I} unverifiable "$OP" object 'int32&'
239   ./make_bin_test.sh bin_int_op_31_${I} unverifiable "$OP" object object
240   I=`expr $I + 1`
241 done
242
243 I=1
244 for TYPE in bool int8 int16 char int32 int64 'native int' 'class Int8Enum'
245 do
246   ./make_unary_test.sh not_${I} valid "not\n\tpop" "$TYPE"
247   I=`expr $I + 1`
248 done
249
250 for TYPE in 'int32&' object "class MyStruct" typedref "method int32 *(int32)" 'class Template\`1<int32>' float32 float64
251 do
252   ./make_unary_test.sh not_${I} unverifiable "not\n\tpop" "$TYPE"
253   I=`expr $I + 1`
254 done
255
256 I=1
257 for TYPE in bool int8 int16 char int32 int64 'native int' 'class Int8Enum' float32 float64
258 do
259   ./make_unary_test.sh neg_${I} valid "neg\n\tpop" "$TYPE"
260   I=`expr $I + 1`
261 done
262
263 for TYPE in 'int32&' object "class MyStruct" typedref "method int32 *(int32)" 'class Template\`1<int32>'
264 do
265   ./make_unary_test.sh neg_${I} unverifiable "neg\n\tpop" "$TYPE"
266   I=`expr $I + 1`
267 done
268
269
270 # Table 6: Shift Operators
271 I=1
272 for OP in shl shr
273 do
274   ./make_bin_test.sh shift_op_1_${I} unverifiable $OP int32 int64
275   ./make_bin_test.sh shift_op_2_${I} unverifiable $OP int32 float64
276   ./make_bin_test.sh shift_op_3_${I} unverifiable $OP int32 'int32&'
277   ./make_bin_test.sh shift_op_4_${I} unverifiable $OP int32 object
278
279   ./make_bin_test.sh shift_op_5_${I} unverifiable $OP int64 int64
280   ./make_bin_test.sh shift_op_6_${I} unverifiable $OP int64 float64
281   ./make_bin_test.sh shift_op_7_${I} unverifiable $OP int64 'int32&'
282   ./make_bin_test.sh shift_op_8_${I} unverifiable $OP int64 object
283
284   ./make_bin_test.sh shift_op_9_${I} unverifiable $OP 'native int' int64
285   ./make_bin_test.sh shift_op_10_${I} unverifiable $OP 'native int' float64
286   ./make_bin_test.sh shift_op_11_${I} unverifiable $OP 'native int' 'native int&'
287   ./make_bin_test.sh shift_op_12_${I} unverifiable $OP 'native int' object
288
289   ./make_bin_test.sh shift_op_13_${I} unverifiable $OP float64 int32
290   ./make_bin_test.sh shift_op_14_${I} unverifiable $OP float64 int64
291   ./make_bin_test.sh shift_op_15_${I} unverifiable $OP float64 'native int'
292   ./make_bin_test.sh shift_op_16_${I} unverifiable $OP float64 float64
293   ./make_bin_test.sh shift_op_17_${I} unverifiable $OP float64 'int32&'
294   ./make_bin_test.sh shift_op_18_${I} unverifiable $OP float64 object
295
296   ./make_bin_test.sh shift_op_19_${I} unverifiable $OP 'int32&' int32
297   ./make_bin_test.sh shift_op_20_${I} unverifiable $OP 'int64&' int64
298   ./make_bin_test.sh shift_op_21_${I} unverifiable $OP 'native int&' 'native int'
299   ./make_bin_test.sh shift_op_22_${I} unverifiable $OP 'float64&' float64
300   ./make_bin_test.sh shift_op_23_${I} unverifiable $OP 'int32&' 'int32&'
301   ./make_bin_test.sh shift_op_24_${I} unverifiable $OP 'float64&' object
302
303   ./make_bin_test.sh shift_op_25_${I} unverifiable $OP object int32
304   ./make_bin_test.sh shift_op_26_${I} unverifiable $OP object int64
305   ./make_bin_test.sh shift_op_27_${I} unverifiable $OP object 'native int'
306   ./make_bin_test.sh shift_op_28_${I} unverifiable $OP object float64
307   ./make_bin_test.sh shift_op_29_${I} unverifiable $OP object 'int32&'
308   ./make_bin_test.sh shift_op_30_${I} unverifiable $OP object object
309   I=`expr $I + 1`
310 done
311
312 # Table 8: Conversion Operations
313 I=1
314 J=1
315 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" 
316 do
317   for TYPE in 'int8' 'bool' 'unsigned int8' 'int16' 'char' 'unsigned int16' 'int32' 'unsigned int32' 'int64' 'unsigned int64' 'float32' 'float64' 'native int' 'native unsigned int'
318   do
319     ./make_unary_test.sh conv_op_${J}_${I} valid $OP "$TYPE"
320     I=`expr $I + 1`
321   done
322
323   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[,]&' 'typedref&'  'class Template`1<object>&'
324   do
325     ./make_unary_test.sh conv_op_${J}_${I} unverifiable $OP "$TYPE"
326     I=`expr $I + 1`
327   done
328   J=`expr $J + 1`
329   I=1
330 done
331
332 #local and argument store with invalid values lead to unverifiable code
333 I=1
334 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
335 do
336   ./make_store_test.sh coercion_1_${I} unverifiable "$OP" int8 int64
337   ./make_store_test.sh coercion_2_${I} unverifiable "$OP" int8 float64
338   ./make_store_test.sh coercion_3_${I} unverifiable "$OP" int8 'int8&'
339   ./make_store_test.sh coercion_4_${I} unverifiable "$OP" int8 object
340
341   ./make_store_test.sh coercion_5_${I} unverifiable "$OP" 'unsigned int8' int64
342   ./make_store_test.sh coercion_6_${I} unverifiable "$OP" 'unsigned int8' float64
343   ./make_store_test.sh coercion_7_${I} unverifiable "$OP" 'unsigned int8' 'unsigned int8&'
344   ./make_store_test.sh coercion_8_${I} unverifiable "$OP" 'unsigned int8' object
345
346   ./make_store_test.sh coercion_9_${I} unverifiable "$OP" bool int64
347   ./make_store_test.sh coercion_10_${I} unverifiable "$OP" bool float64
348   ./make_store_test.sh coercion_11_${I} unverifiable "$OP" bool 'bool&'
349   ./make_store_test.sh coercion_12_${I} unverifiable "$OP" bool object
350
351   ./make_store_test.sh coercion_13_${I} unverifiable "$OP" int16 int64
352   ./make_store_test.sh coercion_14_${I} unverifiable "$OP" int16 float64
353   ./make_store_test.sh coercion_15_${I} unverifiable "$OP" int16 'int16&'
354   ./make_store_test.sh coercion_16_${I} unverifiable "$OP" int16 object
355   
356   ./make_store_test.sh coercion_17_${I} unverifiable "$OP" 'unsigned int16' int64
357   ./make_store_test.sh coercion_18_${I} unverifiable "$OP" 'unsigned int16' float64
358   ./make_store_test.sh coercion_19_${I} unverifiable "$OP" 'unsigned int16' 'unsigned int16&'
359   ./make_store_test.sh coercion_20_${I} unverifiable "$OP" 'unsigned int16' object
360   
361   ./make_store_test.sh coercion_21_${I} unverifiable "$OP" char int64
362   ./make_store_test.sh coercion_22_${I} unverifiable "$OP" char float64
363   ./make_store_test.sh coercion_23_${I} unverifiable "$OP" char 'char&'
364   ./make_store_test.sh coercion_24_${I} unverifiable "$OP" char object
365   
366   ./make_store_test.sh coercion_25_${I} unverifiable "$OP" int32 int64
367   ./make_store_test.sh coercion_26_${I} unverifiable "$OP" int32 float64
368   ./make_store_test.sh coercion_27_${I} unverifiable "$OP" int32 'int32&'
369   ./make_store_test.sh coercion_28_${I} unverifiable "$OP" int32 object
370   
371   ./make_store_test.sh coercion_29_${I} unverifiable "$OP" 'unsigned int32' int64
372   ./make_store_test.sh coercion_30_${I} unverifiable "$OP" 'unsigned int32' float64
373   ./make_store_test.sh coercion_31_${I} unverifiable "$OP" 'unsigned int32' 'unsigned int32&'
374   ./make_store_test.sh coercion_32_${I} unverifiable "$OP" 'unsigned int32' object
375  
376   ./make_store_test.sh coercion_33_${I} unverifiable "$OP" int64 int32
377   ./make_store_test.sh coercion_34_${I} unverifiable "$OP" int64 'native int'
378   ./make_store_test.sh coercion_35_${I} unverifiable "$OP" int64 float64
379   ./make_store_test.sh coercion_36_${I} unverifiable "$OP" int64 'int64&'
380   ./make_store_test.sh coercion_37_${I} unverifiable "$OP" int64 object
381   
382   ./make_store_test.sh coercion_38_${I} unverifiable "$OP" 'unsigned int64' int32
383   ./make_store_test.sh coercion_39_${I} unverifiable "$OP" 'unsigned int64' 'native int'
384   ./make_store_test.sh coercion_40_${I} unverifiable "$OP" 'unsigned int64' float64
385   ./make_store_test.sh coercion_41_${I} unverifiable "$OP" 'unsigned int64' 'unsigned int64&'
386   ./make_store_test.sh coercion_42_${I} unverifiable "$OP" 'unsigned int64' object
387   
388   ./make_store_test.sh coercion_43_${I} unverifiable "$OP" 'native int' int64
389   ./make_store_test.sh coercion_44_${I} unverifiable "$OP" 'native int' float64
390   ./make_store_test.sh coercion_45_${I} unverifiable "$OP" 'native int' 'native int&'
391   ./make_store_test.sh coercion_46_${I} unverifiable "$OP" 'native int' object
392   
393   ./make_store_test.sh coercion_47_${I} unverifiable "$OP" 'native unsigned int' int64
394   ./make_store_test.sh coercion_48_${I} unverifiable "$OP" 'native unsigned int' float64
395   ./make_store_test.sh coercion_49_${I} unverifiable "$OP" 'native unsigned int' 'native unsigned int&'
396   ./make_store_test.sh coercion_50_${I} unverifiable "$OP" 'native unsigned int' object
397   
398   ./make_store_test.sh coercion_51_${I} unverifiable "$OP" float32 int32
399   ./make_store_test.sh coercion_52_${I} unverifiable "$OP" float32 'native int'
400   ./make_store_test.sh coercion_53_${I} unverifiable "$OP" float32 int64
401   ./make_store_test.sh coercion_54_${I} unverifiable "$OP" float32 'float32&'
402   ./make_store_test.sh coercion_55_${I} unverifiable "$OP" float32 object
403   
404   ./make_store_test.sh coercion_56_${I} unverifiable "$OP" float64 int32
405   ./make_store_test.sh coercion_57_${I} unverifiable "$OP" float64 'native int'
406   ./make_store_test.sh coercion_58_${I} unverifiable "$OP" float64 int64
407   ./make_store_test.sh coercion_59_${I} unverifiable "$OP" float64 'float64&'
408   ./make_store_test.sh coercion_60_${I} unverifiable "$OP" float64 object
409
410   ./make_store_test.sh coercion_61_${I} unverifiable "$OP" object int32
411   ./make_store_test.sh coercion_62_${I} unverifiable "$OP" object 'native int'
412   ./make_store_test.sh coercion_63_${I} unverifiable "$OP" object int64
413   ./make_store_test.sh coercion_64_${I} unverifiable "$OP" object float64
414   ./make_store_test.sh coercion_65_${I} unverifiable "$OP" object 'object&'
415   
416   ./make_store_test.sh coercion_66_${I} unverifiable "$OP" 'class ValueType' int32
417   ./make_store_test.sh coercion_67_${I} unverifiable "$OP" 'class ValueType' 'native int'
418   ./make_store_test.sh coercion_68_${I} unverifiable "$OP" 'class ValueType' int64
419   ./make_store_test.sh coercion_69_${I} unverifiable "$OP" 'class ValueType' float64
420   ./make_store_test.sh coercion_70_${I} unverifiable "$OP" 'class ValueType' 'class ValueType&'
421   ./make_store_test.sh coercion_71_${I} unverifiable "$OP" 'class ValueType' object
422   
423   ./make_store_test.sh coercion_72_${I} unverifiable "$OP" 'int32&' int32
424   ./make_store_test.sh coercion_73_${I} unverifiable "$OP" 'int32&' 'native int'
425   ./make_store_test.sh coercion_74_${I} unverifiable "$OP" 'int32&' int64
426   ./make_store_test.sh coercion_75_${I} unverifiable "$OP" 'int32&' float64
427   ./make_store_test.sh coercion_76_${I} unverifiable "$OP" 'int32&' object
428   
429   ./make_store_test.sh coercion_77_${I} unverifiable "$OP" typedref int32
430   ./make_store_test.sh coercion_78_${I} unverifiable "$OP" typedref 'native int'
431   ./make_store_test.sh coercion_89_${I} unverifiable "$OP" typedref int64
432   ./make_store_test.sh coercion_80_${I} unverifiable "$OP" typedref float64
433   ./make_store_test.sh coercion_81_${I} unverifiable "$OP" typedref 'typedref&'
434   ./make_store_test.sh coercion_82_${I} unverifiable "$OP" typedref object
435   I=`expr $I + 1`
436 done
437
438 #valid coersion between native int and int32
439 I=1
440 for OP in stloc.0 "starg 0" 
441 do
442         ./make_store_test.sh coercion_83_${I} valid "$OP" int32 "native int"
443         ./make_store_test.sh coercion_84_${I} valid "$OP" "native int" int32
444
445         ./make_store_test.sh coercion_85_${I} valid "$OP" "unsigned int32" "native int"
446         ./make_store_test.sh coercion_86_${I} valid "$OP" "native int" "unsigned int32"
447
448         ./make_store_test.sh coercion_87_${I} valid "$OP" int32 "native unsigned int"
449         ./make_store_test.sh coercion_88_${I} valid "$OP" "native unsigned int" int32
450
451         ./make_store_test.sh coercion_89_${I} valid "$OP" "unsigned int32" "native int"
452         ./make_store_test.sh coercion_90_${I} valid "$OP" "native unsigned int" "unsigned int32"
453
454         I=`expr $I + 1`
455 done
456
457 #test for unverifiable types
458
459 I=1
460 for OP in "stloc.0" "starg 0"
461 do
462   ./make_store_test.sh misc_types_store_1_${I} valid "$OP" typedref typedref
463   ./make_store_test.sh misc_types_store_2_${I} unverifiable "$OP" "int32*" "int32*"
464   ./make_store_test.sh misc_types_store_3_${I} unverifiable "$OP" "method int32 *(int32)" "method int32 *(int32)"
465
466   ./make_store_test.sh misc_types_store_4_${I} unverifiable "$OP" "method int32 *(int32)" "method void *(int32)"
467   ./make_store_test.sh misc_types_store_5_${I} unverifiable "$OP" "int32*" "int8*"
468   ./make_store_test.sh misc_types_store_6_${I} unverifiable "$OP" typedref "native int&"
469
470
471   ./make_store_test.sh managed_pointer_store_1_${I} valid "$OP" "int32&" "int32&"
472   ./make_store_test.sh managed_pointer_store_2_${I} valid "$OP" "int32&" "native int&"
473   ./make_store_test.sh managed_pointer_store_3_${I} valid "$OP" "int32&" "unsigned int32&"
474   ./make_store_test.sh managed_pointer_store_4_${I} valid "$OP" "native int&" "int32&"
475   ./make_store_test.sh managed_pointer_store_5_${I} unverifiable "$OP" "int32&" "int16&"
476
477   ./make_store_test.sh managed_pointer_store_6_${I} valid "$OP" "int8&" "unsigned int8&"
478   ./make_store_test.sh managed_pointer_store_7_${I} valid "$OP" "int8&" "bool&"
479   ./make_store_test.sh managed_pointer_store_8_${I} unverifiable "$OP" "int8&" "int16&"
480
481   ./make_store_test.sh managed_pointer_store_9_${I} valid "$OP" "int16&" "unsigned int16&"
482   ./make_store_test.sh managed_pointer_store_10_${I} valid "$OP" "int16&" "char&"
483   ./make_store_test.sh managed_pointer_store_11_${I} unverifiable "$OP" "int16&" "int32&"
484
485   ./make_store_test.sh managed_pointer_store_12_${I} unverifiable "$OP" "float32&" "float64&"
486   ./make_store_test.sh managed_pointer_store_13_${I} unverifiable "$OP" "float64&" "float32&"
487
488   I=`expr $I + 1`
489 done
490
491
492 function fix () {
493         if [ "$3" != "" ]; then
494                 A=$3;
495         elif [ "$2" != "" ]; then
496                 A=$2;
497         else
498                 A=$1;
499         fi
500
501         if [ "$A" == "bool&" ]; then
502                 A="int8&";
503         elif [ "$A" == "char&" ]; then
504                 A="int16&";
505         fi
506
507         echo "$A";
508 }
509
510 #Tests related to storing reference types on other reference types
511 I=1
512 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
513 do
514         for TYPE1 in 'native int&' 'native unsigned int&'
515         do
516                 for TYPE2 in 'int8&' 'unsigned int8&' 'bool&' 'int16&' 'unsigned int16&' 'char&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&' 'native int&' 'native unsigned int&'
517                 do
518                         TA="$(fix $TYPE1)"
519                         TB="$(fix $TYPE2)"
520                         if [ "$TA" == "$TB" ]; then
521                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
522                         elif [ "$TA" == "int32&" ] && [ "$TB" == "int&" ]; then
523                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
524                         elif [ "$TA" == "int&" ] && [ "$TB" == "int32&" ]; then
525                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
526                         else
527                                 ./make_store_test.sh ref_coercion_${I} unverifiable "$OP" "$TYPE1" "$TYPE2"
528                         fi
529                         I=`expr $I + 1`
530                 done
531         done
532 done
533
534 I=1
535 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
536 do
537         for TYPE1 in 'int8&' 'unsigned int8&' 'bool&' 'int16&' 'unsigned int16&' 'char&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&'
538         do
539                 for TYPE2 in 'int8&' 'unsigned int8&' 'bool&' 'int16&' 'unsigned int16&' 'char&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&'
540                 do
541                         TA="$(fix $TYPE1)"
542                         TB="$(fix $TYPE2)"
543                         if [ "$TA" == "$TB" ]; then
544                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
545                         else
546                                 ./make_store_test.sh ref_coercion_${I} unverifiable "$OP" "$TYPE1" "$TYPE2"
547                         fi
548                         I=`expr $I + 1`
549                 done
550         done
551 done
552
553 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
554 do
555         for TYPE1 in 'class ClassA&' 'class ClassB&' 'class InterfaceA&' 'class InterfaceB&' 'class ValueType&'
556         do
557                 for TYPE2 in 'class ClassA&' 'class ClassB&' 'class InterfaceA&' 'class InterfaceB&' 'class ValueType&'
558                 do
559                         if [ "$TYPE1" == "$TYPE2" ]; then
560                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
561                         else
562                                 ./make_store_test.sh ref_coercion_${I} unverifiable "$OP" "$TYPE1" "$TYPE2"
563                         fi
564                         I=`expr $I + 1`
565                 done
566         done
567 done
568
569 #Field store parameter compatibility leads to invalid code
570 #Calling method with different verification types on stack lead to invalid code
571 I=1
572 for OP in "stfld TYPE1 Class::fld" "stsfld TYPE1 Class::sfld\n\tpop"  "call void Class::Method(TYPE1)"
573 do
574   ./make_obj_store_test.sh obj_coercion_1_${I} unverifiable "$OP" int8 int64
575   ./make_obj_store_test.sh obj_coercion_2_${I} unverifiable "$OP" int8 float64
576   ./make_obj_store_test.sh obj_coercion_3_${I} unverifiable "$OP" int8 'int8&'
577   ./make_obj_store_test.sh obj_coercion_4_${I} unverifiable "$OP" int8 object
578
579   ./make_obj_store_test.sh obj_coercion_5_${I} unverifiable "$OP" 'unsigned int8' int64
580   ./make_obj_store_test.sh obj_coercion_6_${I} unverifiable "$OP" 'unsigned int8' float64
581   ./make_obj_store_test.sh obj_coercion_7_${I} unverifiable "$OP" 'unsigned int8' 'unsigned int8&'
582   ./make_obj_store_test.sh obj_coercion_8_${I} unverifiable "$OP" 'unsigned int8' object
583
584   ./make_obj_store_test.sh obj_coercion_9_${I} unverifiable "$OP" bool int64
585   ./make_obj_store_test.sh obj_coercion_10_${I} unverifiable "$OP" bool float64
586   ./make_obj_store_test.sh obj_coercion_11_${I} unverifiable "$OP" bool 'bool&'
587   ./make_obj_store_test.sh obj_coercion_12_${I} unverifiable "$OP" bool object
588
589   ./make_obj_store_test.sh obj_coercion_13_${I} unverifiable "$OP" int16 int64
590   ./make_obj_store_test.sh obj_coercion_14_${I} unverifiable "$OP" int16 float64
591   ./make_obj_store_test.sh obj_coercion_15_${I} unverifiable "$OP" int16 'int16&'
592   ./make_obj_store_test.sh obj_coercion_16_${I} unverifiable "$OP" int16 object
593   
594   ./make_obj_store_test.sh obj_coercion_17_${I} unverifiable "$OP" 'unsigned int16' int64
595   ./make_obj_store_test.sh obj_coercion_18_${I} unverifiable "$OP" 'unsigned int16' float64
596   ./make_obj_store_test.sh obj_coercion_19_${I} unverifiable "$OP" 'unsigned int16' 'unsigned int16&'
597   ./make_obj_store_test.sh obj_coercion_20_${I} unverifiable "$OP" 'unsigned int16' object
598   
599   ./make_obj_store_test.sh obj_coercion_21_${I} unverifiable "$OP" char int64
600   ./make_obj_store_test.sh obj_coercion_22_${I} unverifiable "$OP" char float64
601   ./make_obj_store_test.sh obj_coercion_23_${I} unverifiable "$OP" char 'char&'
602   ./make_obj_store_test.sh obj_coercion_24_${I} unverifiable "$OP" char object
603   
604   ./make_obj_store_test.sh obj_coercion_25_${I} unverifiable "$OP" int32 int64
605   ./make_obj_store_test.sh obj_coercion_26_${I} unverifiable "$OP" int32 float64
606   ./make_obj_store_test.sh obj_coercion_27_${I} unverifiable "$OP" int32 'int32&'
607   ./make_obj_store_test.sh obj_coercion_28_${I} unverifiable "$OP" int32 object
608   
609   ./make_obj_store_test.sh obj_coercion_29_${I} unverifiable "$OP" 'unsigned int32' int64
610   ./make_obj_store_test.sh obj_coercion_30_${I} unverifiable "$OP" 'unsigned int32' float64
611   ./make_obj_store_test.sh obj_coercion_31_${I} unverifiable "$OP" 'unsigned int32' 'unsigned int32&'
612   ./make_obj_store_test.sh obj_coercion_32_${I} unverifiable "$OP" 'unsigned int32' object
613  
614   ./make_obj_store_test.sh obj_coercion_33_${I} unverifiable "$OP" int64 int32
615   ./make_obj_store_test.sh obj_coercion_34_${I} unverifiable "$OP" int64 'native int'
616   ./make_obj_store_test.sh obj_coercion_35_${I} unverifiable "$OP" int64 float64
617   ./make_obj_store_test.sh obj_coercion_36_${I} unverifiable "$OP" int64 'int64&'
618   ./make_obj_store_test.sh obj_coercion_37_${I} unverifiable "$OP" int64 object
619   
620   ./make_obj_store_test.sh obj_coercion_38_${I} unverifiable "$OP" 'unsigned int64' int32
621   ./make_obj_store_test.sh obj_coercion_39_${I} unverifiable "$OP" 'unsigned int64' 'native int'
622   ./make_obj_store_test.sh obj_coercion_40_${I} unverifiable "$OP" 'unsigned int64' float64
623   ./make_obj_store_test.sh obj_coercion_41_${I} unverifiable "$OP" 'unsigned int64' 'unsigned int64&'
624   ./make_obj_store_test.sh obj_coercion_42_${I} unverifiable "$OP" 'unsigned int64' object
625   
626   ./make_obj_store_test.sh obj_coercion_43_${I} unverifiable "$OP" 'native int' int64
627   ./make_obj_store_test.sh obj_coercion_44_${I} unverifiable "$OP" 'native int' float64
628   ./make_obj_store_test.sh obj_coercion_45_${I} unverifiable "$OP" 'native int' 'native int&'
629   ./make_obj_store_test.sh obj_coercion_46_${I} unverifiable "$OP" 'native int' object
630   
631   ./make_obj_store_test.sh obj_coercion_47_${I} unverifiable "$OP" 'native unsigned int' int64
632   ./make_obj_store_test.sh obj_coercion_48_${I} unverifiable "$OP" 'native unsigned int' float64
633   ./make_obj_store_test.sh obj_coercion_49_${I} unverifiable "$OP" 'native unsigned int' 'native unsigned int&'
634   ./make_obj_store_test.sh obj_coercion_50_${I} unverifiable "$OP" 'native unsigned int' object
635   
636   ./make_obj_store_test.sh obj_coercion_51_${I} unverifiable "$OP" float32 int32
637   ./make_obj_store_test.sh obj_coercion_52_${I} unverifiable "$OP" float32 'native int'
638   ./make_obj_store_test.sh obj_coercion_53_${I} unverifiable "$OP" float32 int64
639   ./make_obj_store_test.sh obj_coercion_54_${I} unverifiable "$OP" float32 'float32&'
640   ./make_obj_store_test.sh obj_coercion_55_${I} unverifiable "$OP" float32 object
641   
642   ./make_obj_store_test.sh obj_coercion_56_${I} unverifiable "$OP" float64 int32
643   ./make_obj_store_test.sh obj_coercion_57_${I} unverifiable "$OP" float64 'native int'
644   ./make_obj_store_test.sh obj_coercion_58_${I} unverifiable "$OP" float64 int64
645   ./make_obj_store_test.sh obj_coercion_59_${I} unverifiable "$OP" float64 'float64&'
646   ./make_obj_store_test.sh obj_coercion_60_${I} unverifiable "$OP" float64 object
647
648   ./make_obj_store_test.sh obj_coercion_61_${I} unverifiable "$OP" object int32
649   ./make_obj_store_test.sh obj_coercion_62_${I} unverifiable "$OP" object 'native int'
650   ./make_obj_store_test.sh obj_coercion_63_${I} unverifiable "$OP" object int64
651   ./make_obj_store_test.sh obj_coercion_64_${I} unverifiable "$OP" object float64
652   ./make_obj_store_test.sh obj_coercion_65_${I} unverifiable "$OP" object 'object&'
653   
654   ./make_obj_store_test.sh obj_coercion_66_${I} unverifiable "$OP" 'class ValueType' int32
655   ./make_obj_store_test.sh obj_coercion_67_${I} unverifiable "$OP" 'class ValueType' 'native int'
656   ./make_obj_store_test.sh obj_coercion_68_${I} unverifiable "$OP" 'class ValueType' int64
657   ./make_obj_store_test.sh obj_coercion_69_${I} unverifiable "$OP" 'class ValueType' float64
658   ./make_obj_store_test.sh obj_coercion_70_${I} unverifiable "$OP" 'class ValueType' 'class ValueType&'
659   ./make_obj_store_test.sh obj_coercion_71_${I} unverifiable "$OP" 'class ValueType' object
660   
661   
662   #These tests don't test store error since one cannot have an 'int32&' field
663   #They should exist in the structural tests session
664   #./make_obj_store_test.sh obj_coercion_72_${I} invalid "$OP" 'int32&' int32
665   #./make_obj_store_test.sh obj_coercion_73_${I} invalid "$OP" 'int32&' 'native int'
666   #./make_obj_store_test.sh obj_coercion_74_${I} invalid "$OP" 'int32&' int64
667   #./make_obj_store_test.sh obj_coercion_75_${I} invalid "$OP" 'int32&' float64
668   #./make_obj_store_test.sh obj_coercion_76_${I} invalid "$OP" 'int32&' object
669   
670
671   ./make_obj_store_test.sh obj_coercion_83_${I} valid "$OP" int32 "native int"
672   ./make_obj_store_test.sh obj_coercion_84_${I} valid "$OP" "native int" int32
673  
674   ./make_obj_store_test.sh obj_coercion_85_${I} valid "$OP" "unsigned int32" "native int"
675   ./make_obj_store_test.sh obj_coercion_86_${I} valid "$OP" "native int" "unsigned int32"
676  
677   ./make_obj_store_test.sh obj_coercion_87_${I} valid "$OP" int32 "native unsigned int"
678   ./make_obj_store_test.sh obj_coercion_88_${I} valid "$OP" "native unsigned int" int32
679  
680   ./make_obj_store_test.sh obj_coercion_89_${I} valid "$OP" "unsigned int32" "native int"
681   ./make_obj_store_test.sh obj_coercion_90_${I} valid "$OP" "native unsigned int" "unsigned int32"
682   I=`expr $I + 1`
683 done
684
685 I=1
686 for OP in "call void Class::Method(TYPE1)"
687 do
688   ./make_obj_store_test.sh obj_coercion_77_${I} unverifiable "$OP" typedref int32 "no"
689   ./make_obj_store_test.sh obj_coercion_78_${I} unverifiable "$OP" typedref 'native int' "no"
690   ./make_obj_store_test.sh obj_coercion_79_${I} unverifiable "$OP" typedref int64 "no"
691   ./make_obj_store_test.sh obj_coercion_80_${I} unverifiable "$OP" typedref float64 "no"
692   ./make_obj_store_test.sh obj_coercion_82_${I} unverifiable "$OP" typedref object "no"
693   I=`expr $I + 1`
694 done
695
696 # 1.8.1.2.3 Verification type compatibility (Assignment compatibility)
697 I=1
698 for OP in stloc.0 "stloc.s 0" "starg.s 0"
699 do
700   # ClassB not subtype of ClassA.
701   ./make_store_test.sh assign_compat_1_${I} unverifiable "$OP" 'class ClassA' 'class ClassB'
702
703   # ClassA not interface type.
704   # FIXME: what was the purpoise of this test? on it's current for it is valid and not unverifiable
705   ./make_store_test.sh assign_compat_3_${I} valid "$OP" object 'class ClassA'
706   
707   # Implementation of InterfaceB does not require the implementation of InterfaceA
708   ./make_store_test.sh assign_compat_4_${I} unverifiable "$OP" 'class InterfaceA' 'class InterfaceB'
709
710   # Array/vector.
711   ./make_store_test.sh assign_compat_5_${I} unverifiable "$OP" 'string []' 'string[,]'
712
713   # Vector/array.
714   ./make_store_test.sh assign_compat_6_${I} unverifiable "$OP" 'string [,]' 'string[]'
715
716   # Arrays with different rank.
717   ./make_store_test.sh assign_compat_7_${I} unverifiable "$OP" 'string [,]' 'string[,,]'
718
719   # Method pointers with different return types.
720   ./make_store_test.sh assign_compat_8_${I} unverifiable "$OP" 'method int32 *(int32)' 'method float32 *(int32)'
721
722   # Method pointers with different parameters.
723   ./make_store_test.sh assign_compat_9_${I} unverifiable "$OP" 'method int32 *(float64)' 'method int32 *(int32)'
724
725   # Method pointers with different calling conventions.
726   ./make_store_test.sh assign_compat_10_${I} unverifiable "$OP" 'method vararg int32 *(int32)' 'method int32 *(int32)'
727
728   # Method pointers with different calling conventions. (2)
729   ./make_store_test.sh assign_compat_11_${I} unverifiable "$OP" 'method unmanaged fastcall int32 *(int32)' 'method int32 *(int32)'
730
731   # Method pointers with different calling conventions. (3)
732   ./make_store_test.sh assign_compat_12_${I} unverifiable "$OP" 'method unmanaged fastcall int32 *(int32)' 'method unmanaged stdcall int32 *(int32)'
733   I=`expr $I + 1`
734 done
735
736 for OP in "stfld TYPE1 Class::fld" "stsfld TYPE1 Class::sfld\n\tpop"  "call void Class::Method(TYPE1)"
737 do
738   # ClassB not subtype of ClassA.
739   ./make_obj_store_test.sh assign_compat_1_${I} unverifiable "$OP" 'class ClassA' 'class ClassB'
740
741   # object not subtype of ClassA.
742   ./make_obj_store_test.sh assign_compat_2_${I} unverifiable "$OP" 'class ClassA' 'object'
743
744   # ClassA not interface type.
745   #FIXME: this test is valid, you can store type ClassA in a object field
746   ./make_obj_store_test.sh assign_compat_3_${I} valid "$OP" object 'class ClassA'
747   
748   # Implementation of InterfaceB does not require the implementation of InterfaceA
749   ./make_obj_store_test.sh assign_compat_4_${I} unverifiable "$OP" 'class InterfaceA' 'class InterfaceB'
750
751   # Array/vector.
752   ./make_obj_store_test.sh assign_compat_5_${I} unverifiable "$OP" 'string []' 'string[,]'
753
754   # Vector/array.
755   ./make_obj_store_test.sh assign_compat_6_${I} unverifiable "$OP" 'string [,]' 'string[]'
756
757   # Arrays with different rank.
758   ./make_obj_store_test.sh assign_compat_7_${I} unverifiable "$OP" 'string [,]' 'string[,,]'
759
760   # Method pointers with different return types.
761   ./make_obj_store_test.sh assign_compat_8_${I} unverifiable "$OP" 'method int32 *(int32)' 'method float32 *(int32)'
762
763   # Method pointers with different parameters.
764   ./make_obj_store_test.sh assign_compat_9_${I} unverifiable "$OP" 'method int32 *(float64)' 'method int32 *(int32)'
765
766   # Method pointers with different calling conventions.
767   ./make_obj_store_test.sh assign_compat_10_${I} unverifiable "$OP" 'method vararg int32 *(int32)' 'method int32 *(int32)'
768   
769     # Method pointers with different calling conventions. (2)
770   ./make_obj_store_test.sh assign_compat_11_${I} unverifiable "$OP" 'method unmanaged fastcall int32 *(int32)' 'method int32 *(int32)'
771   
772     # Method pointers with different calling conventions. (3)
773   ./make_obj_store_test.sh assign_compat_12_${I} unverifiable "$OP" 'method unmanaged fastcall int32 *(int32)' 'method unmanaged stdcall int32 *(int32)'
774   
775   I=`expr $I + 1`
776 done
777
778 # 1.8.1.3 Merging stack states
779 I=1
780 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)'
781 do
782   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)'
783   do
784         ZZ=`echo $TYPE1 | grep "*";`
785         T1_PTR=$?
786         ZZ=`echo $TYPE2 | grep "*";`
787         T2_PTR=$?
788         
789     if (($T1_PTR == 0  ||  $T2_PTR == 0)); then
790                 ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
791     elif [ "$TYPE1" == "$TYPE2" ]; then
792                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
793         elif [ "$TYPE1" == "int32" ] && [ "$TYPE2" == "native int" ]; then
794                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
795         elif [ "$TYPE1" == "native int" ] && [ "$TYPE2" == "int32" ]; then
796                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
797         elif [ "$TYPE1" == "int32&" ] && [ "$TYPE2" == "native int&" ]; then
798                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
799         elif [ "$TYPE1" == "native int&" ] && [ "$TYPE2" == "int32&" ]; then
800                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
801         else
802                 ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
803     fi
804         I=`expr $I + 1`
805   done
806 done
807
808 # Unverifiable array stack merges
809
810 # These are verifiable, the merged type is 'object' or 'Array'
811 #for TYPE1 in 'string []' 'string [,]' 'string [,,]' 
812 #do
813 #  for TYPE2 in 'string []' 'string [,]' 'string [,,]' 
814 #  do
815 #    if [ "$TYPE1" != "$TYPE2" ]; then
816 #       ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
817 #       I=`expr $I + 1`
818 #    fi
819 #  done
820 #done
821
822 # Exception block branch tests (see 3.15)
823 I=1
824 for OP in br "ldc.i4.0\n\tbrfalse"
825 do
826   ./make_exception_branch_test.sh in_try_${I} unverifiable "$OP branch_target1"
827   ./make_exception_branch_test.sh in_catch_${I} unverifiable "$OP branch_target2"
828   ./make_exception_branch_test.sh in_finally_${I} invalid "$OP branch_target3"
829   ./make_exception_branch_test.sh in_filter_${I} unverifiable "$OP branch_target4"
830   ./make_exception_branch_test.sh out_try_${I} unverifiable "" "$OP branch_target5"
831   ./make_exception_branch_test.sh out_catch_${I} unverifiable "" "" "$OP branch_target5"
832   ./make_exception_branch_test.sh out_finally_${I} unverifiable "" "" "" "$OP branch_target5"
833   ./make_exception_branch_test.sh out_filter_${I} unverifiable "" "" "" "" "$OP branch_target5"
834   I=`expr $I + 1`
835 done
836
837 for OP in "ldloc.0\n\tldloc.1\n\tbeq" "ldloc.0\n\tldloc.1\n\tbge"
838 do
839   ./make_exception_branch_test.sh in_try_${I} invalid "$OP branch_target1"
840   ./make_exception_branch_test.sh in_catch_${I} invalid "$OP branch_target2"
841   ./make_exception_branch_test.sh in_finally_${I} invalid "$OP branch_target3"
842   ./make_exception_branch_test.sh in_filter_${I} invalid "$OP branch_target4"
843   ./make_exception_branch_test.sh out_try_${I} invalid "" "$OP branch_target5"
844   ./make_exception_branch_test.sh out_catch_${I} invalid "" "" "$OP branch_target5"
845   ./make_exception_branch_test.sh out_finally_${I} unverifiable "" "" "" "$OP branch_target5"
846   ./make_exception_branch_test.sh out_filter_${I} unverifiable "" "" "" "" "$OP branch_target5"
847   I=`expr $I + 1`
848 done
849
850 ./make_exception_branch_test.sh ret_out_try unverifiable "" "ldc.i4.0\n\tret"
851 ./make_exception_branch_test.sh ret_out_catch unverifiable "" "" "ldc.i4.0\n\tret"
852 ./make_exception_branch_test.sh ret_out_finally unverifiable "" "" "" "ldc.i4.0\n\tret"
853 ./make_exception_branch_test.sh ret_out_filter unverifiable "" "" "" "" "ldc.i4.0\n\tret"
854
855
856 # Unary branch op type tests (see 3.17)
857
858 for OP in brfalse
859 do
860   ./make_unary_test.sh un_branch_op unverifiable "$OP branch_target" float64
861 done
862
863 # Ldloc.0 and Ldarg tests (see 3.38)
864
865 I=1
866 for OP in "ldarg.s 0" "ldarg.0"
867 do
868   ./make_unary_test.sh ld_no_slot_${I} unverifiable "pop\n\t$OP\n\tpop" int32
869   I=`expr $I + 1`
870 done
871
872 for OP in "ldloc.s 1" "ldloc.1" "ldloc 1"
873 do
874   ./make_unary_test.sh ld_no_slot_${I} invalid "pop\n\t$OP\n\tpop" int32
875   I=`expr $I + 1`
876 done
877
878 for OP in "ldarga.s 0" "ldloca.s 1"
879 do
880   ./make_unary_test.sh ld_no_slot_${I} invalid "pop\n\t$OP\n\tpop" int32
881   I=`expr $I + 1`
882 done
883
884 # Starg and Stloc tests (see 3.61)
885
886 I=1
887 for OP in "starg.s 0"
888 do
889   ./make_unary_test.sh st_no_slot_${I} unverifiable "$OP" int32
890   I=`expr $I + 1`
891 done
892
893 for OP in "stloc.s 1"
894 do
895   ./make_unary_test.sh st_no_slot_${I} invalid "$OP" int32
896   I=`expr $I + 1`
897 done
898
899 # Ldfld and Ldflda tests (see 4.10)
900
901 for OP in ldfld ldflda
902 do
903   ./make_unary_test.sh ${OP}_no_fld invalid "$OP int32 Class::invalid\n\tpop" "class Class"
904   ./make_unary_test.sh ${OP}_bad_obj unverifiable "$OP int32 Class::valid\n\tpop" object
905   ./make_unary_test.sh ${OP}_obj_int32 unverifiable "$OP int32 Class::valid\n\tpop" int32
906   ./make_unary_test.sh ${OP}_obj_int64 unverifiable "$OP int32 Class::valid\n\tpop" int64
907   ./make_unary_test.sh ${OP}_obj_float64 unverifiable "$OP int32 Class::valid\n\tpop" float64
908   ./make_unary_test.sh ${OP}_obj_native_int unverifiable "$OP int32 Class::valid\n\tpop" 'native int'
909 #overlapped checks must be done separatedly
910 #  ./make_unary_test.sh ${OP}_obj_ref_overlapped unverifiable "$OP object Overlapped::objVal\n\tpop" "class Overlapped"
911 #  ./make_unary_test.sh ${OP}_obj_overlapped_field_not_accessible unverifiable "$OP int32 Overlapped::publicIntVal\n\tpop" "class Overlapped"
912 done
913
914 #TODO: these tests are bogus, they need to be fixed
915 # Stfld tests (see 4.28)
916
917 ./make_unary_test.sh stfld_no_fld invalid "ldc.i4.0\n\tstfld int32 Class::invalid" "class Class"
918 ./make_unary_test.sh stfld_bad_obj unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" object
919 ./make_unary_test.sh stfld_obj_int32 unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" int32
920 ./make_unary_test.sh stfld_obj_int64 unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" int64
921 ./make_unary_test.sh stfld_obj_float64 unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" float64
922 ./make_unary_test.sh stfld_no_int invalid "stfld int32 Class::valid" "class Class"
923 ./make_unary_test.sh stfld_obj_native_int unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" 'native int'
924
925 # Box tests (see 4.1)
926
927 # Box non-existent type.
928 ./make_unary_test.sh box_bad_type unverifiable "box valuetype NonExistent\n\tpop" "valuetype NonExistent"
929
930 # Top of stack not assignment compatible with typeToc.
931 ./make_unary_test.sh box_not_compat unverifiable "box [mscorlib]System.Int32\n\tpop" float32
932
933 # Box byref type.
934 ./make_unary_test.sh box_byref invalid "box [mscorlib]System.Int32\&\n\tpop" 'int32&'
935
936 # Box byref-like type.
937 ./make_unary_test.sh box_byref_like unverifiable "box [mscorlib]System.TypedReference\n\tpop" typedref
938
939 #boxing between Int32 and IntPtr
940 ./make_unary_test.sh box_compat_1 valid "box [mscorlib]System.Int32\n\tpop" "native int"
941 ./make_unary_test.sh box_compat_2 valid "box [mscorlib]System.IntPtr\n\tpop" "int32"
942
943 #This is illegal since you cannot have a Void local variable, it should go into the structural tests part
944 # Box void type.
945 #./make_unary_test.sh box_void unverifiable "box [mscorlib]System.Void\n\tpop" "class [mscorlib]System.Void"
946
947
948
949
950
951 ./make_ret_test.sh ret_coercion_1 unverifiable int8 int64
952 ./make_ret_test.sh ret_coercion_2 unverifiable int8 float64
953 ./make_ret_test.sh ret_coercion_3 unverifiable int8 'int8&'
954 ./make_ret_test.sh ret_coercion_4 unverifiable int8 object
955
956 ./make_ret_test.sh ret_coercion_5 unverifiable 'unsigned int8' int64
957 ./make_ret_test.sh ret_coercion_6 unverifiable 'unsigned int8' float64
958 ./make_ret_test.sh ret_coercion_6 unverifiable 'unsigned int8' float64
959 ./make_ret_test.sh ret_coercion_6 unverifiable 'unsigned int8' float64
960 ./make_ret_test.sh ret_coercion_7 unverifiable 'unsigned int8' 'unsigned int8&'
961 ./make_ret_test.sh ret_coercion_8 unverifiable 'unsigned int8' object
962
963 ./make_ret_test.sh ret_coercion_9 unverifiable bool int64
964 ./make_ret_test.sh ret_coercion_10 unverifiable bool float64
965 ./make_ret_test.sh ret_coercion_11 unverifiable bool 'bool&'
966 ./make_ret_test.sh ret_coercion_12 unverifiable bool object
967
968 ./make_ret_test.sh ret_coercion_13 unverifiable int16 int64
969 ./make_ret_test.sh ret_coercion_14 unverifiable int16 float64
970 ./make_ret_test.sh ret_coercion_15 unverifiable int16 'int16&'
971 ./make_ret_test.sh ret_coercion_16 unverifiable int16 object
972   
973 ./make_ret_test.sh ret_coercion_17 unverifiable 'unsigned int16' int64
974 ./make_ret_test.sh ret_coercion_18 unverifiable 'unsigned int16' float64
975 ./make_ret_test.sh ret_coercion_19 unverifiable 'unsigned int16' 'unsigned int16&'
976 ./make_ret_test.sh ret_coercion_20 unverifiable 'unsigned int16' object
977   
978 ./make_ret_test.sh ret_coercion_21 unverifiable char int64
979 ./make_ret_test.sh ret_coercion_22 unverifiable char float64
980 ./make_ret_test.sh ret_coercion_23 unverifiable char 'char&'
981 ./make_ret_test.sh ret_coercion_24 unverifiable char object
982   
983 ./make_ret_test.sh ret_coercion_25 unverifiable int32 int64
984 ./make_ret_test.sh ret_coercion_26 unverifiable int32 float64
985 ./make_ret_test.sh ret_coercion_27 unverifiable int32 'int32&'
986 ./make_ret_test.sh ret_coercion_28 unverifiable int32 object
987   
988 ./make_ret_test.sh ret_coercion_29 unverifiable 'unsigned int32' int64
989 ./make_ret_test.sh ret_coercion_30 unverifiable 'unsigned int32' float64
990 ./make_ret_test.sh ret_coercion_31 unverifiable 'unsigned int32' 'unsigned int32&'
991 ./make_ret_test.sh ret_coercion_32 unverifiable 'unsigned int32' object
992  
993 ./make_ret_test.sh ret_coercion_33 unverifiable int64 int32
994 ./make_ret_test.sh ret_coercion_34 unverifiable int64 'native int'
995 ./make_ret_test.sh ret_coercion_35 unverifiable int64 float64
996 ./make_ret_test.sh ret_coercion_36 unverifiable int64 'int64&'
997 ./make_ret_test.sh ret_coercion_37 unverifiable int64 object
998   
999 ./make_ret_test.sh ret_coercion_38 unverifiable 'unsigned int64' int32
1000 ./make_ret_test.sh ret_coercion_39 unverifiable 'unsigned int64' 'native int'
1001 ./make_ret_test.sh ret_coercion_40 unverifiable 'unsigned int64' float64
1002 ./make_ret_test.sh ret_coercion_41 unverifiable 'unsigned int64' 'unsigned int64&'
1003 ./make_ret_test.sh ret_coercion_42 unverifiable 'unsigned int64' object
1004   
1005 ./make_ret_test.sh ret_coercion_43 unverifiable 'native int' int64
1006 ./make_ret_test.sh ret_coercion_44 unverifiable 'native int' float64
1007 ./make_ret_test.sh ret_coercion_45 unverifiable 'native int' 'native int&'
1008 ./make_ret_test.sh ret_coercion_46 unverifiable 'native int' object
1009   
1010 ./make_ret_test.sh ret_coercion_47 unverifiable 'native unsigned int' int64
1011 ./make_ret_test.sh ret_coercion_48 unverifiable 'native unsigned int' float64
1012 ./make_ret_test.sh ret_coercion_49 unverifiable 'native unsigned int' 'native unsigned int&'
1013 ./make_ret_test.sh ret_coercion_50 unverifiable 'native unsigned int' object
1014   
1015 ./make_ret_test.sh ret_coercion_51 unverifiable float32 int32
1016 ./make_ret_test.sh ret_coercion_52 unverifiable float32 'native int'
1017 ./make_ret_test.sh ret_coercion_53 unverifiable float32 int64
1018 ./make_ret_test.sh ret_coercion_54 unverifiable float32 'float32&'
1019 ./make_ret_test.sh ret_coercion_55 unverifiable float32 object
1020   
1021 ./make_ret_test.sh ret_coercion_56 unverifiable float64 int32
1022 ./make_ret_test.sh ret_coercion_57 unverifiable float64 'native int'
1023 ./make_ret_test.sh ret_coercion_58 unverifiable float64 int64
1024 ./make_ret_test.sh ret_coercion_59 unverifiable float64 'float64&'
1025 ./make_ret_test.sh ret_coercion_60 unverifiable float64 object
1026
1027 ./make_ret_test.sh ret_coercion_61 unverifiable object int32
1028 ./make_ret_test.sh ret_coercion_62 unverifiable object 'native int'
1029 ./make_ret_test.sh ret_coercion_63 unverifiable object int64
1030 ./make_ret_test.sh ret_coercion_64 unverifiable object float64
1031 ./make_ret_test.sh ret_coercion_65 unverifiable object 'object&'
1032   
1033 ./make_ret_test.sh ret_coercion_66 unverifiable 'class MyValueType' int32
1034 ./make_ret_test.sh ret_coercion_67 unverifiable 'class MyValueType' 'native int'
1035 ./make_ret_test.sh ret_coercion_68 unverifiable 'class MyValueType' int64
1036 ./make_ret_test.sh ret_coercion_69 unverifiable 'class MyValueType' float64
1037 ./make_ret_test.sh ret_coercion_70 unverifiable 'class MyValueType' 'class MyValueType&'
1038 ./make_ret_test.sh ret_coercion_71 unverifiable 'class MyValueType' object
1039   
1040 ./make_ret_test.sh ret_coercion_72 unverifiable 'int32&' int32
1041 ./make_ret_test.sh ret_coercion_73 unverifiable 'int32&' 'native int'
1042 ./make_ret_test.sh ret_coercion_74 unverifiable 'int32&' int64
1043 ./make_ret_test.sh ret_coercion_75 unverifiable 'int32&' float64
1044 ./make_ret_test.sh ret_coercion_76 unverifiable 'int32&' object
1045   
1046 ./make_ret_test.sh ret_coercion_77 unverifiable typedref int32
1047 ./make_ret_test.sh ret_coercion_78 unverifiable typedref 'native int'
1048 ./make_ret_test.sh ret_coercion_79 unverifiable typedref int64
1049 ./make_ret_test.sh ret_coercion_80 unverifiable typedref float64
1050 ./make_ret_test.sh ret_coercion_81 unverifiable typedref 'typedref&'
1051 ./make_ret_test.sh ret_coercion_82 unverifiable typedref object
1052
1053 ./make_ret_test.sh ret_coercion_83 valid int32 "native int"
1054 ./make_ret_test.sh ret_coercion_84 valid "native int" int32
1055 ./make_ret_test.sh ret_coercion_85 valid "unsigned int32" "native int"
1056 ./make_ret_test.sh ret_coercion_86 valid "native int" "unsigned int32"
1057 ./make_ret_test.sh ret_coercion_87 valid int32 "native unsigned int"
1058 ./make_ret_test.sh ret_coercion_88 valid "native unsigned int" int32
1059 ./make_ret_test.sh ret_coercion_89 valid "unsigned int32" "native int"
1060 ./make_ret_test.sh ret_coercion_90 valid "native unsigned int" "unsigned int32"
1061
1062 #type is unverifable
1063 ./make_ret_test.sh ret_coercion_100 unverifiable "int32*" "int32*"
1064 ./make_ret_test.sh ret_coercion_101 unverifiable "method int32* (int32)" "method int32* (int32)"
1065
1066 #typedbyref as parm is ok
1067 ./make_ret_test.sh ret_coercion_102 unverifiable int32 typedref
1068 ./make_ret_test.sh ret_coercion_103 unverifiable typedref int32
1069
1070 #unverifable return type: byref, typedbyref and ArgInterator
1071 ./make_ret_test.sh bad_ret_type_1 unverifiable typedref typedref
1072 ./make_ret_test.sh bad_ret_type_2 unverifiable "int32&" "int32&"
1073 ./make_ret_test.sh bad_ret_type_4 unverifiable "valuetype [mscorlib]System.ArgIterator" "valuetype [mscorlib]System.ArgIterator"
1074
1075
1076 ./make_ret_test.sh ret_sub_type valid ClassA ClassSubA
1077 ./make_ret_test.sh ret_same_type valid ClassA ClassA
1078 ./make_ret_test.sh ret_obj_iface valid object InterfaceA
1079 ./make_ret_test.sh ret_obj_obj valid object object
1080 ./make_ret_test.sh ret_obj_string valid object string
1081 ./make_ret_test.sh ret_string_string valid string string
1082 ./make_ret_test.sh ret_obj_vector valid object 'int32[]'
1083 ./make_ret_test.sh ret_obj_array valid object 'int32[,]'
1084 ./make_ret_test.sh ret_obj_generic valid object 'class Template`1<object>'
1085 ./make_ret_test.sh ret_obj_value_type unverifiable object 'MyValueType'
1086 ./make_ret_test.sh ret_string_value_type unverifiable string 'MyValueType'
1087 ./make_ret_test.sh ret_class_value_type unverifiable ClassA 'MyValueType'
1088
1089 ./make_ret_test.sh ret_string_string unverifiable string object
1090 ./make_ret_test.sh ret_string_string unverifiable 'int32[]' object
1091
1092 ./make_ret_test.sh ret_iface_imple valid InterfaceA ImplA
1093 ./make_ret_test.sh ret_arrays_same_vector valid 'int32[]' 'int32[]'
1094 ./make_ret_test.sh ret_arrays_same_rank valid 'int32[,]' 'int32[,]'
1095
1096 ./make_ret_test.sh ret_sub_type_array_covariant valid 'ClassA[]' 'ClassSubA[]'
1097 ./make_ret_test.sh ret_same_type_array_covariant valid 'ClassA[]' 'ClassA[]'
1098 ./make_ret_test.sh ret_obj_iface_array_covariant valid 'object[]' 'InterfaceA[]'
1099 ./make_ret_test.sh ret_iface_imple_array_covariant valid 'InterfaceA[]' 'ImplA[]'
1100
1101 ./make_ret_test.sh ret_diff_types unverifiable ClassA ClassB
1102 ./make_ret_test.sh ret_class_vale_type unverifiable ClassA MyValueType
1103 ./make_ret_test.sh ret_diff_vale_type unverifiable MyValueType2 MyValueType
1104 ./make_ret_test.sh ret_value_type_class unverifiable MyValueType ClassA
1105 ./make_ret_test.sh ret_super_type unverifiable ClassSubA ClassB
1106 ./make_ret_test.sh ret_interfaces unverifiable InterfaceA InterfaceB
1107 ./make_ret_test.sh ret_interface_class unverifiable ClassA InterfaceB
1108
1109 ./make_ret_test.sh ret_object_type valid object ClassA
1110 ./make_ret_test.sh ret_type_object unverifiable ClassA object
1111
1112
1113 ./make_ret_test.sh ret_array_diff_rank unverifiable 'int32[]' 'int32[,]'
1114 ./make_ret_test.sh ret_array_diff_rank2 unverifiable 'int32[,]' 'int32[]'
1115 ./make_ret_test.sh ret_array_diff_rank3 unverifiable 'int32[,,]' 'int32[,]'
1116 ./make_ret_test.sh ret_array_not_covar unverifiable 'ClassA[]' 'ClassB[]'
1117 ./make_ret_test.sh ret_array_not_covar2 unverifiable 'ClassSubA[]' 'ClassA[]'
1118 ./make_ret_test.sh ret_array_not_covar3 unverifiable 'ClassA[]' 'InterfaceA[]'
1119 ./make_ret_test.sh ret_array_not_covar4 unverifiable 'ImplA[]' 'InterfaceA[]'
1120 ./make_ret_test.sh ret_array_not_covar5 unverifiable 'InterfaceA[]' 'object[]'
1121
1122
1123 #generics tests
1124 ./make_ret_test.sh ret_generics_1 valid 'class Template' 'class Template'
1125 ./make_ret_test.sh ret_generics_2 valid 'class Template`1<int32>' 'class Template`1<int32>'
1126 ./make_ret_test.sh ret_generics_3 valid 'class Template`2<int32,object>' 'class Template`2<int32,object>'
1127
1128 ./make_ret_test.sh ret_generics_4 unverifiable 'class Template' 'class Template`1<object>'
1129 ./make_ret_test.sh ret_generics_5 unverifiable 'class Template`1<object>' 'class Template'
1130 ./make_ret_test.sh ret_generics_6 unverifiable 'class Template`1<object>' 'class Template`1<string>'
1131 ./make_ret_test.sh ret_generics_7 unverifiable 'class Template`1<string>' 'class Template`1<object>'
1132 ./make_ret_test.sh ret_generics_8 unverifiable 'class Template`1<object>' 'class Template`2<object, object>'
1133 ./make_ret_test.sh ret_generics_9 unverifiable 'class Template`2<object, object>' 'class Template`1<object>'
1134
1135 ./make_ret_test.sh ret_generics_10 unverifiable 'class Template`1<int32>' 'class Template`1<int16>'
1136 ./make_ret_test.sh ret_generics_11 unverifiable 'class Template`1<int16>' 'class Template`1<int32>'
1137 ./make_ret_test.sh ret_generics_12 unverifiable 'class Template`1<unsigned int32>' 'class Template`1<int32>'
1138 ./make_ret_test.sh ret_generics_13 unverifiable 'class Template`1<float32>' 'class Template`1<float64>'
1139 ./make_ret_test.sh ret_generics_14 unverifiable 'class Template`1<float64>' 'class Template`1<float32>'
1140
1141 #variance tests
1142 ./make_ret_test.sh ret_generics_15 valid 'class ICovariant`1<object>' 'class ICovariant`1<string>'
1143 ./make_ret_test.sh ret_generics_16 valid 'class ICovariant`1<string>' 'class ICovariant`1<string>'
1144 ./make_ret_test.sh ret_generics_17 unverifiable 'class ICovariant`1<string>' 'class ICovariant`1<object>'
1145
1146 ./make_ret_test.sh ret_generics_18 valid 'class IContravariant`1<string>' 'class IContravariant`1<object>'
1147 ./make_ret_test.sh ret_generics_19 valid 'class IContravariant`1<string>' 'class IContravariant`1<string>'
1148 ./make_ret_test.sh ret_generics_20 unverifiable 'class IContravariant`1<object>' 'class IContravariant`1<string>'
1149
1150 ./make_ret_test.sh ret_generics_21 valid 'class ICovariant`1<ClassA>' 'class ICovariant`1<ClassSubA>'
1151 ./make_ret_test.sh ret_generics_22 valid 'class ICovariant`1<ClassSubA>' 'class ICovariant`1<ClassSubA>'
1152 ./make_ret_test.sh ret_generics_23 unverifiable 'class ICovariant`1<ClassSubA>' 'class ICovariant`1<ClassA>'
1153
1154 ./make_ret_test.sh ret_generics_24 valid 'class IContravariant`1<ClassSubA>' 'class IContravariant`1<ClassA>'
1155 ./make_ret_test.sh ret_generics_25 valid 'class IContravariant`1<ClassSubA>' 'class IContravariant`1<ClassSubA>'
1156 ./make_ret_test.sh ret_generics_26 unverifiable 'class IContravariant`1<ClassA>' 'class IContravariant`1<ClassSubA>'
1157
1158
1159 ./make_ret_test.sh ret_generics_27 valid 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<ClassA, ClassB>'
1160 ./make_ret_test.sh ret_generics_28 valid 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<ClassA, object>'
1161 ./make_ret_test.sh ret_generics_29 valid 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<ClassSubA, ClassB>'
1162 ./make_ret_test.sh ret_generics_30 valid 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<ClassSubA, object>'
1163 ./make_ret_test.sh ret_generics_31 unverifiable 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<object, ClassB>'
1164 ./make_ret_test.sh ret_generics_32 unverifiable 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<object, object>'
1165 ./make_ret_test.sh ret_generics_33 unverifiable 'class Bivariant`2<ClassA, object>' 'class Bivariant`2<object, ClassB>'
1166 ./make_ret_test.sh ret_generics_34 unverifiable 'class Bivariant`2<ClassA, object>' 'class Bivariant`2<ClassA, ClassB>'
1167
1168 #mix parameter types
1169 ./make_ret_test.sh ret_generics_types_1 unverifiable 'class Template`1<int8>' 'class Template`1<unsigned int8>'
1170 ./make_ret_test.sh ret_generics_types_2 unverifiable 'class Template`1<int8>' 'class Template`1<int16>'
1171 ./make_ret_test.sh ret_generics_types_3 unverifiable 'class Template`1<int8>' 'class Template`1<unsigned int16>'
1172 ./make_ret_test.sh ret_generics_types_4 unverifiable 'class Template`1<int8>' 'class Template`1<int32>'
1173 ./make_ret_test.sh ret_generics_types_5 unverifiable 'class Template`1<int8>' 'class Template`1<unsigned int32>'
1174 ./make_ret_test.sh ret_generics_types_6 unverifiable 'class Template`1<int8>' 'class Template`1<int64>'
1175 ./make_ret_test.sh ret_generics_types_7 unverifiable 'class Template`1<int8>' 'class Template`1<unsigned int64>'
1176 ./make_ret_test.sh ret_generics_types_8 unverifiable 'class Template`1<int8>' 'class Template`1<float32>'
1177 ./make_ret_test.sh ret_generics_types_9 unverifiable 'class Template`1<int8>' 'class Template`1<float64>'
1178 ./make_ret_test.sh ret_generics_types_10 unverifiable 'class Template`1<int8>' 'class Template`1<bool>'
1179
1180 ./make_ret_test.sh ret_generics_types_11 unverifiable 'class Template`1<int8>' 'class Template`1<native int>'
1181 ./make_ret_test.sh ret_generics_types_12 unverifiable 'class Template`1<int8>' 'class Template`1<native unsigned int>'
1182 ./make_ret_test.sh ret_generics_types_13 unverifiable 'class Template`1<int8>' 'class Template`1<int32 *>'
1183
1184
1185 #inheritance tests
1186 ./make_ret_test.sh ret_generics_inheritante_1 valid 'class Base`1<int32>' 'class SubClass1`1<int32>'
1187 ./make_ret_test.sh ret_generics_inheritante_2 valid 'class SubClass1`1<int32>' 'class SubClass1`1<int32>'
1188 ./make_ret_test.sh ret_generics_inheritante_3 unverifiable 'class SubClass1`1<int32>' 'class Base`1<int32>'
1189 ./make_ret_test.sh ret_generics_inheritante_4 unverifiable 'class Base`1<int32>' 'class SubClass1`1<float32>'
1190 ./make_ret_test.sh ret_generics_inheritante_5 valid 'class Base`1<object>' 'class SubClass1`1<object>'
1191
1192 ./make_ret_test.sh ret_generics_inheritante_6 valid 'class BaseBase`2<int32, object>' 'class SubClass1`1<object>'
1193 ./make_ret_test.sh ret_generics_inheritante_7 valid 'class BaseBase`2<int32, object>' 'class Base`1<object>'
1194
1195 ./make_ret_test.sh ret_generics_inheritante_8 unverifiable 'class BaseBase`2<int64, object>' 'class Base`1<object>'
1196 ./make_ret_test.sh ret_generics_inheritante_9 unverifiable 'class BaseBase`2<int64, object>' 'class SubClass1`1<object>'
1197 ./make_ret_test.sh ret_generics_inheritante_10 unverifiable 'class BaseBase`2<int32, object>' 'class SubClass1`1<string>'
1198
1199 #interface tests
1200
1201 ./make_ret_test.sh ret_generics_inheritante_12 valid 'class Interface`1<int32>' 'class InterfaceImpl`1<int32>'
1202 ./make_ret_test.sh ret_generics_inheritante_13 valid 'class InterfaceImpl`1<int32>' 'class InterfaceImpl`1<int32>'
1203 ./make_ret_test.sh ret_generics_inheritante_14 unverifiable 'class InterfaceImpl`1<int32>' 'class Interface`1<int32>'
1204 ./make_ret_test.sh ret_generics_inheritante_15 unverifiable 'class Interface`1<int32>' 'class InterfaceImpl`1<float32>'
1205 ./make_ret_test.sh ret_generics_inheritante_16 valid 'class Interface`1<object>' 'class InterfaceImpl`1<object>'
1206
1207
1208 #mix variance with inheritance
1209 #only interfaces or delegates can have covariance
1210
1211 #mix variance with interfaces
1212
1213 ./make_ret_test.sh ret_generics_inheritante_28 valid 'class ICovariant`1<object>' 'class CovariantImpl`1<string>'
1214 ./make_ret_test.sh ret_generics_inheritante_29 valid 'class ICovariant`1<string>' 'class CovariantImpl`1<string>'
1215 ./make_ret_test.sh ret_generics_inheritante_30 unverifiable 'class ICovariant`1<string>' 'class CovariantImpl`1<object>'
1216
1217 ./make_ret_test.sh ret_generics_inheritante_31 valid 'class IContravariant`1<string>' 'class ContravariantImpl`1<object>'
1218 ./make_ret_test.sh ret_generics_inheritante_32 valid 'class IContravariant`1<string>' 'class ContravariantImpl`1<string>'
1219 ./make_ret_test.sh ret_generics_inheritante_33 unverifiable 'class IContravariant`1<object>' 'class ContravariantImpl`1<string>'
1220
1221 ./make_ret_test.sh ret_generics_inheritante_34 valid 'class ICovariant`1<ClassA>' 'class CovariantImpl`1<ClassSubA>'
1222 ./make_ret_test.sh ret_generics_inheritante_35 valid 'class ICovariant`1<ClassSubA>' 'class CovariantImpl`1<ClassSubA>'
1223 ./make_ret_test.sh ret_generics_inheritante_36 unverifiable 'class ICovariant`1<ClassSubA>' 'class CovariantImpl`1<ClassA>'
1224
1225 ./make_ret_test.sh ret_generics_inheritante_37 valid 'class IContravariant`1<ClassSubA>' 'class ContravariantImpl`1<ClassA>'
1226 ./make_ret_test.sh ret_generics_inheritante_38 valid 'class IContravariant`1<ClassSubA>' 'class ContravariantImpl`1<ClassSubA>'
1227 ./make_ret_test.sh ret_generics_inheritante_39 unverifiable 'class IContravariant`1<ClassA>' 'class ContravariantImpl`1<ClassSubA>'
1228
1229
1230 #mix variance with arrays
1231
1232 ./make_ret_test.sh ret_generics_arrays_1 valid 'class ICovariant`1<object>' 'class ICovariant`1<object[]>'
1233 ./make_ret_test.sh ret_generics_arrays_2 valid 'class ICovariant`1<object>' 'class ICovariant`1<int32[]>'
1234 ./make_ret_test.sh ret_generics_arrays_3 valid 'class ICovariant`1<object>' 'class ICovariant`1<int32[,]>'
1235 ./make_ret_test.sh ret_generics_arrays_4 valid 'class ICovariant`1<object>' 'class ICovariant`1<string[]>'
1236 ./make_ret_test.sh ret_generics_arrays_5 valid 'class ICovariant`1<object[]>' 'class ICovariant`1<string[]>'
1237 ./make_ret_test.sh ret_generics_arrays_6 valid 'class ICovariant`1<object[]>' 'class ICovariant`1<ClassA[]>'
1238 ./make_ret_test.sh ret_generics_arrays_7 valid 'class ICovariant`1<ClassA[]>' 'class ICovariant`1<ClassSubA[]>'
1239 ./make_ret_test.sh ret_generics_arrays_8 valid 'class ICovariant`1<InterfaceA[]>' 'class ICovariant`1<ImplA[]>'
1240 ./make_ret_test.sh ret_generics_arrays_9 valid 'class ICovariant`1<object[,]>' 'class ICovariant`1<string[,]>'
1241 ./make_ret_test.sh ret_generics_arrays_10 valid 'class ICovariant`1<ClassA[,]>' 'class ICovariant`1<ClassSubA[,]>'
1242
1243 ./make_ret_test.sh ret_generics_arrays_1_b valid 'class ICovariant`1<object>' 'class CovariantImpl`1<object[]>'
1244 ./make_ret_test.sh ret_generics_arrays_2_b valid 'class ICovariant`1<object>' 'class CovariantImpl`1<int32[]>'
1245 ./make_ret_test.sh ret_generics_arrays_3_b valid 'class ICovariant`1<object>' 'class CovariantImpl`1<int32[,]>'
1246 ./make_ret_test.sh ret_generics_arrays_4_b valid 'class ICovariant`1<object>' 'class ICovariant`1<string[]>'
1247 ./make_ret_test.sh ret_generics_arrays_5_b valid 'class ICovariant`1<object[]>' 'class CovariantImpl`1<string[]>'
1248 ./make_ret_test.sh ret_generics_arrays_6_b valid 'class ICovariant`1<object[]>' 'class CovariantImpl`1<ClassA[]>'
1249 ./make_ret_test.sh ret_generics_arrays_7_b valid 'class ICovariant`1<ClassA[]>' 'class CovariantImpl`1<ClassSubA[]>'
1250 ./make_ret_test.sh ret_generics_arrays_8_b valid 'class ICovariant`1<InterfaceA[]>' 'class CovariantImpl`1<ImplA[]>'
1251 ./make_ret_test.sh ret_generics_arrays_9_b valid 'class ICovariant`1<object[,]>' 'class CovariantImpl`1<string[,]>'
1252 ./make_ret_test.sh ret_generics_arrays_10_b valid 'class ICovariant`1<ClassA[,]>' 'class CovariantImpl`1<ClassSubA[,]>'
1253
1254 ./make_ret_test.sh ret_generics_arrays_11 valid 'class IContravariant`1<object[]>' 'class IContravariant`1<object>'
1255 ./make_ret_test.sh ret_generics_arrays_12 valid 'class IContravariant`1<int32[]>' 'class IContravariant`1<object>'
1256 ./make_ret_test.sh ret_generics_arrays_13 valid 'class IContravariant`1<int32[,]>' 'class IContravariant`1<object>'
1257 ./make_ret_test.sh ret_generics_arrays_14 valid 'class IContravariant`1<string[]>' 'class IContravariant`1<object>'
1258 ./make_ret_test.sh ret_generics_arrays_15 valid 'class IContravariant`1<string[]>' 'class IContravariant`1<object[]>'
1259 ./make_ret_test.sh ret_generics_arrays_16 valid 'class IContravariant`1<ClassA[]>' 'class IContravariant`1<object[]>'
1260 ./make_ret_test.sh ret_generics_arrays_17 valid 'class IContravariant`1<ClassSubA[]>' 'class IContravariant`1<ClassA[]>'
1261 ./make_ret_test.sh ret_generics_arrays_18 valid 'class IContravariant`1<ImplA[]>' 'class IContravariant`1<InterfaceA[]>'
1262 ./make_ret_test.sh ret_generics_arrays_19 valid 'class IContravariant`1<string[,]>' 'class IContravariant`1<object[,]>'
1263 ./make_ret_test.sh ret_generics_arrays_20 valid 'class IContravariant`1<ClassSubA[,]>' 'class IContravariant`1<ClassA[,]>'
1264
1265 ./make_ret_test.sh ret_generics_arrays_11_b valid 'class IContravariant`1<object[]>' 'class ContravariantImpl`1<object>'
1266 ./make_ret_test.sh ret_generics_arrays_12_b valid 'class IContravariant`1<int32[]>' 'class ContravariantImpl`1<object>'
1267 ./make_ret_test.sh ret_generics_arrays_13_b valid 'class IContravariant`1<int32[,]>' 'class ContravariantImpl`1<object>'
1268 ./make_ret_test.sh ret_generics_arrays_14_b valid 'class IContravariant`1<string[]>' 'class ContravariantImpl`1<object>'
1269 ./make_ret_test.sh ret_generics_arrays_15_b valid 'class IContravariant`1<string[]>' 'class ContravariantImpl`1<object[]>'
1270 ./make_ret_test.sh ret_generics_arrays_16_b valid 'class IContravariant`1<ClassA[]>' 'class ContravariantImpl`1<object[]>'
1271 ./make_ret_test.sh ret_generics_arrays_17_b valid 'class IContravariant`1<ClassSubA[]>' 'class ContravariantImpl`1<ClassA[]>'
1272 ./make_ret_test.sh ret_generics_arrays_18_b valid 'class IContravariant`1<ImplA[]>' 'class ContravariantImpl`1<InterfaceA[]>'
1273 ./make_ret_test.sh ret_generics_arrays_19_b valid 'class IContravariant`1<string[,]>' 'class ContravariantImpl`1<object[,]>'
1274 ./make_ret_test.sh ret_generics_arrays_20_b valid 'class IContravariant`1<ClassSubA[,]>' 'class ContravariantImpl`1<ClassA[,]>'
1275
1276 ./make_ret_test.sh ret_generics_arrays_21 unverifiable 'class ICovariant`1<int32[]>' 'class ICovariant`1<object>'
1277 ./make_ret_test.sh ret_generics_arrays_22 unverifiable 'class ICovariant`1<int32[]>' 'class ICovariant`1<object[]>'
1278 ./make_ret_test.sh ret_generics_arrays_23 unverifiable 'class ICovariant`1<string[]>' 'class ICovariant`1<object[]>'
1279 ./make_ret_test.sh ret_generics_arrays_24 unverifiable 'class ICovariant`1<ClassSubA[]>' 'class ICovariant`1<ClassA[]>'
1280 ./make_ret_test.sh ret_generics_arrays_25 unverifiable 'class ICovariant`1<int32[]>' 'class ICovariant`1<int32[,]>'
1281 ./make_ret_test.sh ret_generics_arrays_26 unverifiable 'class ICovariant`1<ImplA[]>' 'class ICovariant`1<InterfaceA[]>'
1282
1283 ./make_ret_test.sh ret_generics_arrays_27 unverifiable 'class IContravariant`1<object>' 'class IContravariant`1<int32[]>'
1284 ./make_ret_test.sh ret_generics_arrays_28 unverifiable 'class IContravariant`1<object[]>' 'class IContravariant`1<int32[]>'
1285 ./make_ret_test.sh ret_generics_arrays_29 unverifiable 'class IContravariant`1<object[]>' 'class IContravariant`1<string[]>'
1286 ./make_ret_test.sh ret_generics_arrays_30 unverifiable 'class IContravariant`1<ClassA[]>' 'class IContravariant`1<ClassSubA[]>'
1287 ./make_ret_test.sh ret_generics_arrays_31 unverifiable 'class IContravariant`1<int32[,]>' 'class IContravariant`1<int32[]>'
1288 ./make_ret_test.sh ret_generics_arrays_32 unverifiable 'class IContravariant`1<InterfaceA[]>' 'class IContravariant`1<ImplA[]>'
1289
1290
1291 #generic with value types
1292
1293 ./make_ret_test.sh ret_generics_vt_1 valid 'class Template`1<MyValueType>' 'class Template`1<MyValueType>'
1294 ./make_ret_test.sh ret_generics_vt_2 unverifiable 'class Template`1<MyValueType>' 'class Template`1<MyValueType2>'
1295 ./make_ret_test.sh ret_generics_vt_3 unverifiable 'class ICovariant`1<MyValueType>' 'class ICovariant`1<MyValueType2>'
1296 ./make_ret_test.sh ret_generics_vt_4 unverifiable 'class ICovariant`1<object>' 'class ICovariant`1<MyValueType2>'
1297
1298
1299 #mix variance and generic compatibility with all kinds of types valid for a generic parameter (hellish task - huge task)
1300 #test with composite generics ( Foo<Bar<int>> )
1301
1302 #test variance with delegates
1303 #generic methods
1304 #generic atributes
1305 #generic delegates
1306 #generic code
1307 #the verifier must check if the generic instantiation is valid
1308
1309 for OP in ldarg ldloc
1310 do
1311         ARGS_1='int32 V'
1312         LOCALS_1=''
1313         CALL_1='ldc.i4.0'
1314         SIG_1='int32'
1315         
1316         ARGS_2='int32 V, int32 V1'
1317         LOCALS_2=''
1318         CALL_2='ldc.i4.0\n\tldc.i4.0'
1319         SIG_2='int32, int32'
1320         
1321         ARGS_3='int32 V, int32 V1, int32 V1'
1322         LOCALS_3=''
1323         CALL_3='ldc.i4.0\n\tldc.i4.0\n\tldc.i4.0'
1324         SIG_3='int32, int32, int32'
1325         
1326         ARGS_4='int32 V, int32 V1, int32 V1, int32 V1'
1327         LOCALS_4=''
1328         CALL_4='ldc.i4.0\n\tldc.i4.0\n\tldc.i4.0\n\tldc.i4.0'
1329         SIG_4='int32, int32, int32, int32'
1330         MAX_PARAM_RESULT="unverifiable"
1331         POPS="pop\npop\npop\npop\npop\npop\npop\npop\n"
1332         
1333         if [ "$OP" == "ldloc" ]; then
1334                 MAX_PARAM_RESULT="invalid"
1335
1336                 LOCALS_1=$ARGS_1
1337                 ARGS_1=''
1338                 CALL_1=''
1339                 SIG_1=''
1340
1341                 LOCALS_2=$ARGS_2
1342                 ARGS_2=''
1343                 CALL_2=''
1344                 SIG_2=''
1345
1346                 LOCALS_3=$ARGS_3
1347                 ARGS_3=''
1348                 CALL_3=''
1349                 SIG_3=''
1350
1351                 LOCALS_4=$ARGS_4
1352                 ARGS_4=''
1353                 CALL_4=''
1354                 SIG_4=''
1355         fi;
1356         
1357         ./make_load_test.sh ${OP}0_max_params "${MAX_PARAM_RESULT}" "${OP}.0" '' '' '' ''
1358         ./make_load_test.sh ${OP}1_max_params "${MAX_PARAM_RESULT}" "${OP}.1" '' '' '' ''
1359         ./make_load_test.sh ${OP}2_max_params "${MAX_PARAM_RESULT}" "${OP}.2" '' '' '' ''
1360         ./make_load_test.sh ${OP}3_max_params "${MAX_PARAM_RESULT}" "${OP}.3" '' '' '' ''
1361         
1362         ./make_load_test.sh ${OP}1_1_max_params "${MAX_PARAM_RESULT}" "${OP}.1" "${ARGS_1}" "${LOCALS_1}" "${CALL_1}" "${SIG_1}"
1363         ./make_load_test.sh ${OP}2_1_max_params "${MAX_PARAM_RESULT}" "${OP}.2" "${ARGS_1}" "${LOCALS_1}" "${CALL_1}" "${SIG_1}"
1364         ./make_load_test.sh ${OP}3_1_max_params "${MAX_PARAM_RESULT}" "${OP}.3" "${ARGS_1}" "${LOCALS_1}" "${CALL_1}" "${SIG_1}"
1365         
1366         ./make_load_test.sh ${OP}2_2_max_params "${MAX_PARAM_RESULT}" "${OP}.2" "${ARGS_2}" "${LOCALS_2}" "${CALL_2}" "${SIG_2}"
1367         ./make_load_test.sh ${OP}3_2_max_params "${MAX_PARAM_RESULT}" "${OP}.3" "${ARGS_2}" "${LOCALS_2}" "${CALL_2}" "${SIG_2}"
1368         
1369         ./make_load_test.sh ${OP}3_3_max_params "${MAX_PARAM_RESULT}" "${OP}.3" "${ARGS_3}" "${LOCALS_3}" "${CALL_3}" "${SIG_3}"
1370         
1371         ./make_load_test.sh ${OP}0_max_params valid "${OP}.0" "${ARGS_1}" "${LOCALS_1}" "${CALL_1}" "${SIG_1}"
1372         ./make_load_test.sh ${OP}1_max_params valid "${OP}.1" "${ARGS_2}" "${LOCALS_2}" "${CALL_2}" "${SIG_2}"
1373         ./make_load_test.sh ${OP}2_max_params valid "${OP}.2" "${ARGS_3}" "${LOCALS_3}" "${CALL_3}" "${SIG_3}"
1374         ./make_load_test.sh ${OP}3_max_params valid "${OP}.3" "${ARGS_4}" "${LOCALS_4}" "${CALL_4}" "${SIG_4}"
1375         
1376         ./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}"
1377         ./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}"
1378         ./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}"
1379         ./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}"
1380 done
1381
1382 #Test if the values used for brtrue and brfalse are valid
1383 I=1
1384 for OP in brfalse brtrue 'brfalse.s' 'brtrue.s'
1385 do
1386         ./make_bool_branch_test.sh boolean_branch_${I}_1 valid ${OP} int8
1387         ./make_bool_branch_test.sh boolean_branch_${I}_2 valid ${OP} int16
1388         ./make_bool_branch_test.sh boolean_branch_${I}_3 valid ${OP} int32
1389         ./make_bool_branch_test.sh boolean_branch_${I}_4 valid ${OP} int64
1390         ./make_bool_branch_test.sh boolean_branch_${I}_5 valid ${OP} 'native int'
1391         
1392         #unmanaged pointers are not veriable types, all ops on unmanaged pointers are unverifiable
1393         ./make_bool_branch_test.sh boolean_branch_${I}_6 unverifiable ${OP} 'int32*'
1394         ./make_bool_branch_test.sh boolean_branch_${I}_8 unverifiable ${OP} 'method int32 *(int32)'
1395
1396         ./make_bool_branch_test.sh boolean_branch_${I}_7 valid ${OP} 'int32&'
1397         ./make_bool_branch_test.sh boolean_branch_${I}_9 valid ${OP} object
1398         ./make_bool_branch_test.sh boolean_branch_${I}_10 valid ${OP} string
1399         ./make_bool_branch_test.sh boolean_branch_${I}_11 valid ${OP} 'ClassA'
1400         ./make_bool_branch_test.sh boolean_branch_${I}_12 valid ${OP} 'int32[]'
1401         ./make_bool_branch_test.sh boolean_branch_${I}_13 valid ${OP} 'int32[,,]'
1402         ./make_bool_branch_test.sh boolean_branch_${I}_14 valid ${OP} 'class Template`1<object>'
1403         ./make_bool_branch_test.sh boolean_branch_${I}_15 valid ${OP} 'class Template`1<object>[]'
1404         ./make_bool_branch_test.sh boolean_branch_${I}_16 valid ${OP} 'class Template`1<object>[,,]'
1405         
1406         ./make_bool_branch_test.sh boolean_branch_${I}_17 unverifiable ${OP} float32
1407         ./make_bool_branch_test.sh boolean_branch_${I}_18 unverifiable ${OP} float64
1408         ./make_bool_branch_test.sh boolean_branch_${I}_19 unverifiable ${OP} 'class MyValueType'
1409         ./make_bool_branch_test.sh boolean_branch_${I}_20 unverifiable ${OP} 'class ValueTypeTemplate`1<object>'
1410         I=`expr $I + 1`
1411 done
1412
1413 #tests for field loading
1414 I=1
1415 for OP in 'ldfld' 'ldflda'
1416 do
1417         ./make_field_store_test.sh field_store_${I}_1 unverifiable "${OP} int32 ClassA::fld" int32 int32
1418         ./make_field_store_test.sh field_store_${I}_2 unverifiable "${OP} int32 ClassA::fld" int32 'class ClassB' yes
1419         ./make_field_store_test.sh field_store_${I}_3 unverifiable "${OP} int32 ClassA::fld" int32 object yes
1420         ./make_field_store_test.sh field_store_${I}_4 unverifiable "${OP} int32 ClassA::fld" int32 'class MyValueType'
1421         ./make_field_store_test.sh field_store_${I}_5 valid "${OP} int32 ClassA::fld" int32 'class ClassA' yes
1422         ./make_field_store_test.sh field_store_${I}_6 valid "${OP} int32 ClassA::fld" int32 'class SubClass' yes
1423         #ldfld and ldflda works different with value objects, you cannot take the address of a value-object on the stack
1424         #./make_field_store_test.sh field_store_${I}_7 valid "${OP} int32 MyValueType::fld" int32 'class MyValueType'
1425         #Not usefull as it throws NRE
1426         #./make_field_store_test.sh field_store_${I}_8 valid "${OP} int32 MyValueType::fld" int32 'class MyValueType \&'
1427         ./make_field_store_test.sh field_store_${I}_9 unverifiable "${OP} int32 MyValueType::fld" int32 'native int'
1428         ./make_field_store_test.sh field_store_${I}_10 unverifiable "${OP} int32 MyValueType::fld" int32 'class MyValueType *'
1429         ./make_field_store_test.sh field_store_${I}_11 unverifiable "${OP} int32 ClassA::fld" int32 'class ClassA *'
1430         #overlapped field tests should be done separatedly
1431         #./make_field_store_test.sh field_store_${I}_12 valid "${OP} int32 Overlapped::field1" int32 'class Overlapped' yes
1432         #./make_field_store_test.sh field_store_${I}_13 unverifiable "${OP} ClassA Overlapped::field1" 'class ClassA' 'class Overlapped' yes
1433         #./make_field_store_test.sh field_store_${I}_14 valid "${OP} int32 Overlapped::field1" int32 'class SubOverlapped' yes
1434         #./make_field_store_test.sh field_store_${I}_15 unverifiable "${OP} ClassA Overlapped::field1" 'class ClassA' 'class SubOverlapped' yes
1435         #./make_field_store_test.sh field_store_${I}_16 valid "${OP} int32 SubOverlapped::field6" int32 'class SubOverlapped' yes
1436         #./make_field_store_test.sh field_store_${I}_17 unverifiable "${OP} ClassA SubOverlapped::field6" 'class ClassA' 'class SubOverlapped' yes
1437         #./make_field_store_test.sh field_store_${I}_18 valid "${OP} int32 Overlapped::field10" int32 'class Overlapped' yes
1438         #./make_field_store_test.sh field_store_${I}_20 unverifiable "${OP} int32 Overlapped::field10" 'class ClassA' 'class Overlapped' yes
1439
1440         ./make_field_store_test.sh field_store_${I}_22 invalid "${OP} int32 ClassA::unknown_field" 'class ClassA' 'class ClassA' yes
1441         ./make_field_store_test.sh field_store_${I}_23 unverifiable "${OP} int32 ClassA::const_field" int32 'int32 \&'
1442
1443         ./make_field_store_test.sh field_store_${I}_24 valid "${OP} int32 ClassA::sfld" int32 'class ClassA' yes
1444         I=`expr $I + 1`
1445 done
1446
1447 ./make_field_store_test.sh field_store_2_25 unverifiable 'ldflda int32 ClassA::const_field' int32 'class ClassA'
1448
1449 #tests form static field loading
1450 I=1
1451 for OP in 'ldsfld' 'ldsflda'
1452 do
1453         #unknown field
1454         ./make_field_store_test.sh static_field_store_${I}_1 invalid "${OP} int32 ClassA::unknown_field\n\tpop" 'class ClassA' 'class ClassA'
1455         #non static field
1456         ./make_field_store_test.sh static_field_store_${I}_2 invalid "${OP} int32 ClassA::fld\n\tpop" 'class ClassA' 'class ClassA'
1457         #valid
1458         ./make_field_store_test.sh static_field_store_${I}_3 valid "${OP} ClassA ClassA::sfld\n\tpop" 'class ClassA' 'class ClassA'
1459         I=`expr $I + 1`
1460 done
1461
1462 ./make_field_store_test.sh static_field_store_2_25 unverifiable 'ldsflda int32 ClassA::st_const_field\n\tpop' int32 'class ClassA'
1463
1464
1465 #stfld with null values
1466 ./make_field_store_test.sh field_store_null_value valid "ldnull\n\tstfld string ClassA::fld\n\tldc.i4.0" 'string' 'class ClassA' yes
1467 ./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
1468
1469
1470 ./make_field_valuetype_test.sh value_type_field_load_1 valid 'ldfld int32 MyValueType::fld' 'ldloc.0'
1471 ./make_field_valuetype_test.sh value_type_field_load_2 unverifiable 'ldflda int32 MyValueType::fld' 'ldloc.0'
1472 ./make_field_valuetype_test.sh value_type_field_load_3 valid 'ldfld int32 MyValueType::fld' 'ldloca.s 0'
1473 ./make_field_valuetype_test.sh value_type_field_load_4 valid 'ldflda int32 MyValueType::fld' 'ldloca.s 0'
1474
1475 ./make_field_valuetype_test.sh value_type_field_load_1 valid 'ldfld int32 MyValueType::fld' 'ldloc.1'
1476 ./make_field_valuetype_test.sh value_type_field_load_2 valid 'ldflda int32 MyValueType::fld' 'ldloc.1'
1477 ./make_field_valuetype_test.sh value_type_field_load_3 unverifiable 'ldfld int32 MyValueType::fld' 'ldloca.s 1'
1478 ./make_field_valuetype_test.sh value_type_field_load_4 unverifiable 'ldflda int32 MyValueType::fld' 'ldloca.s 1'
1479
1480
1481
1482 #Tests for access checks
1483 #TODO tests with static calls
1484 #TODO tests with multiple assemblies, involving friend assemblies, with and without matching public key
1485
1486 I=1
1487 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"
1488 do
1489         ./make_nested_access_test.sh nested_access_check_1_${I} valid "$OP" public public no
1490         ./make_nested_access_test.sh nested_access_check_2_${I} valid "$OP" public public yes
1491         ./make_nested_access_test.sh nested_access_check_3_${I} unverifiable "$OP" public private no
1492         ./make_nested_access_test.sh nested_access_check_4_${I} unverifiable "$OP" public private yes
1493         ./make_nested_access_test.sh nested_access_check_5_${I} unverifiable "$OP" public family no
1494         ./make_nested_access_test.sh nested_access_check_6_${I} unverifiable "$OP" public family yes
1495         ./make_nested_access_test.sh nested_access_check_7_${I} valid "$OP" public assembly no
1496         ./make_nested_access_test.sh nested_access_check_8_${I} valid "$OP" public assembly yes
1497         ./make_nested_access_test.sh nested_access_check_9_${I} unverifiable "$OP" public famandassem no
1498         ./make_nested_access_test.sh nested_access_check_a_${I} unverifiable "$OP" public famandassem yes
1499         ./make_nested_access_test.sh nested_access_check_b_${I} valid "$OP" public famorassem no
1500         ./make_nested_access_test.sh nested_access_check_c_${I} valid "$OP" public famorassem yes
1501
1502         ./make_nested_access_test.sh nested_access_check_11_${I} unverifiable "$OP" private public no
1503         ./make_nested_access_test.sh nested_access_check_12_${I} unverifiable "$OP" private public yes
1504         ./make_nested_access_test.sh nested_access_check_13_${I} unverifiable "$OP" private private no
1505         ./make_nested_access_test.sh nested_access_check_14_${I} unverifiable "$OP" private private yes
1506         ./make_nested_access_test.sh nested_access_check_15_${I} unverifiable "$OP" private family no
1507         ./make_nested_access_test.sh nested_access_check_16_${I} unverifiable "$OP" private family yes
1508         ./make_nested_access_test.sh nested_access_check_17_${I} unverifiable "$OP" private assembly no
1509         ./make_nested_access_test.sh nested_access_check_18_${I} unverifiable "$OP" private assembly yes
1510         ./make_nested_access_test.sh nested_access_check_19_${I} unverifiable "$OP" private famandassem no
1511         ./make_nested_access_test.sh nested_access_check_1a_${I} unverifiable "$OP" private famandassem yes
1512         ./make_nested_access_test.sh nested_access_check_1b_${I} unverifiable "$OP" private famorassem no
1513         ./make_nested_access_test.sh nested_access_check_1c_${I} unverifiable "$OP" private famorassem yes
1514
1515         ./make_nested_access_test.sh nested_access_check_21_${I} unverifiable "$OP" family public no
1516         ./make_nested_access_test.sh nested_access_check_22_${I} valid "$OP" family public yes
1517         ./make_nested_access_test.sh nested_access_check_23_${I} unverifiable "$OP" family private no
1518         ./make_nested_access_test.sh nested_access_check_24_${I} unverifiable "$OP" family private yes
1519         ./make_nested_access_test.sh nested_access_check_25_${I} unverifiable "$OP" family family no
1520         ./make_nested_access_test.sh nested_access_check_26_${I} unverifiable "$OP" family family yes
1521         ./make_nested_access_test.sh nested_access_check_27_${I} unverifiable "$OP" family assembly no
1522         ./make_nested_access_test.sh nested_access_check_28_${I} valid "$OP" family assembly yes
1523         ./make_nested_access_test.sh nested_access_check_29_${I} unverifiable "$OP" family famandassem no
1524         ./make_nested_access_test.sh nested_access_check_2a_${I} unverifiable "$OP" family famandassem yes
1525         ./make_nested_access_test.sh nested_access_check_2b_${I} unverifiable "$OP" family famorassem no
1526         ./make_nested_access_test.sh nested_access_check_2c_${I} valid "$OP" family famorassem yes
1527
1528         ./make_nested_access_test.sh nested_access_check_31_${I} valid "$OP" assembly public no
1529         ./make_nested_access_test.sh nested_access_check_32_${I} valid "$OP" assembly public yes
1530         ./make_nested_access_test.sh nested_access_check_33_${I} unverifiable "$OP" assembly private no
1531         ./make_nested_access_test.sh nested_access_check_34_${I} unverifiable "$OP" assembly private yes
1532         ./make_nested_access_test.sh nested_access_check_35_${I} unverifiable "$OP" assembly family no
1533         ./make_nested_access_test.sh nested_access_check_36_${I} unverifiable "$OP" assembly family yes
1534         ./make_nested_access_test.sh nested_access_check_37_${I} valid "$OP" assembly assembly no
1535         ./make_nested_access_test.sh nested_access_check_38_${I} valid "$OP" assembly assembly yes
1536         ./make_nested_access_test.sh nested_access_check_39_${I} unverifiable "$OP" assembly famandassem no
1537         ./make_nested_access_test.sh nested_access_check_3a_${I} unverifiable "$OP" assembly famandassem yes
1538         ./make_nested_access_test.sh nested_access_check_3b_${I} valid "$OP" assembly famorassem no
1539         ./make_nested_access_test.sh nested_access_check_3c_${I} valid "$OP" assembly famorassem yes
1540
1541         ./make_nested_access_test.sh nested_access_check_41_${I} unverifiable "$OP" famandassem public no
1542         ./make_nested_access_test.sh nested_access_check_42_${I} valid "$OP" famandassem public yes
1543         ./make_nested_access_test.sh nested_access_check_43_${I} unverifiable "$OP" famandassem private no
1544         ./make_nested_access_test.sh nested_access_check_44_${I} unverifiable "$OP" famandassem private yes
1545         ./make_nested_access_test.sh nested_access_check_45_${I} unverifiable "$OP" famandassem family no
1546         ./make_nested_access_test.sh nested_access_check_46_${I} unverifiable "$OP" famandassem family yes
1547         ./make_nested_access_test.sh nested_access_check_47_${I} unverifiable "$OP" famandassem assembly no
1548         ./make_nested_access_test.sh nested_access_check_48_${I} valid "$OP" famandassem assembly yes
1549         ./make_nested_access_test.sh nested_access_check_49_${I} unverifiable "$OP" famandassem famandassem no
1550         ./make_nested_access_test.sh nested_access_check_4a_${I} unverifiable "$OP" famandassem famandassem yes
1551         ./make_nested_access_test.sh nested_access_check_4b_${I} unverifiable "$OP" famandassem famorassem no
1552         ./make_nested_access_test.sh nested_access_check_4c_${I} valid "$OP" famandassem famorassem yes
1553
1554         ./make_nested_access_test.sh nested_access_check_51_${I} valid "$OP" famorassem public no
1555         ./make_nested_access_test.sh nested_access_check_52_${I} valid "$OP" famorassem public yes
1556         ./make_nested_access_test.sh nested_access_check_53_${I} unverifiable "$OP" famorassem private no
1557         ./make_nested_access_test.sh nested_access_check_54_${I} unverifiable "$OP" famorassem private yes
1558         ./make_nested_access_test.sh nested_access_check_55_${I} unverifiable "$OP" famorassem family no
1559         ./make_nested_access_test.sh nested_access_check_56_${I} unverifiable "$OP" famorassem family yes
1560         ./make_nested_access_test.sh nested_access_check_57_${I} valid "$OP" famorassem assembly no
1561         ./make_nested_access_test.sh nested_access_check_58_${I} valid "$OP" famorassem assembly yes
1562         ./make_nested_access_test.sh nested_access_check_59_${I} unverifiable "$OP" famorassem famandassem no
1563         ./make_nested_access_test.sh nested_access_check_5a_${I} unverifiable "$OP" famorassem famandassem yes
1564         ./make_nested_access_test.sh nested_access_check_5b_${I} valid "$OP" famorassem famorassem no
1565         ./make_nested_access_test.sh nested_access_check_5c_${I} valid "$OP" famorassem famorassem yes
1566         I=`expr $I + 1`
1567 done
1568
1569 #Tests for accessing an owned nested type
1570 I=1
1571 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"
1572 do
1573         ./make_self_nested_test.sh self_nested_access_check_1_${I} valid "$OP" public public
1574         ./make_self_nested_test.sh self_nested_access_check_2_${I} unverifiable "$OP" public private
1575         ./make_self_nested_test.sh self_nested_access_check_3_${I} unverifiable "$OP" public family
1576         ./make_self_nested_test.sh self_nested_access_check_4_${I} valid "$OP" public assembly
1577         ./make_self_nested_test.sh self_nested_access_check_5_${I} unverifiable "$OP" public famandassem
1578         ./make_self_nested_test.sh self_nested_access_check_6_${I} valid "$OP" public famorassem
1579
1580         ./make_self_nested_test.sh self_nested_access_check_7_${I} valid "$OP" private public
1581         ./make_self_nested_test.sh self_nested_access_check_8_${I} unverifiable "$OP" private private
1582         ./make_self_nested_test.sh self_nested_access_check_9_${I} unverifiable "$OP" private family
1583         ./make_self_nested_test.sh self_nested_access_check_10_${I} valid "$OP" private assembly
1584         ./make_self_nested_test.sh self_nested_access_check_11_${I} unverifiable "$OP" private famandassem
1585         ./make_self_nested_test.sh self_nested_access_check_12_${I} valid "$OP" private famorassem
1586
1587         ./make_self_nested_test.sh self_nested_access_check_13_${I} valid "$OP" family public
1588         ./make_self_nested_test.sh self_nested_access_check_14_${I} unverifiable "$OP" family private
1589         ./make_self_nested_test.sh self_nested_access_check_15_${I} unverifiable "$OP" family family
1590         ./make_self_nested_test.sh self_nested_access_check_16_${I} valid "$OP" family assembly
1591         ./make_self_nested_test.sh self_nested_access_check_17_${I} unverifiable "$OP" family famandassem
1592         ./make_self_nested_test.sh self_nested_access_check_18_${I} valid "$OP" family famorassem
1593
1594         ./make_self_nested_test.sh self_nested_access_check_19_${I} valid "$OP" assembly public
1595         ./make_self_nested_test.sh self_nested_access_check_20_${I} unverifiable "$OP" assembly private
1596         ./make_self_nested_test.sh self_nested_access_check_21_${I} unverifiable "$OP" assembly family
1597         ./make_self_nested_test.sh self_nested_access_check_22_${I} valid "$OP" assembly assembly
1598         ./make_self_nested_test.sh self_nested_access_check_23_${I} unverifiable "$OP" assembly famandassem
1599         ./make_self_nested_test.sh self_nested_access_check_24_${I} valid "$OP" assembly famorassem
1600
1601         ./make_self_nested_test.sh self_nested_access_check_25_${I} valid "$OP" famandassem public
1602         ./make_self_nested_test.sh self_nested_access_check_26_${I} unverifiable "$OP" famandassem private
1603         ./make_self_nested_test.sh self_nested_access_check_27_${I} unverifiable "$OP" famandassem family
1604         ./make_self_nested_test.sh self_nested_access_check_28_${I} valid "$OP" famandassem assembly
1605         ./make_self_nested_test.sh self_nested_access_check_29_${I} valid "$unverifiable" famandassem famandassem
1606         ./make_self_nested_test.sh self_nested_access_check_30_${I} valid "$OP" famandassem famorassem
1607
1608         ./make_self_nested_test.sh self_nested_access_check_31_${I} valid "$OP" famorassem public
1609         ./make_self_nested_test.sh self_nested_access_check_32_${I} unverifiable "$OP" famorassem private
1610         ./make_self_nested_test.sh self_nested_access_check_33_${I} unverifiable "$OP" famorassem family
1611         ./make_self_nested_test.sh self_nested_access_check_34_${I} valid "$OP" famorassem assembly
1612         ./make_self_nested_test.sh self_nested_access_check_35_${I} unverifiable "$OP" famorassem famandassem
1613         ./make_self_nested_test.sh self_nested_access_check_36_${I} valid "$OP" famorassem famorassem
1614         I=`expr $I + 1`
1615 done
1616
1617
1618 I=1
1619 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"
1620 do
1621         ./make_cross_nested_access_test.sh cross_nested_access_check_1_${I} valid "$OP" public public no
1622         ./make_cross_nested_access_test.sh cross_nested_access_check_2_${I} valid "$OP" public public yes
1623         ./make_cross_nested_access_test.sh cross_nested_access_check_3_${I} unverifiable "$OP" public private no
1624         ./make_cross_nested_access_test.sh cross_nested_access_check_4_${I} unverifiable "$OP" public private yes
1625         ./make_cross_nested_access_test.sh cross_nested_access_check_5_${I} unverifiable "$OP" public family no
1626         ./make_cross_nested_access_test.sh cross_nested_access_check_7_${I} valid "$OP" public assembly no
1627         ./make_cross_nested_access_test.sh cross_nested_access_check_8_${I} valid "$OP" public assembly yes
1628         ./make_cross_nested_access_test.sh cross_nested_access_check_9_${I} unverifiable "$OP" public famandassem no
1629         ./make_cross_nested_access_test.sh cross_nested_access_check_b_${I} valid "$OP" public famorassem no
1630         ./make_cross_nested_access_test.sh cross_nested_access_check_c_${I} valid "$OP" public famorassem yes
1631
1632         ./make_cross_nested_access_test.sh cross_nested_access_check_11_${I} valid "$OP" private public no
1633         ./make_cross_nested_access_test.sh cross_nested_access_check_12_${I} valid "$OP" private public yes
1634         ./make_cross_nested_access_test.sh cross_nested_access_check_13_${I} unverifiable "$OP" private private no
1635         ./make_cross_nested_access_test.sh cross_nested_access_check_14_${I} unverifiable "$OP" private private yes
1636         ./make_cross_nested_access_test.sh cross_nested_access_check_15_${I} unverifiable "$OP" private family no
1637         ./make_cross_nested_access_test.sh cross_nested_access_check_17_${I} valid "$OP" private assembly no
1638         ./make_cross_nested_access_test.sh cross_nested_access_check_18_${I} valid "$OP" private assembly yes
1639         ./make_cross_nested_access_test.sh cross_nested_access_check_19_${I} unverifiable "$OP" private famandassem no
1640         ./make_cross_nested_access_test.sh cross_nested_access_check_1b_${I} valid "$OP" private famorassem no
1641         ./make_cross_nested_access_test.sh cross_nested_access_check_1c_${I} valid "$OP" private famorassem yes
1642
1643         ./make_cross_nested_access_test.sh cross_nested_access_check_21_${I} valid "$OP" family public no
1644         ./make_cross_nested_access_test.sh cross_nested_access_check_22_${I} valid "$OP" family public yes
1645         ./make_cross_nested_access_test.sh cross_nested_access_check_23_${I} unverifiable "$OP" family private no
1646         ./make_cross_nested_access_test.sh cross_nested_access_check_24_${I} unverifiable "$OP" family private yes
1647         ./make_cross_nested_access_test.sh cross_nested_access_check_25_${I} unverifiable "$OP" family family no
1648         ./make_cross_nested_access_test.sh cross_nested_access_check_27_${I} valid "$OP" family assembly no
1649         ./make_cross_nested_access_test.sh cross_nested_access_check_28_${I} valid "$OP" family assembly yes
1650         ./make_cross_nested_access_test.sh cross_nested_access_check_29_${I} unverifiable "$OP" family famandassem no
1651         ./make_cross_nested_access_test.sh cross_nested_access_check_2b_${I} valid "$OP" family famorassem no
1652         ./make_cross_nested_access_test.sh cross_nested_access_check_2c_${I} valid "$OP" family famorassem yes
1653
1654         ./make_cross_nested_access_test.sh cross_nested_access_check_31_${I} valid "$OP" assembly public no
1655         ./make_cross_nested_access_test.sh cross_nested_access_check_32_${I} valid "$OP" assembly public yes
1656         ./make_cross_nested_access_test.sh cross_nested_access_check_33_${I} unverifiable "$OP" assembly private no
1657         ./make_cross_nested_access_test.sh cross_nested_access_check_34_${I} unverifiable "$OP" assembly private yes
1658         ./make_cross_nested_access_test.sh cross_nested_access_check_35_${I} unverifiable "$OP" assembly family no
1659         ./make_cross_nested_access_test.sh cross_nested_access_check_37_${I} valid "$OP" assembly assembly no
1660         ./make_cross_nested_access_test.sh cross_nested_access_check_38_${I} valid "$OP" assembly assembly yes
1661         ./make_cross_nested_access_test.sh cross_nested_access_check_39_${I} unverifiable "$OP" assembly famandassem no
1662         ./make_cross_nested_access_test.sh cross_nested_access_check_3b_${I} valid "$OP" assembly famorassem no
1663         ./make_cross_nested_access_test.sh cross_nested_access_check_3c_${I} valid "$OP" assembly famorassem yes
1664
1665         ./make_cross_nested_access_test.sh cross_nested_access_check_41_${I} valid "$OP" famandassem public no
1666         ./make_cross_nested_access_test.sh cross_nested_access_check_42_${I} valid "$OP" famandassem public yes
1667         ./make_cross_nested_access_test.sh cross_nested_access_check_43_${I} unverifiable "$OP" famandassem private no
1668         ./make_cross_nested_access_test.sh cross_nested_access_check_44_${I} unverifiable "$OP" famandassem private yes
1669         ./make_cross_nested_access_test.sh cross_nested_access_check_45_${I} unverifiable "$OP" famandassem family no
1670         ./make_cross_nested_access_test.sh cross_nested_access_check_47_${I} valid "$OP" famandassem assembly no
1671         ./make_cross_nested_access_test.sh cross_nested_access_check_48_${I} valid "$OP" famandassem assembly yes
1672         ./make_cross_nested_access_test.sh cross_nested_access_check_49_${I} unverifiable "$OP" famandassem famandassem no
1673         ./make_cross_nested_access_test.sh cross_nested_access_check_4b_${I} valid "$OP" famandassem famorassem no
1674         ./make_cross_nested_access_test.sh cross_nested_access_check_4c_${I} valid "$OP" famandassem famorassem yes
1675
1676         ./make_cross_nested_access_test.sh cross_nested_access_check_51_${I} valid "$OP" famorassem public no
1677         ./make_cross_nested_access_test.sh cross_nested_access_check_52_${I} valid "$OP" famorassem public yes
1678         ./make_cross_nested_access_test.sh cross_nested_access_check_53_${I} unverifiable "$OP" famorassem private no
1679         ./make_cross_nested_access_test.sh cross_nested_access_check_54_${I} unverifiable "$OP" famorassem private yes
1680         ./make_cross_nested_access_test.sh cross_nested_access_check_55_${I} unverifiable "$OP" famorassem family no
1681         ./make_cross_nested_access_test.sh cross_nested_access_check_57_${I} valid "$OP" famorassem assembly no
1682         ./make_cross_nested_access_test.sh cross_nested_access_check_58_${I} valid "$OP" famorassem assembly yes
1683         ./make_cross_nested_access_test.sh cross_nested_access_check_59_${I} unverifiable "$OP" famorassem famandassem no
1684         ./make_cross_nested_access_test.sh cross_nested_access_check_5b_${I} valid "$OP" famorassem famorassem no
1685         ./make_cross_nested_access_test.sh cross_nested_access_check_5c_${I} valid "$OP" famorassem famorassem yes
1686         I=`expr $I + 1`
1687 done
1688
1689
1690 I=1
1691 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"
1692 do
1693         ./make_cross_nested_access_test.sh cross_nested_access_check_2a_${I} valid "$OP" public public yes yes
1694         ./make_cross_nested_access_test.sh cross_nested_access_check_4a_${I} unverifiable "$OP" public private yes yes
1695         ./make_cross_nested_access_test.sh cross_nested_access_check_8a_${I} valid "$OP" public assembly yes yes
1696         ./make_cross_nested_access_test.sh cross_nested_access_check_ca_${I} valid "$OP" public famorassem yes yes
1697
1698         ./make_cross_nested_access_test.sh cross_nested_access_check_12a_${I} valid "$OP" private public yes yes
1699         ./make_cross_nested_access_test.sh cross_nested_access_check_14a_${I} unverifiable "$OP" private private yes yes
1700         ./make_cross_nested_access_test.sh cross_nested_access_check_18a_${I} valid "$OP" private assembly yes yes
1701         ./make_cross_nested_access_test.sh cross_nested_access_check_1ca_${I} valid "$OP" private famorassem yes yes
1702
1703         ./make_cross_nested_access_test.sh cross_nested_access_check_22a_${I} valid "$OP" family public yes yes
1704         ./make_cross_nested_access_test.sh cross_nested_access_check_24a_${I} unverifiable "$OP" family private yes yes
1705         ./make_cross_nested_access_test.sh cross_nested_access_check_28a_${I} valid "$OP" family assembly yes yes
1706         ./make_cross_nested_access_test.sh cross_nested_access_check_2ca_${I} valid "$OP" family famorassem yes yes
1707
1708         ./make_cross_nested_access_test.sh cross_nested_access_check_32a_${I} valid "$OP" assembly public yes yes
1709         ./make_cross_nested_access_test.sh cross_nested_access_check_34a_${I} unverifiable "$OP" assembly private yes yes
1710         ./make_cross_nested_access_test.sh cross_nested_access_check_38a_${I} valid "$OP" assembly assembly yes yes
1711         ./make_cross_nested_access_test.sh cross_nested_access_check_3ca_${I} valid "$OP" assembly famorassem yes yes
1712
1713         ./make_cross_nested_access_test.sh cross_nested_access_check_42a_${I} valid "$OP" famandassem public yes yes
1714         ./make_cross_nested_access_test.sh cross_nested_access_check_44a_${I} unverifiable "$OP" famandassem private yes yes
1715         ./make_cross_nested_access_test.sh cross_nested_access_check_48a_${I} valid "$OP" famandassem assembly yes yes
1716         ./make_cross_nested_access_test.sh cross_nested_access_check_4ca_${I} valid "$OP" famandassem famorassem yes yes
1717
1718         ./make_cross_nested_access_test.sh cross_nested_access_check_52a_${I} valid "$OP" famorassem public yes yes
1719         ./make_cross_nested_access_test.sh cross_nested_access_check_54a_${I} unverifiable "$OP" famorassem private yes yes
1720         ./make_cross_nested_access_test.sh cross_nested_access_check_58a_${I} valid "$OP" famorassem assembly yes yes
1721         ./make_cross_nested_access_test.sh cross_nested_access_check_5ca_${I} valid "$OP" famorassem famorassem yes yes
1722         I=`expr $I + 1`
1723 done
1724
1725
1726 I=1
1727 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"
1728 do
1729         ./make_cross_nested_access_test.sh cross_nested_access_check_6_${I} unverifiable "$OP" public family yes
1730         ./make_cross_nested_access_test.sh cross_nested_access_check_6a_${I} valid "$OP" public family yes yes
1731         ./make_cross_nested_access_test.sh cross_nested_access_check_a_${I} unverifiable "$OP" public famandassem yes
1732         ./make_cross_nested_access_test.sh cross_nested_access_check_aa_${I} valid "$OP" public famandassem yes yes
1733
1734         ./make_cross_nested_access_test.sh cross_nested_access_check_16_${I} unverifiable "$OP" private family yes
1735         ./make_cross_nested_access_test.sh cross_nested_access_check_16a_${I} valid "$OP" private family yes yes
1736         ./make_cross_nested_access_test.sh cross_nested_access_check_1a_${I} unverifiable "$OP" private famandassem yes
1737         ./make_cross_nested_access_test.sh cross_nested_access_check_1aa_${I} valid "$OP" private famandassem yes yes
1738
1739         ./make_cross_nested_access_test.sh cross_nested_access_check_26_${I} unverifiable "$OP" family family yes
1740         ./make_cross_nested_access_test.sh cross_nested_access_check_26a_${I} valid "$OP" family family yes yes
1741         ./make_cross_nested_access_test.sh cross_nested_access_check_2a_${I} unverifiable "$OP" family famandassem yes
1742         ./make_cross_nested_access_test.sh cross_nested_access_check_2aa_${I} valid "$OP" family famandassem yes yes
1743
1744         ./make_cross_nested_access_test.sh cross_nested_access_check_36_${I} unverifiable "$OP" assembly family yes
1745         ./make_cross_nested_access_test.sh cross_nested_access_check_36a_${I} valid "$OP" assembly family yes yes
1746         ./make_cross_nested_access_test.sh cross_nested_access_check_3a_${I} unverifiable "$OP" assembly famandassem yes
1747         ./make_cross_nested_access_test.sh cross_nested_access_check_3aa_${I} valid "$OP" assembly famandassem yes yes
1748
1749         ./make_cross_nested_access_test.sh cross_nested_access_check_46_${I} unverifiable "$OP" famandassem family yes
1750         ./make_cross_nested_access_test.sh cross_nested_access_check_46a_${I} valid "$OP" famandassem family yes yes
1751         ./make_cross_nested_access_test.sh cross_nested_access_check_4a_${I} unverifiable "$OP" famandassem famandassem yes
1752         ./make_cross_nested_access_test.sh cross_nested_access_check_4aa_${I} valid "$OP" famandassem famandassem yes yes
1753
1754         ./make_cross_nested_access_test.sh cross_nested_access_check_56_${I} unverifiable "$OP" famorassem family yes
1755         ./make_cross_nested_access_test.sh cross_nested_access_check_56a_${I} valid "$OP" famorassem family yes yes
1756         ./make_cross_nested_access_test.sh cross_nested_access_check_5a_${I} unverifiable "$OP" famorassem famandassem yes
1757         ./make_cross_nested_access_test.sh cross_nested_access_check_5aa_${I} valid "$OP" famorassem famandassem yes yes
1758
1759         I=`expr $I + 1`
1760 done
1761
1762 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"
1763 do
1764         ./make_cross_nested_access_test.sh cross_nested_access_check_6_${I} valid "$OP" public family yes
1765         ./make_cross_nested_access_test.sh cross_nested_access_check_6a_${I} valid "$OP" public family yes yes
1766         ./make_cross_nested_access_test.sh cross_nested_access_check_a_${I} valid "$OP" public famandassem yes
1767         ./make_cross_nested_access_test.sh cross_nested_access_check_aa_${I} valid "$OP" public famandassem yes yes
1768
1769         ./make_cross_nested_access_test.sh cross_nested_access_check_16_${I} valid "$OP" private family yes
1770         ./make_cross_nested_access_test.sh cross_nested_access_check_16a_${I} valid "$OP" private family yes yes
1771         ./make_cross_nested_access_test.sh cross_nested_access_check_1a_${I} valid "$OP" private famandassem yes
1772         ./make_cross_nested_access_test.sh cross_nested_access_check_1aa_${I} valid "$OP" private famandassem yes yes
1773
1774         ./make_cross_nested_access_test.sh cross_nested_access_check_26_${I} valid "$OP" family family yes
1775         ./make_cross_nested_access_test.sh cross_nested_access_check_26a_${I} valid "$OP" family family yes yes
1776         ./make_cross_nested_access_test.sh cross_nested_access_check_2a_${I} valid "$OP" family famandassem yes
1777         ./make_cross_nested_access_test.sh cross_nested_access_check_2aa_${I} valid "$OP" family famandassem yes yes
1778
1779         ./make_cross_nested_access_test.sh cross_nested_access_check_36_${I} valid "$OP" assembly family yes
1780         ./make_cross_nested_access_test.sh cross_nested_access_check_36a_${I} valid "$OP" assembly family yes yes
1781         ./make_cross_nested_access_test.sh cross_nested_access_check_3a_${I} valid "$OP" assembly famandassem yes
1782         ./make_cross_nested_access_test.sh cross_nested_access_check_3aa_${I} valid "$OP" assembly famandassem yes yes
1783
1784         ./make_cross_nested_access_test.sh cross_nested_access_check_46_${I} valid "$OP" famandassem family yes
1785         ./make_cross_nested_access_test.sh cross_nested_access_check_46a_${I} valid "$OP" famandassem family yes yes
1786         ./make_cross_nested_access_test.sh cross_nested_access_check_4a_${I} valid "$OP" famandassem famandassem yes
1787         ./make_cross_nested_access_test.sh cross_nested_access_check_4aa_${I} valid "$OP" famandassem famandassem yes yes
1788
1789         ./make_cross_nested_access_test.sh cross_nested_access_check_56_${I} valid "$OP" famorassem family yes
1790         ./make_cross_nested_access_test.sh cross_nested_access_check_56a_${I} valid "$OP" famorassem family yes yes
1791         ./make_cross_nested_access_test.sh cross_nested_access_check_5a_${I} valid "$OP" famorassem famandassem yes
1792         ./make_cross_nested_access_test.sh cross_nested_access_check_5aa_${I} valid "$OP" famorassem famandassem yes yes
1793
1794         I=`expr $I + 1`
1795 done
1796
1797
1798
1799 I=1
1800 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()"
1801 do
1802         ./make_access_test.sh access_check_1_${I} valid "$OP" public public no
1803         ./make_access_test.sh access_check_2_${I} valid "$OP" public public yes
1804         ./make_access_test.sh access_check_3_${I} unverifiable "$OP" public private no
1805         ./make_access_test.sh access_check_4_${I} unverifiable "$OP" public private yes
1806         ./make_access_test.sh access_check_5_${I} unverifiable "$OP" public family no
1807         ./make_access_test.sh access_check_7_${I} valid "$OP" public assembly no
1808         ./make_access_test.sh access_check_8_${I} valid "$OP" public assembly yes
1809         ./make_access_test.sh access_check_9_${I} unverifiable "$OP" public famandassem no
1810         ./make_access_test.sh access_check_b_${I} valid "$OP" public famorassem no
1811         ./make_access_test.sh access_check_c_${I} valid "$OP" public famorassem yes
1812
1813         ./make_access_test.sh access_check_11_${I} valid "$OP" private public no
1814         ./make_access_test.sh access_check_12_${I} valid "$OP" private public yes
1815         ./make_access_test.sh access_check_13_${I} unverifiable "$OP" private private no
1816         ./make_access_test.sh access_check_14_${I} unverifiable "$OP" private private yes
1817         ./make_access_test.sh access_check_15_${I} unverifiable "$OP" private family no
1818         ./make_access_test.sh access_check_17_${I} valid "$OP" private assembly no
1819         ./make_access_test.sh access_check_18_${I} valid "$OP" private assembly yes
1820         ./make_access_test.sh access_check_19_${I} unverifiable "$OP" private famandassem no
1821         ./make_access_test.sh access_check_1b_${I} valid "$OP" private famorassem no
1822         ./make_access_test.sh access_check_1c_${I} valid "$OP" private famorassem yes
1823
1824         ./make_access_test.sh access_check_31_${I} valid "$OP" " " public no
1825         ./make_access_test.sh access_check_32_${I} valid "$OP" " " public yes
1826         ./make_access_test.sh access_check_33_${I} unverifiable "$OP" " " private no
1827         ./make_access_test.sh access_check_34_${I} unverifiable "$OP" " " private yes
1828         ./make_access_test.sh access_check_35_${I} unverifiable "$OP" " " family no
1829         ./make_access_test.sh access_check_37_${I} valid "$OP" " " assembly no
1830         ./make_access_test.sh access_check_38_${I} valid "$OP" " " assembly yes
1831         ./make_access_test.sh access_check_39_${I} unverifiable "$OP" " " famandassem no
1832         ./make_access_test.sh access_check_3b_${I} valid "$OP" " " famorassem no
1833         ./make_access_test.sh access_check_3c_${I} valid "$OP" " " famorassem yes
1834
1835         I=`expr $I + 1`
1836 done
1837
1838 #static members are different from instance members
1839 I=1
1840 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" 
1841 do
1842         ./make_access_test.sh access_check_41_${I} valid "$OP" public family yes
1843         ./make_access_test.sh access_check_42_${I} valid "$OP" public famandassem yes
1844         ./make_access_test.sh access_check_43_${I} valid "$OP" private family yes
1845         ./make_access_test.sh access_check_44_${I} valid "$OP" private famandassem yes
1846         ./make_access_test.sh access_check_45_${I} valid "$OP" " " family yes
1847         ./make_access_test.sh access_check_46_${I} valid "$OP" " " famandassem yes
1848         I=`expr $I + 1`
1849 done
1850
1851 #try to access the base stuff directly
1852 I=1
1853 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()"
1854 do
1855         ./make_access_test.sh access_check_51_${I} unverifiable "$OP" public family yes
1856         ./make_access_test.sh access_check_52_${I} unverifiable "$OP" public famandassem yes
1857         ./make_access_test.sh access_check_53_${I} unverifiable "$OP" private family yes
1858         ./make_access_test.sh access_check_54_${I} unverifiable "$OP" private famandassem yes
1859         ./make_access_test.sh access_check_55_${I} unverifiable "$OP" " " family yes
1860         ./make_access_test.sh access_check_56_${I} unverifiable "$OP" " " famandassem yes
1861         I=`expr $I + 1`
1862 done
1863
1864 #try to access the subclass stuff
1865 I=1
1866 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()"
1867 do
1868         ./make_access_test.sh access_check_61_${I} valid "$OP" public family yes yes
1869         ./make_access_test.sh access_check_62_${I} valid "$OP" public famandassem yes yes
1870         ./make_access_test.sh access_check_63_${I} valid "$OP" private family yes yes
1871         ./make_access_test.sh access_check_64_${I} valid "$OP" private famandassem yes yes
1872         ./make_access_test.sh access_check_65_${I} valid "$OP" " " family yes yes
1873         ./make_access_test.sh access_check_66_${I} valid "$OP" " " famandassem yes yes
1874         I=`expr $I + 1`
1875 done
1876
1877
1878 function create_nesting_test_same_result () {
1879   K=$1
1880   for BASE in yes no
1881   do
1882     for NESTED in yes no
1883       do
1884         for LOAD in yes no
1885         do
1886           if ! ( [ "$NESTED" == "no" ] && [ "$LOAD" == "yes" ] ) ; then
1887             ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $2 "$OP" $3 $4 $5 "$BASE" "$NESTED" "$LOAD"
1888             K=`expr $K + 1`
1889           fi
1890       done
1891     done
1892   done
1893 }
1894
1895 function create_nesting_test_only_first_ok () {
1896   FIRST=$1
1897   K=$1
1898   for BASE in yes no
1899   do
1900     for NESTED in yes no
1901       do
1902         for LOAD in yes no
1903         do
1904           if ! ( [ "$NESTED" == "no" ] && [ "$LOAD" == "yes" ] ) ; then
1905                EXPECT=unverifiable
1906            if [ "$FIRST" == "$K" ]; then
1907               EXPECT=valid
1908            fi
1909            ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $EXPECT "$OP" $2 $3 $4 "$BASE" "$NESTED" "$LOAD"
1910            K=`expr $K + 1`
1911          fi
1912      done
1913     done
1914   done
1915 }
1916
1917 I=1
1918
1919 for OP in "callvirt instance int32 class Root\/Nested::Target()" "call 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"
1920 do
1921   create_nesting_test_same_result 1 valid public assembly assembly
1922
1923   ./make_double_nesting_test.sh double_nesting_access_check_7_$I valid "$OP" public assembly family yes yes yes
1924   ./make_double_nesting_test.sh double_nesting_access_check_8_$I unverifiable "$OP" public assembly family yes yes no
1925   ./make_double_nesting_test.sh double_nesting_access_check_9_$I unverifiable "$OP" public assembly family yes no no
1926   ./make_double_nesting_test.sh double_nesting_access_check_10_$I valid "$OP" public assembly family no yes yes
1927   ./make_double_nesting_test.sh double_nesting_access_check_11_$I unverifiable "$OP" public assembly family no yes no
1928   ./make_double_nesting_test.sh double_nesting_access_check_12_$I unverifiable "$OP" public assembly family no no no
1929
1930   ./make_double_nesting_test.sh double_nesting_access_check_13_$I valid "$OP" public assembly famandassem yes yes yes
1931   ./make_double_nesting_test.sh double_nesting_access_check_14_$I unverifiable "$OP" public assembly famandassem yes yes no
1932   ./make_double_nesting_test.sh double_nesting_access_check_15_$I unverifiable "$OP" public assembly famandassem yes no no
1933   ./make_double_nesting_test.sh double_nesting_access_check_16_$I valid "$OP" public assembly famandassem no yes yes
1934   ./make_double_nesting_test.sh double_nesting_access_check_17_$I unverifiable "$OP" public assembly famandassem no yes no
1935   ./make_double_nesting_test.sh double_nesting_access_check_18_$I unverifiable "$OP" public assembly famandassem no no no
1936
1937   create_nesting_test_same_result 19 valid public assembly famorassem
1938   create_nesting_test_same_result 25 unverifiable public assembly private
1939   create_nesting_test_same_result 31 valid public assembly public
1940
1941   ./make_double_nesting_test.sh double_nesting_access_check_37_$I valid "$OP" public family assembly yes yes yes
1942   ./make_double_nesting_test.sh double_nesting_access_check_38_$I valid "$OP" public family assembly yes yes no
1943   ./make_double_nesting_test.sh double_nesting_access_check_39_$I valid "$OP" public family assembly yes no no
1944   ./make_double_nesting_test.sh double_nesting_access_check_40_$I unverifiable "$OP" public family assembly no yes yes
1945   ./make_double_nesting_test.sh double_nesting_access_check_41_$I unverifiable "$OP" public family assembly no yes no
1946   ./make_double_nesting_test.sh double_nesting_access_check_42_$I unverifiable "$OP" public family assembly no no no
1947
1948   create_nesting_test_only_first_ok 43 public family family
1949   create_nesting_test_only_first_ok 49 public family famandassem
1950
1951   ./make_double_nesting_test.sh double_nesting_access_check_55_$I valid "$OP" public family famorassem yes yes yes
1952   ./make_double_nesting_test.sh double_nesting_access_check_56_$I valid "$OP" public family famorassem yes yes no
1953   ./make_double_nesting_test.sh double_nesting_access_check_57_$I valid "$OP" public family famorassem yes no no
1954   ./make_double_nesting_test.sh double_nesting_access_check_58_$I unverifiable "$OP" public family famorassem no yes yes
1955   ./make_double_nesting_test.sh double_nesting_access_check_59_$I unverifiable "$OP" public family famorassem no yes no
1956   ./make_double_nesting_test.sh double_nesting_access_check_60_$I unverifiable "$OP" public family famorassem no no no
1957
1958    create_nesting_test_same_result 61 unverifiable public family private
1959
1960   ./make_double_nesting_test.sh double_nesting_access_check_67_$I valid "$OP" public family public yes yes yes
1961   ./make_double_nesting_test.sh double_nesting_access_check_68_$I valid "$OP" public family public yes yes no
1962   ./make_double_nesting_test.sh double_nesting_access_check_69_$I valid "$OP" public family public yes no no
1963   ./make_double_nesting_test.sh double_nesting_access_check_70_$I unverifiable "$OP" public family public no yes yes
1964   ./make_double_nesting_test.sh double_nesting_access_check_71_$I unverifiable "$OP" public family public no yes no
1965   ./make_double_nesting_test.sh double_nesting_access_check_72_$I unverifiable "$OP" public family public no no no
1966
1967   ./make_double_nesting_test.sh double_nesting_access_check_73_$I valid "$OP" public famandassem assembly yes yes yes
1968   ./make_double_nesting_test.sh double_nesting_access_check_74_$I valid "$OP" public famandassem assembly yes yes no
1969   ./make_double_nesting_test.sh double_nesting_access_check_75_$I valid "$OP" public famandassem assembly yes no no
1970   ./make_double_nesting_test.sh double_nesting_access_check_76_$I unverifiable "$OP" public famandassem assembly no yes yes
1971   ./make_double_nesting_test.sh double_nesting_access_check_77_$I unverifiable "$OP" public famandassem assembly no yes no
1972   ./make_double_nesting_test.sh double_nesting_access_check_78_$I unverifiable "$OP" public famandassem assembly no no no
1973
1974   create_nesting_test_only_first_ok 79  public famandassem family
1975   create_nesting_test_only_first_ok 85  public famandassem famandassem
1976
1977   ./make_double_nesting_test.sh double_nesting_access_check_91_$I valid "$OP" public famandassem famorassem yes yes yes
1978   ./make_double_nesting_test.sh double_nesting_access_check_92_$I valid "$OP" public famandassem famorassem yes yes no
1979   ./make_double_nesting_test.sh double_nesting_access_check_93_$I valid "$OP" public famandassem famorassem yes no no
1980   ./make_double_nesting_test.sh double_nesting_access_check_94_$I unverifiable "$OP" public famandassem famorassem no yes yes
1981   ./make_double_nesting_test.sh double_nesting_access_check_95_$I unverifiable "$OP" public famandassem famorassem no yes no
1982   ./make_double_nesting_test.sh double_nesting_access_check_96_$I unverifiable "$OP" public famandassem famorassem no no no
1983
1984    create_nesting_test_same_result 97 unverifiable public famandassem private
1985
1986   ./make_double_nesting_test.sh double_nesting_access_check_103_$I valid "$OP" public famandassem public yes yes yes
1987   ./make_double_nesting_test.sh double_nesting_access_check_104_$I valid "$OP" public famandassem public yes yes no
1988   ./make_double_nesting_test.sh double_nesting_access_check_105_$I valid "$OP" public famandassem public yes no no
1989   ./make_double_nesting_test.sh double_nesting_access_check_106_$I unverifiable "$OP" public famandassem public no yes yes
1990   ./make_double_nesting_test.sh double_nesting_access_check_107_$I unverifiable "$OP" public famandassem public no yes no
1991   ./make_double_nesting_test.sh double_nesting_access_check_108_$I unverifiable "$OP" public famandassem public no no no
1992
1993   create_nesting_test_same_result 109 valid public famorassem assembly
1994
1995   ./make_double_nesting_test.sh double_nesting_access_check_115_$I valid "$OP" public famorassem family yes yes yes
1996   ./make_double_nesting_test.sh double_nesting_access_check_116_$I unverifiable "$OP" public famorassem family yes yes no
1997   ./make_double_nesting_test.sh double_nesting_access_check_117_$I unverifiable "$OP" public famorassem family yes no no
1998   ./make_double_nesting_test.sh double_nesting_access_check_118_$I valid "$OP" public famorassem family no yes yes
1999   ./make_double_nesting_test.sh double_nesting_access_check_119_$I unverifiable "$OP" public famorassem family no yes no
2000   ./make_double_nesting_test.sh double_nesting_access_check_120_$I unverifiable "$OP" public famorassem family no no no
2001
2002   ./make_double_nesting_test.sh double_nesting_access_check_121_$I valid "$OP" public famorassem famandassem yes yes yes
2003   ./make_double_nesting_test.sh double_nesting_access_check_122_$I unverifiable "$OP" public famorassem famandassem yes yes no
2004   ./make_double_nesting_test.sh double_nesting_access_check_123_$I unverifiable "$OP" public famorassem famandassem yes no no
2005   ./make_double_nesting_test.sh double_nesting_access_check_124_$I valid "$OP" public famorassem famandassem no yes yes
2006   ./make_double_nesting_test.sh double_nesting_access_check_125_$I unverifiable "$OP" public famorassem famandassem no yes no
2007   ./make_double_nesting_test.sh double_nesting_access_check_126_$I unverifiable "$OP" public famorassem famandassem no no no
2008
2009   create_nesting_test_same_result 127 valid public famorassem famorassem
2010   create_nesting_test_same_result 133 unverifiable public famorassem private
2011   create_nesting_test_same_result 139 valid public famorassem public
2012   create_nesting_test_same_result 145 unverifiable public private assembly
2013   create_nesting_test_same_result 151 unverifiable public private family
2014   create_nesting_test_same_result 157 unverifiable public private famandassem
2015   create_nesting_test_same_result 163 unverifiable public private famorassem
2016   create_nesting_test_same_result 169 unverifiable public private private
2017   create_nesting_test_same_result 175 unverifiable public private public
2018   create_nesting_test_same_result 181 valid public public assembly
2019
2020   ./make_double_nesting_test.sh double_nesting_access_check_187_$I valid "$OP" public public family yes yes yes
2021   ./make_double_nesting_test.sh double_nesting_access_check_188_$I unverifiable "$OP" public public family yes yes no
2022   ./make_double_nesting_test.sh double_nesting_access_check_189_$I unverifiable "$OP" public public family yes no no
2023   ./make_double_nesting_test.sh double_nesting_access_check_190_$I valid "$OP" public public family no yes yes
2024   ./make_double_nesting_test.sh double_nesting_access_check_191_$I unverifiable "$OP" public public family no yes no
2025   ./make_double_nesting_test.sh double_nesting_access_check_192_$I unverifiable "$OP" public public family no no no
2026
2027   ./make_double_nesting_test.sh double_nesting_access_check_193_$I valid "$OP" public public famandassem yes yes yes
2028   ./make_double_nesting_test.sh double_nesting_access_check_194_$I unverifiable "$OP" public public famandassem yes yes no
2029   ./make_double_nesting_test.sh double_nesting_access_check_195_$I unverifiable "$OP" public public famandassem yes no no
2030   ./make_double_nesting_test.sh double_nesting_access_check_196_$I valid "$OP" public public famandassem no yes yes
2031   ./make_double_nesting_test.sh double_nesting_access_check_197_$I unverifiable "$OP" public public famandassem no yes no
2032   ./make_double_nesting_test.sh double_nesting_access_check_198_$I unverifiable "$OP" public public famandassem no no no
2033
2034   create_nesting_test_same_result 199 valid public public famorassem
2035   create_nesting_test_same_result 205 unverifiable public public private
2036   create_nesting_test_same_result 211 valid public public public
2037   I=`expr $I + 1`
2038 done
2039
2040 function create_nesting_test_same_result_static () {
2041   K=$1
2042   for BASE in yes no
2043   do
2044     for NESTED in yes no
2045       do
2046         ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $2 "$OP" $3 $4 $5 "$BASE" "$NESTED" yes
2047         K=`expr $K + 1`
2048     done
2049   done
2050 }
2051
2052 function create_nesting_test_strips_result_static () {
2053   K=$1
2054   for BASE in yes no
2055   do
2056     for NESTED in yes no
2057       do
2058         EXPECT=unverifiable
2059         if [ "$NESTED" == "yes" ]; then
2060           EXPECT=valid
2061         fi
2062         ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $EXPECT "$OP" $2 $3 $4 "$BASE" "$NESTED" yes
2063         K=`expr $K + 1`
2064     done
2065   done
2066 }
2067
2068 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"
2069 do
2070    create_nesting_test_same_result 1 valid public assembly assembly
2071
2072   create_nesting_test_strips_result_static 5 public assembly family
2073   create_nesting_test_strips_result_static 9 public assembly family
2074
2075   create_nesting_test_same_result 13 valid public assembly famorassem
2076   create_nesting_test_same_result 17 unverifiable public assembly private
2077   create_nesting_test_same_result 21 valid public assembly public
2078
2079   ./make_double_nesting_test.sh double_nesting_access_check_25_$I valid "$OP" public family assembly yes yes yes
2080   ./make_double_nesting_test.sh double_nesting_access_check_26_$I valid "$OP" public family assembly yes no yes
2081   ./make_double_nesting_test.sh double_nesting_access_check_27_$I unverifiable "$OP" public family assembly no yes yes
2082   ./make_double_nesting_test.sh double_nesting_access_check_27_$I unverifiable "$OP" public family assembly no no yes
2083
2084   ./make_double_nesting_test.sh double_nesting_access_check_29_$I valid "$OP" public family family yes yes yes
2085   ./make_double_nesting_test.sh double_nesting_access_check_30_$I unverifiable "$OP" public family family yes no yes
2086   ./make_double_nesting_test.sh double_nesting_access_check_31_$I unverifiable "$OP" public family family no yes yes
2087   ./make_double_nesting_test.sh double_nesting_access_check_32_$I unverifiable "$OP" public family family no no yes
2088
2089   ./make_double_nesting_test.sh double_nesting_access_check_33_$I valid "$OP" public family famandassem yes yes yes
2090   ./make_double_nesting_test.sh double_nesting_access_check_34_$I unverifiable "$OP" public family famandassem yes no yes
2091   ./make_double_nesting_test.sh double_nesting_access_check_35_$I unverifiable "$OP" public family famandassem no yes yes
2092   ./make_double_nesting_test.sh double_nesting_access_check_36_$I unverifiable "$OP" public family famandassem no no yes
2093
2094   ./make_double_nesting_test.sh double_nesting_access_check_37_$I valid "$OP" public family famorassem yes yes yes
2095   ./make_double_nesting_test.sh double_nesting_access_check_38_$I valid "$OP" public family famorassem yes no yes
2096   ./make_double_nesting_test.sh double_nesting_access_check_39_$I unverifiable "$OP" public family famorassem no yes yes
2097   ./make_double_nesting_test.sh double_nesting_access_check_40_$I unverifiable "$OP" public family famorassem no no yes
2098
2099    create_nesting_test_same_result 41 unverifiable public family private
2100
2101   ./make_double_nesting_test.sh double_nesting_access_check_45_$I valid "$OP" public family public yes yes yes
2102   ./make_double_nesting_test.sh double_nesting_access_check_46_$I valid "$OP" public family public yes no yes
2103   ./make_double_nesting_test.sh double_nesting_access_check_47_$I unverifiable "$OP" public family public no yes yes
2104   ./make_double_nesting_test.sh double_nesting_access_check_48_$I unverifiable "$OP" public family public no no yes
2105
2106   ./make_double_nesting_test.sh double_nesting_access_check_49_$I valid "$OP" public famandassem assembly yes yes yes
2107   ./make_double_nesting_test.sh double_nesting_access_check_50_$I valid "$OP" public famandassem assembly yes no yes
2108   ./make_double_nesting_test.sh double_nesting_access_check_51_$I unverifiable "$OP" public famandassem assembly no yes yes
2109   ./make_double_nesting_test.sh double_nesting_access_check_52_$I unverifiable "$OP" public famandassem assembly no no yes
2110
2111   ./make_double_nesting_test.sh double_nesting_access_check_53_$I valid "$OP" public famandassem family yes yes yes
2112   ./make_double_nesting_test.sh double_nesting_access_check_54_$I unverifiable "$OP" public famandassem family yes no yes
2113   ./make_double_nesting_test.sh double_nesting_access_check_55_$I unverifiable "$OP" public famandassem family no yes yes
2114   ./make_double_nesting_test.sh double_nesting_access_check_56_$I unverifiable "$OP" public famandassem family no no yes
2115
2116   ./make_double_nesting_test.sh double_nesting_access_check_57_$I valid "$OP" public famandassem famandassem yes yes yes
2117   ./make_double_nesting_test.sh double_nesting_access_check_58_$I unverifiable "$OP" public famandassem famandassem yes no yes
2118   ./make_double_nesting_test.sh double_nesting_access_check_59_$I unverifiable "$OP" public famandassem famandassem no yes yes
2119   ./make_double_nesting_test.sh double_nesting_access_check_60_$I unverifiable "$OP" public famandassem famandassem no no yes
2120
2121   ./make_double_nesting_test.sh double_nesting_access_check_61_$I valid "$OP" public famandassem famorassem yes yes yes
2122   ./make_double_nesting_test.sh double_nesting_access_check_62_$I valid "$OP" public famandassem famorassem yes no yes
2123   ./make_double_nesting_test.sh double_nesting_access_check_63_$I unverifiable "$OP" public famandassem famorassem no yes yes
2124   ./make_double_nesting_test.sh double_nesting_access_check_64_$I unverifiable "$OP" public famandassem famorassem no no yes
2125
2126   create_nesting_test_same_result 65 unverifiable public famandassem private
2127
2128   ./make_double_nesting_test.sh double_nesting_access_check_69_$I valid "$OP" public famandassem public yes yes yes
2129   ./make_double_nesting_test.sh double_nesting_access_check_70_$I valid "$OP" public famandassem public yes no yes
2130   ./make_double_nesting_test.sh double_nesting_access_check_71_$I unverifiable "$OP" public famandassem public no yes yes
2131   ./make_double_nesting_test.sh double_nesting_access_check_72_$I unverifiable "$OP" public famandassem public no no yes
2132
2133   create_nesting_test_same_result 73 valid public famorassem assembly
2134   create_nesting_test_strips_result_static 77 public famorassem family
2135   create_nesting_test_strips_result_static 81 public famorassem famandassem
2136
2137   create_nesting_test_same_result 85 valid public famorassem famorassem
2138   create_nesting_test_same_result 89 unverifiable public famorassem private
2139   create_nesting_test_same_result 93 valid public famorassem public
2140   create_nesting_test_same_result 97 unverifiable public private assembly
2141   create_nesting_test_same_result 101 unverifiable public private family
2142   create_nesting_test_same_result 105 unverifiable public private famandassem
2143   create_nesting_test_same_result 109 unverifiable public private famorassem
2144   create_nesting_test_same_result 113 unverifiable public private private
2145   create_nesting_test_same_result 117 unverifiable public private public
2146   create_nesting_test_same_result 121 valid public public assembly
2147   create_nesting_test_strips_result_static 125 public public family
2148   create_nesting_test_strips_result_static 129 public public famandassem
2149   create_nesting_test_same_result 133 valid public public famorassem
2150   create_nesting_test_same_result 137 unverifiable public public private
2151   create_nesting_test_same_result 141 valid public public public
2152
2153   I=`expr $I + 1`
2154 done
2155
2156
2157 #ldtoken tests
2158
2159 ./make_ldtoken_test.sh ldtoken_class valid "ldtoken class Example" "call class [mscorlib]System.Type class [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)"
2160
2161 ./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)"
2162
2163 ./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)"
2164
2165 ./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)"
2166
2167 ./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)"
2168
2169 ./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)"
2170
2171
2172 #ldobj tests
2173 function fix_ldobj () {
2174         if [ "$3" != "" ]; then
2175                 A=$3;
2176         elif [ "$2" != "" ]; then
2177                 A=$2;
2178         else
2179                 A=$1;
2180         fi
2181
2182         if [ "$A" == "bool" ]; then
2183                 A="int8";
2184         elif [ "$A" == "char" ]; then
2185                 A="int16";
2186         fi
2187
2188         echo "$A";
2189 }
2190
2191
2192 I=1
2193
2194 #valid
2195 for T1 in 'int8' 'bool' 'unsigned int8' 'int16' 'char' 'unsigned int16' 'int32' 'unsigned int32' 'int64' 'unsigned int64' 'float32' 'float64'
2196 do
2197         for T2 in 'int8' 'bool' 'unsigned int8' 'int16' 'char' 'unsigned int16' 'int32' 'unsigned int32' 'int64' 'unsigned int64' 'float32' 'float64'
2198         do
2199                 TYPE1="$(fix_ldobj $T1)"
2200                 TYPE2="$(fix_ldobj $T2)"
2201                 if [ "$TYPE1" == "$TYPE2" ] ; then
2202                         ./make_ldobj_test.sh ldobj_${I} valid "${T1}\&" "${T2}"
2203                 else
2204                         ./make_ldobj_test.sh ldobj_${I} unverifiable "${T1}\&" "${T2}"
2205                 fi
2206                 I=`expr $I + 1`
2207         done
2208 done
2209
2210
2211
2212 #unverifiable
2213 #for T1 in "int8" "int64" "float64" "object" "string" "class Class" "int32[]" "int32[,]" "valuetype MyStruct" "valuetype MyStruct2" "int32 *" "valuetype MyStruct *" "method int32 *(int32)"
2214 for T1 in "native int" "int8*" "typedref" 
2215 do
2216         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" "typedref\&" "class Template\`1<object>" "valuetype StructTemplate\`1<object>" "valuetype StructTemplate2\`1<object>"
2217         do 
2218                 ./make_ldobj_test.sh ldobj_${I} unverifiable "${T1}" "${T2}"
2219                 I=`expr $I + 1`
2220         done
2221 done
2222
2223
2224
2225
2226 #invalid
2227 #for T1 in "int8" "int64" "float64" "object" "string" "class Class" "int32[]" "int32[,]" "valuetype MyStruct" "valuetype MyStruct2" "int32 *" "valuetype MyStruct *" "method int32 *(int32)"
2228 for T1 in 'int8' 'native int'
2229 do      
2230         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\&"
2231         do 
2232                 ./make_ldobj_test.sh ldobj_${I} invalid "${T1}" "${T2}"
2233                 I=`expr $I + 1`
2234         done
2235 done
2236
2237 ./make_ldobj_test.sh ldobj_struct_1 valid  "valuetype MyStruct\&" "valuetype MyStruct"
2238 ./make_ldobj_test.sh ldobj_struct_2 unverifiable  "valuetype MyStruct\&" "valuetype MyStruct2"
2239 ./make_ldobj_test.sh ldobj_struct_3 valid  "valuetype StructTemplate\`1<object>\&" "valuetype StructTemplate\`1<object>"
2240 ./make_ldobj_test.sh ldobj_struct_4 unverifiable  "valuetype StructTemplate\`1<object>\&" "valuetype StructTemplate2\`1<object>"
2241
2242 ./make_ldobj_test.sh ldobj_struct_5 valid  "object\&"  "object"
2243 ./make_ldobj_test.sh ldobj_struct_6 valid  "string\&"  "string"
2244 ./make_ldobj_test.sh ldobj_struct_7 valid  "int32[]\&"  "int32[]"
2245 ./make_ldobj_test.sh ldobj_struct_8 valid  "int32[,]\&"  "int32[,]"
2246 ./make_ldobj_test.sh ldobj_struct_9 valid  "class Template\`1<object>\&"  "class Template\`1<object>"
2247
2248
2249 # Unbox Test
2250
2251
2252 # unbox non-existent type.
2253 ./make_unbox_test.sh unbox_bad_type invalid "valuetype [mscorlib]NonExistent" "valuetype [mscorlib]NonExistent"
2254
2255 # Unbox byref type.
2256 ./make_unbox_test.sh unbox_byref_type invalid "int32" 'int32\&'
2257
2258 # Box unbox-like type.
2259 ./make_unbox_test.sh unbox_byref_like unverifiable typedref typedref
2260
2261 # Box unbox-like type.
2262 ./make_unbox_test.sh unbox_wrong_types valid object int32
2263
2264 #This is illegal since you cannot have a Void local variable, it should go into the structural tests part
2265 # Box void type.
2266 #./make_unary_test.sh box_void unverifiable "box [mscorlib]System.Void\n\tpop" "class [mscorlib]System.Void"
2267 I=1;
2268 for OP in "native int" "int32*" typedref int16 float32
2269 do
2270         ./make_unbox_test.sh unbox_bad_stack_${I} unverifiable "${OP}" int32 "nop" "yes"
2271         I=`expr $I + 1`
2272 done
2273
2274
2275 #unboxing from int32
2276 ./make_unbox_test.sh unbox_wrong_types_1 unverifiable int32 int32 "nop" "yes"
2277
2278 #unboxing from valuetype
2279 ./make_unbox_test.sh unbox_wrong_types_2 unverifiable "valuetype MyStruct" int32 "nop" "yes"
2280
2281 #unboxing from managed ref
2282 ./make_unbox_test.sh unbox_stack_byref unverifiable "valuetype MyEnum\&" "valuetype MyEnum" "nop" "yes"
2283
2284 # valid unboxing
2285 ./make_unbox_test.sh unbox_primitive valid "int32" "int32"
2286 ./make_unbox_test.sh unbox_struct valid "valuetype MyStruct" 'valuetype MyStruct'
2287 ./make_unbox_test.sh unbox_template valid "valuetype StructTemplate\`1<object>" "valuetype StructTemplate\`1<object>"
2288 ./make_unbox_test.sh unbox_enum valid "valuetype MyEnum" "valuetype MyEnum"
2289
2290
2291 #test if the unboxed value is right
2292 ./make_unbox_test.sh unbox_use_result_1 valid "valuetype MyStruct" "valuetype MyStruct" "ldfld int32 MyStruct::foo"
2293 ./make_unbox_test.sh unbox_use_result_2 valid "valuetype MyStruct" "valuetype MyStruct" "ldobj valuetype MyStruct\n\tstloc.0\n\tldc.i4.0"
2294 ./make_unbox_test.sh unbox_use_result_3 valid "int32" "int32" "ldind.i4\n\tstloc.1\n\tldc.i4.0"
2295
2296
2297 # newarray Test
2298
2299 #no int size on stack
2300 #invalid size type on stack
2301 #invalid array type (with bytref)
2302
2303 #Empty stack
2304 ./make_newarr_test.sh newarr_empty_stack invalid int32 int32 pop
2305
2306 #Stack type tests
2307 ./make_newarr_test.sh newarr_stack_type_1 valid int32 int32
2308 ./make_newarr_test.sh newarr_stack_type_2 valid "native int" int32
2309
2310 ./make_newarr_test.sh newarr_stack_type_3 unverifiable float32 int32
2311 ./make_newarr_test.sh newarr_stack_type_4 unverifiable object int32
2312
2313 #Invalid array element type (with byref)
2314 ./make_newarr_test.sh newarr_array_type_1 invalid int32 "int32\&"
2315
2316 #Check if the verifier push the right type on stack
2317 ./make_newarr_test.sh newarr_array_value valid int32 int32 nop "ldc.i4.0\n\tcallvirt instance int32 class [mscorlib]System.Array::GetLength(int32)"
2318
2319
2320
2321
2322 #Tests for ldind.X
2323 I=1
2324 for OP in "ldind.i1" "ldind.u1"
2325 do
2326         for TYPE in "int8" "bool" "unsigned int8"
2327         do
2328                 ./make_load_indirect_test.sh indirect_load_i1_${I} valid "${OP}" "${TYPE}"
2329                 I=`expr $I + 1`
2330         done
2331
2332         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>"
2333         do
2334                 ./make_load_indirect_test.sh indirect_load_i1_${I} unverifiable "${OP}" "${TYPE}"
2335                 I=`expr $I + 1`
2336         done
2337 done
2338
2339 I=1
2340 for OP in "ldind.i2" "ldind.u2"
2341 do
2342         for TYPE in "int16" "char" "unsigned int16"
2343         do
2344                 ./make_load_indirect_test.sh indirect_load_i2_${I} valid "${OP}" "${TYPE}"
2345                 I=`expr $I + 1`
2346         done
2347
2348         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>"
2349         do
2350                 ./make_load_indirect_test.sh indirect_load_i2_${I} unverifiable "${OP}" "${TYPE}"
2351                 I=`expr $I + 1`
2352         done
2353 done
2354
2355 I=1
2356 for OP in "ldind.i4" "ldind.u4"
2357 do
2358         for TYPE in "int32" "unsigned int32" "native int" "native unsigned int"
2359         do
2360                 ./make_load_indirect_test.sh indirect_load_i4_${I} valid "${OP}" "${TYPE}"
2361                 I=`expr $I + 1`
2362         done
2363
2364         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>"
2365         do
2366                 ./make_load_indirect_test.sh indirect_load_i4_${I} unverifiable "${OP}" "${TYPE}"
2367                 I=`expr $I + 1`
2368         done
2369 done
2370
2371
2372 #no need to test ldind.u8 as it aliases to ldind.i8
2373 I=1
2374 for TYPE in "int64" "unsigned int64"
2375 do
2376         ./make_load_indirect_test.sh indirect_load_i8_${I} valid "ldind.i8" "${TYPE}"
2377         I=`expr $I + 1`
2378 done
2379
2380 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>"
2381 do
2382         ./make_load_indirect_test.sh indirect_load_i8_${I} unverifiable "ldind.i8" "${TYPE}"
2383         I=`expr $I + 1`
2384 done
2385
2386
2387 I=1
2388 for TYPE in "float32"
2389 do
2390         ./make_load_indirect_test.sh indirect_load_r4_${I} valid "ldind.r4" "${TYPE}"
2391         I=`expr $I + 1`
2392 done
2393
2394 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>"
2395 do
2396         ./make_load_indirect_test.sh indirect_load_r4_${I} unverifiable "ldind.r4" "${TYPE}"
2397         I=`expr $I + 1`
2398 done
2399
2400
2401 I=1
2402 for TYPE in "float64"
2403 do
2404         ./make_load_indirect_test.sh indirect_load_r8_${I} valid "ldind.r8" "${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" "float32" "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_r8_${I} unverifiable "ldind.r8" "${TYPE}"
2411         I=`expr $I + 1`
2412 done
2413
2414
2415 I=1
2416 for TYPE in "int32" "unsigned int32" "native int" "native unsigned int" 
2417 do
2418         ./make_load_indirect_test.sh indirect_load_i_${I} valid "ldind.i" "${TYPE}"
2419         I=`expr $I + 1`
2420 done
2421
2422 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>"
2423 do
2424         ./make_load_indirect_test.sh indirect_load_i_${I} unverifiable "ldind.i" "${TYPE}"
2425         I=`expr $I + 1`
2426 done
2427
2428
2429 I=1
2430 for TYPE in "object" "string" "class Class"  "int32[]" "int32[,]" "class Template\`1<object>"
2431 do
2432         ./make_load_indirect_test.sh indirect_load_r_${I} valid "ldind.ref" "${TYPE}"
2433         I=`expr $I + 1`
2434 done
2435
2436 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)"
2437 do
2438         ./make_load_indirect_test.sh indirect_load_r_${I} unverifiable "ldind.ref" "${TYPE}"
2439         I=`expr $I + 1`
2440 done
2441
2442
2443 #valid stores
2444 ./make_store_indirect_test.sh indirect_store_i1_1 valid "stind.i1" "int8\&" "int8"
2445 ./make_store_indirect_test.sh indirect_store_i1_2 valid "stind.i1" "bool\&" "int8"
2446 ./make_store_indirect_test.sh indirect_store_i1_3 valid "stind.i1" "int8\&" "bool"
2447 ./make_store_indirect_test.sh indirect_store_i1_4 valid "stind.i1" "bool\&" "bool"
2448
2449 ./make_store_indirect_test.sh indirect_store_i2_1 valid "stind.i2" "int16\&" "int16"
2450 ./make_store_indirect_test.sh indirect_store_i2_2 valid "stind.i2" "char\&" "int16"
2451 ./make_store_indirect_test.sh indirect_store_i2_3 valid "stind.i2" "int16\&" "char"
2452 ./make_store_indirect_test.sh indirect_store_i2_4 valid "stind.i2" "char\&" "char"
2453
2454 ./make_store_indirect_test.sh indirect_store_i4_1 valid "stind.i4" "int32\&" "int32"
2455 ./make_store_indirect_test.sh indirect_store_i4_2 valid "stind.i4" "native int\&" "int32"
2456 ./make_store_indirect_test.sh indirect_store_i4_3 valid "stind.i4" "int32\&" "native int"
2457 ./make_store_indirect_test.sh indirect_store_i4_4 valid "stind.i4" "native int\&" "native int"
2458
2459
2460 ./make_store_indirect_test.sh indirect_store_i8_1 valid "stind.i8" "int64\&" "int64"
2461
2462 ./make_store_indirect_test.sh indirect_store_r4_1 valid "stind.r4" "float32\&" "float32"
2463
2464 ./make_store_indirect_test.sh indirect_store_r8_1 valid "stind.r8" "float64\&" "float64"
2465
2466 ./make_store_indirect_test.sh indirect_store_i_1 valid "stind.i" "native int\&" "int32"
2467 ./make_store_indirect_test.sh indirect_store_i_2 valid "stind.i" "int32\&" "int32"
2468 ./make_store_indirect_test.sh indirect_store_i_3 valid "stind.i" "native int\&" "native int"
2469 ./make_store_indirect_test.sh indirect_store_i_4 valid "stind.i" "int32\&" "native int"
2470
2471 ./make_store_indirect_test.sh indirect_store_r_1 valid "stind.ref" "object\&" "object"
2472 ./make_store_indirect_test.sh indirect_store_r_2 valid "stind.ref" "object\&" "string"
2473 ./make_store_indirect_test.sh indirect_store_r_3 valid "stind.ref" "string\&" "string"
2474 ./make_store_indirect_test.sh indirect_store_r_4 unverifiable "stind.ref" "valuetype MyStruct\&" "MyStruct"
2475
2476
2477
2478
2479 #stdind tests
2480 #unverifiable due to unmanaged pointers
2481 ./make_store_indirect_test.sh indirect_store_unmanaged_pointer_1 unverifiable "stind.i1" "int8*" "int8"
2482 ./make_store_indirect_test.sh indirect_store_unmanaged_pointer_2 unverifiable "stind.i1" "native int" "int8"
2483
2484 #invalid due to unrelated types on stack
2485 ./make_store_indirect_test.sh indirect_store_bad_type_1 unverifiable "stind.i1" "int8" "int8"
2486 ./make_store_indirect_test.sh indirect_store_bad_type_2 unverifiable "stind.i1" "int8" "int8"
2487
2488 #invalid stind.ref with valuetypes
2489 ./make_store_indirect_test.sh indirect_store_bad_type_r_3 valid "stind.ref" "int32[]\&" "int32[]"
2490
2491 #invalid operands
2492 I=1
2493 for TYPE1 in "int16" "char" "int32" "native int"
2494 do
2495         ./make_store_indirect_test.sh indirect_store_bad_addr_i1_${I} unverifiable "stind.i1" "${TYPE1}\&" "int8"
2496         ./make_store_indirect_test.sh indirect_store_good_val_i1_${I} valid "stind.i1" "int8\&" "${TYPE1}"
2497         I=`expr $I + 1`
2498 done
2499
2500 for TYPE1 in  "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2501 do
2502         ./make_store_indirect_test.sh indirect_store_bad_addr_i1_${I} unverifiable "stind.i1" "${TYPE1}\&" "int8"
2503         ./make_store_indirect_test.sh indirect_store_bad_val_i1_${I} unverifiable "stind.i1" "int8\&" "${TYPE1}"
2504         I=`expr $I + 1`
2505 done
2506
2507
2508 I=1
2509 for TYPE1 in "int8" "bool" "int32" "native int"
2510 do
2511         ./make_store_indirect_test.sh indirect_store_bad_addr_i2_${I} unverifiable "stind.i2" "${TYPE1}\&" "int16"
2512         ./make_store_indirect_test.sh indirect_store_good_val_i2_${I} valid "stind.i2" "int16\&" "${TYPE1}" 
2513         I=`expr $I + 1`
2514 done
2515
2516 for TYPE1 in "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2517 do
2518         ./make_store_indirect_test.sh indirect_store_bad_addr_i2_${I} unverifiable "stind.i2" "${TYPE1}\&" "int16"
2519         ./make_store_indirect_test.sh indirect_store_bad_val_i2_${I} unverifiable "stind.i2" "int16\&" "${TYPE1}" 
2520         I=`expr $I + 1`
2521 done
2522
2523
2524 I=1
2525 for TYPE1 in "int8" "bool" "int16" "char"
2526 do
2527         ./make_store_indirect_test.sh indirect_store_bad_addr_i4_${I} unverifiable "stind.i4" "${TYPE1}\&" "int32"
2528         ./make_store_indirect_test.sh indirect_store_good_val_i4_${I} valid "stind.i4" "int32\&" "${TYPE1}"
2529         I=`expr $I + 1`
2530 done
2531
2532 for TYPE1 in  "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2533 do
2534         ./make_store_indirect_test.sh indirect_store_bad_addr_i4_${I} unverifiable "stind.i4" "${TYPE1}\&" "int32"
2535         ./make_store_indirect_test.sh indirect_store_bad_val_i4_${I} unverifiable "stind.i4" "int32\&" "${TYPE1}"
2536         I=`expr $I + 1`
2537 done
2538
2539
2540 I=1
2541 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>"
2542 do
2543         ./make_store_indirect_test.sh indirect_store_bad_addr_i8_${I} unverifiable "stind.i8" "${TYPE1}\&" "int64"
2544         ./make_store_indirect_test.sh indirect_store_bad_val_i8_${I} unverifiable "stind.i8" "int64\&" "${TYPE1}"
2545         I=`expr $I + 1`
2546 done
2547
2548
2549 I=1
2550 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>"
2551 do
2552         ./make_store_indirect_test.sh indirect_store_bad_addr_r4_${I} unverifiable "stind.r4" "${TYPE1}\&" "float32"
2553         if [ "$TYPE1" == "float64" ]; then
2554                 ./make_store_indirect_test.sh indirect_store_good_val_r4_${I} valid "stind.r4" "float32\&" "${TYPE1}"
2555         else
2556                 ./make_store_indirect_test.sh indirect_store_bad_val_r4_${I} unverifiable "stind.r4" "float32\&" "${TYPE1}"
2557         fi
2558         I=`expr $I + 1`
2559 done
2560
2561
2562 I=1
2563 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>"
2564 do
2565         ./make_store_indirect_test.sh indirect_store_bad_addr_r8_${I} unverifiable "stind.r8" "${TYPE1}\&" "float64"
2566         if [ "$TYPE1" == "float32" ]; then
2567                 ./make_store_indirect_test.sh indirect_store_good_val_r8_${I} valid "stind.r8" "float64\&" "${TYPE1}";
2568         else
2569                 ./make_store_indirect_test.sh indirect_store_bad_val_r8_${I} unverifiable "stind.r8" "float64\&" "${TYPE1}";
2570         fi
2571         I=`expr $I + 1`
2572 done
2573
2574
2575 I=1
2576 for TYPE1 in "int8" "bool" "int16" "char"
2577 do
2578         ./make_store_indirect_test.sh indirect_store_bad_addr_i_${I} unverifiable "stind.i" "${TYPE1}\&" "native int" 
2579         ./make_store_indirect_test.sh indirect_store_good_val_i_${I} valid "stind.i" "native int\&" "${TYPE1}"
2580         I=`expr $I + 1`
2581 done
2582
2583 for TYPE1 in "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
2584 do
2585         ./make_store_indirect_test.sh indirect_store_bad_addr_i_${I} unverifiable "stind.i" "${TYPE1}\&" "native int" 
2586         ./make_store_indirect_test.sh indirect_store_bad_val_i_${I} unverifiable "stind.i" "native int\&" "${TYPE1}"
2587         I=`expr $I + 1`
2588 done
2589
2590
2591 I=1
2592 for TYPE1 in "int8" "bool" "int16" "char" "int32" "int64" "float32" "float64" "native int"
2593 do
2594         ./make_store_indirect_test.sh indirect_store_bad_addr_ref_${I} unverifiable "stind.ref" "${TYPE1}\&" "object"
2595         ./make_store_indirect_test.sh indirect_store_bad_val_ref_${I} unverifiable "stind.ref" "object\&" "${TYPE1}"
2596         I=`expr $I + 1`
2597 done
2598
2599
2600 #underflow
2601 ./make_newobj_test.sh newobj_underflow invalid "newobj instance void class ClassA::.ctor(int32,int32)" "int32" "int32"
2602
2603 #good simple cases
2604 ./make_newobj_test.sh newobj_good_instantiation_1 valid "newobj instance void class ClassA::.ctor(int32)" "int32" "int32"
2605 ./make_newobj_test.sh newobj_good_instantiation_2 valid "newobj instance void class ClassA::.ctor(int32)" "native int" "int32"
2606 ./make_newobj_test.sh newobj_good_instantiation_3 valid "newobj instance void class ClassA::.ctor(native int)" "int32" "native int"
2607 ./make_newobj_test.sh newobj_good_instantiation_4 valid "newobj instance void class ClassA::.ctor(native int)" "int32" "native int"
2608 ./make_newobj_test.sh newobj_good_instantiation_5 valid "ldloc.0\n\tnewobj instance void int32[,]::.ctor(int32, int32)" "int32" "native int"
2609 ./make_newobj_test.sh newobj_good_instantiation_6 valid "newobj instance void class ClassA::.ctor(typedref)" "typedref" "typedref"
2610
2611 #unverifable types
2612 ./make_newobj_test.sh newobj_unverifiable_types_1 unverifiable "newobj instance void class ClassA::.ctor(int32*)" "int32*" "int32*"
2613 ./make_newobj_test.sh newobj_unverifiable_types_2 unverifiable "newobj instance void class ClassA::.ctor(method int32 *(int32))" "method int32 *(int32)" "method int32 *(int32)"
2614
2615
2616
2617 #abstract type
2618 ./make_newobj_test.sh newobj_bad_inst_1 unverifiable "newobj instance void class AbsClass::.ctor()" "int32" "int32"
2619
2620 #bad types
2621 ./make_newobj_test.sh newobj_bad_args_1 unverifiable "newobj instance void class ClassA::.ctor(int32)" "int64" "int32"
2622 ./make_newobj_test.sh newobj_bad_args_2 unverifiable "newobj instance void class ClassA::.ctor(int32)" "object" "int32"
2623 ./make_newobj_test.sh newobj_bad_args_3 unverifiable "newobj instance void class ClassA::.ctor(int32)" "int32\&" "int32"
2624 ./make_newobj_test.sh newobj_bad_args_4 unverifiable "newobj instance void class ClassA::.ctor(int32)" "float32" "int32"
2625
2626 ./make_newobj_test.sh newobj_bad_args_5 unverifiable "newobj instance void class ClassA::.ctor(int64)" "int32" "int64"
2627 ./make_newobj_test.sh newobj_bad_args_6 unverifiable "newobj instance void class ClassA::.ctor(int64)" "object" "int64"
2628 ./make_newobj_test.sh newobj_bad_args_7 unverifiable "newobj instance void class ClassA::.ctor(int64)" "int32\&" "int64"
2629 ./make_newobj_test.sh newobj_bad_args_8 unverifiable "newobj instance void class ClassA::.ctor(int64)" "float32" "int64"
2630
2631 ./make_newobj_test.sh newobj_bad_args_9 unverifiable "newobj instance void class ClassA::.ctor(object)" "int64" "object"
2632 ./make_newobj_test.sh newobj_bad_args_10 unverifiable "newobj instance void class ClassA::.ctor(object)" "int32" "object"
2633 ./make_newobj_test.sh newobj_bad_args_11 unverifiable "newobj instance void class ClassA::.ctor(object)" "int32\&" "object"
2634 ./make_newobj_test.sh newobj_bad_args_12 unverifiable "newobj instance void class ClassA::.ctor(object)" "float32" "object"
2635
2636 ./make_newobj_test.sh newobj_bad_args_13 unverifiable "newobj instance void class ClassA::.ctor(float32)" "int64" "float32"
2637 ./make_newobj_test.sh newobj_bad_args_14 unverifiable "newobj instance void class ClassA::.ctor(float32)" "object" "float32"
2638 ./make_newobj_test.sh newobj_bad_args_15 unverifiable "newobj instance void class ClassA::.ctor(float32)" "int32\&" "float32"
2639 ./make_newobj_test.sh newobj_bad_args_16 unverifiable "newobj instance void class ClassA::.ctor(float32)" "int32" "float32"
2640
2641 ./make_newobj_test.sh newobj_bad_args_17 unverifiable "newobj instance void class ClassA::.ctor(typedref)" "int32" "typedref"
2642 ./make_newobj_test.sh newobj_bad_args_18 unverifiable "newobj instance void class ClassA::.ctor(typedref)" "object" "typedref"
2643 ./make_newobj_test.sh newobj_bad_args_19 unverifiable "newobj instance void class ClassA::.ctor(typedref)" "int32\&" "typedref"
2644 ./make_newobj_test.sh newobj_bad_args_20 unverifiable "newobj instance void class ClassA::.ctor(typedref)" "float32" "typedref"
2645
2646
2647 #calling something that it's not an instance constructor
2648
2649 ./make_newobj_test.sh newobj_method_not_ctor_1 invalid "newobj instance void class ClassA::ctor(int32)" "int32" "int32"
2650 ./make_newobj_test.sh newobj_method_not_ctor_2 invalid "newobj instance void class ClassA::sctor(int32)" "int32" "int32"
2651 ./make_newobj_test.sh newobj_method_not_ctor_1 invalid "pop\n\tnewobj instance void class ClassA::.cctor()" "int32" "int32"
2652
2653
2654 #ldlen tests
2655 ./make_ldlen_test.sh ldlen_int_array valid "ldc.i4.0\n\tnewarr int32"
2656 ./make_ldlen_test.sh ldlen_array_array valid "ldc.i4.0\n\tnewarr string[]"
2657
2658 ./make_ldlen_test.sh ldlen_multi_dyn_array unverifiable "ldc.i4.0\n\tldc.i4.0\n\tnewobj instance void string[,]::.ctor(int32, int32)"
2659
2660 #TODO add tests for arrays that are not zero-based
2661 #./make_ldlen_test.sh ldlen_size_bounded_array unverifiable "call int32[1...5] mkarr()"
2662
2663 ./make_ldlen_test.sh ldlen_empty_stack invalid "nop"
2664
2665 I=1
2666 for OP in "ldc.i4.0" "ldc.r4 0" " newobj instance void object::.ctor()"
2667 do
2668   ./make_ldlen_test.sh ldlen_bad_stuff_on_stack_${I} unverifiable "$OP"
2669   I=`expr $I + 1`
2670 done
2671
2672
2673 #ldelema
2674
2675 #TODO add tests for CMMP (read only prefix)
2676 #TODO add tests for arrays that are not zero-based
2677
2678 ./make_ldelema_test.sh ldelema_int_array valid "newarr int32" "ldc.i4.0" "int32"
2679 ./make_ldelema_test.sh ldelema_null_array valid "pop\n\tldnull" "ldc.i4.0" "int32"
2680
2681 ./make_ldelema_test.sh ldelema_int_array_native_int valid "newarr int32" "ldc.i4.0\n\tconv.i" "int32"
2682 ./make_ldelema_test.sh ldelema_null_array_native_int valid "pop\n\tldnull" "ldc.i4.0\n\tconv.i" "int32"
2683
2684
2685 ./make_ldelema_test.sh ldelema_empty_stack_1 invalid "pop" "nop" "int32"
2686 ./make_ldelema_test.sh ldelema_empty_stack_2 invalid "newarr int32" "nop" "int32"
2687 ./make_ldelema_test.sh ldelema_empty_stack_3 invalid "pop" "ldc.i4.0" "int32"
2688
2689 I=1
2690 for ARR in "int8" "int16" "int32" 
2691 do
2692  ./make_ldelema_test.sh ldelema_size_compat_${I} valid "newarr ${ARR}" "ldc.i4.0" "unsigned ${ARR}"
2693   I=`expr $I + 1`
2694 done
2695
2696 for ARR in "int8" "int16" "int32"
2697 do
2698  ./make_ldelema_test.sh ldelema_size_compat_${I} valid "newarr unsigned ${ARR}" "ldc.i4.0" "${ARR}"
2699   I=`expr $I + 1`
2700 done
2701
2702 ./make_ldelema_test.sh ldelema_size_compat_nat_1 valid "newarr native int" "ldc.i4.0" "native unsigned int"
2703 ./make_ldelema_test.sh ldelema_size_compat_nat_2 valid "newarr native unsigned int" "ldc.i4.0" "native int"
2704
2705
2706 ./make_ldelema_test.sh ldelema_misc_size_compat_1 valid "newarr bool" "ldc.i4.0" "int8"
2707 ./make_ldelema_test.sh ldelema_misc_size_compat_2 valid "newarr char" "ldc.i4.0" "int16"
2708 ./make_ldelema_test.sh ldelema_misc_size_compat_3 valid "newarr native int" "ldc.i4.0" "int32"
2709 ./make_ldelema_test.sh ldelema_misc_size_compat_4 valid "newarr native unsigned int" "ldc.i4.0" "int32"
2710
2711 ./make_ldelema_test.sh ldelema_misc_size_compat_5 valid "newarr int8" "ldc.i4.0" "bool" 
2712 ./make_ldelema_test.sh ldelema_misc_size_compat_6 valid "newarr int16" "ldc.i4.0" "char"
2713 ./make_ldelema_test.sh ldelema_misc_size_compat_7 valid "newarr int32" "ldc.i4.0" "native int"
2714 ./make_ldelema_test.sh ldelema_misc_size_compat_8 valid "newarr int32" "ldc.i4.0" "native unsigned int"
2715
2716 ./make_ldelema_test.sh ldelema_misc_size_compat_9 valid "newarr unsigned int8" "ldc.i4.0" "bool" 
2717 ./make_ldelema_test.sh ldelema_misc_size_compat_10 valid "newarr unsigned int16" "ldc.i4.0" "char"
2718 ./make_ldelema_test.sh ldelema_misc_size_compat_11 valid "newarr unsigned int32" "ldc.i4.0" "native int"
2719 ./make_ldelema_test.sh ldelema_misc_size_compat_12 valid "newarr unsigned int32" "ldc.i4.0" "native unsigned int"
2720
2721
2722 I=1
2723 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"
2724 do
2725  ./make_ldelema_test.sh ldelema_bad_array_${I} unverifiable "pop\n\t${ARR}" "ldc.i4.0" "int32"
2726   I=`expr $I + 1`
2727 done
2728
2729
2730 I=1
2731 for IDX in "newobj instance void object::.ctor()" "ldc.i8 0" "ldc.r4 0"
2732 do
2733  ./make_ldelema_test.sh ldelema_bad_index_${I} unverifiable "newarr int32" "${IDX}" "int32"
2734   I=`expr $I + 1`
2735 done
2736
2737 I=1
2738 for TOKEN in "object" "int64" "int32[]"
2739 do
2740 ./make_ldelema_test.sh ldelema_type_mismatch_${I} unverifiable "newarr int32" "ldc.i4.0" "${TOKEN}"
2741   I=`expr $I + 1`
2742 done
2743
2744 for TOKEN in "object" "int32"
2745 do
2746 ./make_ldelema_test.sh ldelema_type_mismatch_${I} unverifiable "newarr string" "ldc.i4.0" "${TOKEN}"
2747   I=`expr $I + 1`
2748 done
2749
2750 for TOKEN in "object" "int32" "ClassSubA"
2751 do
2752 ./make_ldelema_test.sh ldelema_type_mismatch_${I} unverifiable "newarr ClassA" "ldc.i4.0" "${TOKEN}"
2753   I=`expr $I + 1`
2754 done
2755
2756
2757 #ldelem.X
2758
2759 #TODO add tests for CMMP (read only prefix)
2760 #TODO add tests for arrays that are not zero-based
2761
2762
2763 I=1
2764 for ARR in "int8" "bool" "unsigned int8"
2765 do
2766         ./make_ldelem_test.sh ldelem_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.i1"
2767         ./make_ldelem_test.sh ldelem_base_types_u_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.u1"
2768         I=`expr $I + 1`
2769 done
2770
2771 for ARR in "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
2772 do
2773         ./make_ldelem_test.sh ldelem_base_types_i_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.i1"
2774         ./make_ldelem_test.sh ldelem_base_types_u_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.u1"
2775         I=`expr $I + 1`
2776 done
2777
2778
2779 for ARR in "int16" "char" "unsigned int16"
2780 do
2781         ./make_ldelem_test.sh ldelem_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.i2"
2782         ./make_ldelem_test.sh ldelem_base_types_u_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.u2"
2783         I=`expr $I + 1`
2784 done
2785
2786 for ARR in "int8" "bool" "unsigned int8" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
2787 do
2788         ./make_ldelem_test.sh ldelem_base_types_i_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.i2"
2789         ./make_ldelem_test.sh ldelem_base_types_u_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.u2"
2790         I=`expr $I + 1`
2791 done
2792
2793
2794 for ARR in "int32" "unsigned int32" "native int" "native unsigned int"
2795 do
2796         ./make_ldelem_test.sh ldelem_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.i4"
2797         ./make_ldelem_test.sh ldelem_base_types_u_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.u4"
2798         ./make_ldelem_test.sh ldelem_base_types_n_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.i"
2799         I=`expr $I + 1`
2800 done
2801
2802 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int64" "unsigned int64" "float32" "float64" "object"
2803 do
2804         ./make_ldelem_test.sh ldelem_base_types_i_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.i4"
2805         ./make_ldelem_test.sh ldelem_base_types_u_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.u4"
2806         ./make_ldelem_test.sh ldelem_base_types_n_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.i"
2807         I=`expr $I + 1`
2808 done
2809
2810
2811 for ARR in "int64" "unsigned int64"
2812 do
2813         ./make_ldelem_test.sh ldelem_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.i8"
2814         ./make_ldelem_test.sh ldelem_base_types_u_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.u8"
2815         I=`expr $I + 1`
2816 done
2817
2818 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "float32" "float64" "object"
2819 do
2820         ./make_ldelem_test.sh ldelem_base_types_i_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.i8"
2821         ./make_ldelem_test.sh ldelem_base_types_u_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.u8"
2822         I=`expr $I + 1`
2823 done
2824
2825
2826 for ARR in "float32"
2827 do
2828         ./make_ldelem_test.sh ldelem_base_types_f_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.r4"
2829         I=`expr $I + 1`
2830 done
2831
2832 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float64" "object"
2833 do
2834         ./make_ldelem_test.sh ldelem_base_types_f_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.r4"
2835         I=`expr $I + 1`
2836 done
2837
2838
2839 for ARR in "float64"
2840 do
2841         ./make_ldelem_test.sh ldelem_base_types_f_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.r8"
2842         I=`expr $I + 1`
2843 done
2844
2845 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "object"
2846 do
2847         ./make_ldelem_test.sh ldelem_base_types_f_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.r8"
2848         I=`expr $I + 1`
2849 done
2850
2851
2852 for ARR in "object" "string" "ClassA"
2853 do
2854         ./make_ldelem_test.sh ldelem_base_types_o_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.ref"
2855         I=`expr $I + 1`
2856 done
2857
2858 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" 
2859 do
2860         ./make_ldelem_test.sh ldelem_base_types_o_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.ref"
2861         I=`expr $I + 1`
2862 done
2863
2864 I=1
2865 for OP in i1 u1 i2 u2 i4 u4 i8 u8 r4 r8 i ref
2866 do
2867         ./make_ldelem_test.sh ldelem_null_array_${I} valid "pop\n\tldnull" "ldc.i4.0" "ldelem.${OP}"
2868         I=`expr $I + 1`
2869 done
2870
2871
2872 I=1
2873 for OP in i1 u1 i2 u2 i4 u4 i8 u8 r4 r8 i ref
2874 do
2875         ./make_ldelem_test.sh ldelem_empty_stack_1_${I} invalid "pop" "nop" "ldelem.${OP}"
2876         ./make_ldelem_test.sh ldelem_empty_stack_2_${I} invalid "newarr int32" "nop" "ldelem.${OP}"
2877         ./make_ldelem_test.sh ldelem_empty_stack_3_${I} invalid "pop" "ldc.i4.0" "ldelem.${OP}"
2878         I=`expr $I + 1`
2879 done
2880
2881 I=1
2882 for OP in i1 u1 i2 u2 i4 u4 i8 u8 r4 r8 i ref
2883 do
2884         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"
2885         do
2886          ./make_ldelem_test.sh ldelema_bad_array_${I} unverifiable "pop\n\t${ARR}" "ldc.i4.0" "ldelem.${OP}"
2887           I=`expr $I + 1`
2888         done
2889 done
2890
2891
2892 I=1
2893 for OP in i1 u1 i2 u2 i4 u4 i8 u8 r4 r8 i ref
2894 do
2895         for IDX in "newobj instance void object::.ctor()" "ldc.i8 0" "ldc.r4 0"
2896         do
2897          ./make_ldelem_test.sh ldelema_bad_index_${I} unverifiable "pop\n\tldnull" "${IDX}" "ldelem.${OP}"
2898           I=`expr $I + 1`
2899         done
2900 done
2901
2902
2903 #adicional tests for ldelem
2904 I=1
2905 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"
2906 do
2907         ./make_ldelem_test.sh ldelem_token_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem ${ARR}"
2908         I=`expr $I + 1`
2909 done
2910
2911
2912 #stdelem.X
2913 #TODO add tests for arrays that are not zero-based
2914
2915 I=1
2916 for ARR in "int8" "bool" "unsigned int8"
2917 do
2918         ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i1"
2919         I=`expr $I + 1`
2920 done
2921
2922 for ARR in "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
2923 do
2924         ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i1"
2925         I=`expr $I + 1`
2926 done
2927
2928
2929 for ARR in "int16" "char" "unsigned int16"
2930 do
2931         ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i2"
2932         I=`expr $I + 1`
2933 done
2934
2935 for ARR in "int8" "bool" "unsigned int8" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
2936 do
2937         ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i2"
2938         I=`expr $I + 1`
2939 done
2940
2941
2942 for ARR in "int32" "unsigned int32" "native int" "native unsigned int"
2943 do
2944         ./make_stelem_test.sh stelem_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0\n\tconv.i" "stelem.i4"
2945         ./make_stelem_test.sh stelem_base_types_i4_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i4"
2946         I=`expr $I + 1`
2947 done
2948
2949 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int64" "unsigned int64" "float32" "float64" "object"
2950 do
2951         ./make_stelem_test.sh stelem_base_types_i_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0\n\tconv.i" "stelem.i4"
2952         ./make_stelem_test.sh stelem_base_types_i4_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i4"
2953         I=`expr $I + 1`
2954 done
2955
2956
2957 for ARR in "int64" "unsigned int64"
2958 do
2959         ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i8 0" "stelem.i8"
2960         I=`expr $I + 1`
2961 done
2962
2963 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "float32" "float64" "object"
2964 do
2965         ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i8 0" "stelem.i8"
2966         I=`expr $I + 1`
2967 done
2968
2969
2970 for ARR in "float32"
2971 do
2972         ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.r4 0" "stelem.r4"
2973         I=`expr $I + 1`
2974 done
2975
2976 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float64" "object"
2977 do
2978         ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.r4 0" "stelem.r4"
2979         I=`expr $I + 1`
2980 done
2981
2982
2983 for ARR in "float64"
2984 do
2985         ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.r8 0" "stelem.r8"
2986         I=`expr $I + 1`
2987 done
2988
2989 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "object"
2990 do
2991         ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.r8 0" "stelem.r8"
2992         I=`expr $I + 1`
2993 done
2994
2995
2996 for ARR in "int32" "unsigned int32" "native int" "native unsigned int"
2997 do
2998         ./make_stelem_test.sh stelem_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0\n\tconv.i" "stelem.i"
2999         ./make_stelem_test.sh stelem_base_types_i4_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i"
3000         I=`expr $I + 1`
3001 done
3002
3003 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16"  "int64" "unsigned int64" "float32" "float64" "object"
3004 do
3005         ./make_stelem_test.sh stelem_base_types_i_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0\n\tconv.i" "stelem.i"
3006         ./make_stelem_test.sh stelem_base_types_i4_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i"
3007         I=`expr $I + 1`
3008 done
3009
3010
3011 for ARR in object ClassA ClassSubA
3012 do
3013         ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "newobj instance void ${ARR}::.ctor()" "stelem.ref"
3014         I=`expr $I + 1`
3015 done
3016
3017 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64"
3018 do
3019         ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.ref"
3020         I=`expr $I + 1`
3021 done
3022
3023
3024
3025 ./make_stelem_test.sh stelem_native_int_index valid "newarr int32" "ldc.i4.0\n\tconv.i" "ldc.i4.0" "stelem.i4"
3026
3027
3028 #tests with null arrays and values (for ref types)
3029
3030 I=1
3031 for OP in i1 i2 i4 i
3032 do
3033         ./make_stelem_test.sh stelem_null_array_index_i_${I} valid "pop\n\tldnull" "ldc.i4.0" "ldc.i4.0" "stelem.${OP}"
3034         I=`expr $I + 1`
3035 done
3036
3037 ./make_stelem_test.sh stelem_null_array_index_i8 valid "pop\n\tldnull" "ldc.i4.0" "ldc.i8 0" "stelem.i8"
3038 ./make_stelem_test.sh stelem_null_array_index_r4 valid "pop\n\tldnull" "ldc.i4.0" "ldc.r4 0" "stelem.r4"
3039 ./make_stelem_test.sh stelem_null_array_index_r8 valid "pop\n\tldnull" "ldc.i4.0" "ldc.r8 0" "stelem.r4"
3040 ./make_stelem_test.sh stelem_null_array_index_ref valid "pop\n\tldnull" "ldc.i4.0" "newobj instance void object::.ctor()" "stelem.ref"
3041
3042 ./make_stelem_test.sh stelem_null_value_1 valid "newarr object" "ldc.i4.0" "ldnull" "stelem.ref"
3043 ./make_stelem_test.sh stelem_null_value_2 valid "newarr string" "ldc.i4.0" "ldnull" "stelem.ref"
3044
3045 #both need to be reference types
3046 ./make_stelem_test.sh stelem_variance_1 valid "newarr object" "ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem.ref"
3047 ./make_stelem_test.sh stelem_variance_2 valid "newarr object" "ldc.i4.0" "newobj instance void ClassSubA::.ctor()" "stelem.ref"
3048 ./make_stelem_test.sh stelem_variance_3 valid "newarr ClassA" "ldc.i4.0" "newobj instance void ClassSubA::.ctor()" "stelem.ref"
3049 ./make_stelem_test.sh stelem_variance_4 valid "newarr ClassSubA" "ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem.ref"
3050 ./make_stelem_test.sh stelem_variance_5 valid "newarr ClassSubA" "ldc.i4.0" "newobj instance void object::.ctor()" "stelem.ref"
3051 ./make_stelem_test.sh stelem_variance_6 valid "newarr string" "ldc.i4.0" "newobj instance void object::.ctor()" "stelem.ref"
3052
3053 ./make_stelem_test.sh stelem_value_type_1 unverifiable "newarr object" "ldc.i4.0" "ldloc.0" "stelem.ref"
3054 ./make_stelem_test.sh stelem_value_type_2 unverifiable "newarr object" "ldc.i4.0" "ldloca.s 0" "stelem.ref"
3055 ./make_stelem_test.sh stelem_value_type_3 unverifiable "newarr MyStruct" "ldc.i4.0" "newobj instance void object::.ctor()" "stelem.ref"
3056 ./make_stelem_test.sh stelem_value_type_4 unverifiable "newarr MyStruct" "ldc.i4.0" "ldloc.0" "stelem.ref"
3057 ./make_stelem_test.sh stelem_value_type_5 unverifiable "newarr MyStruct" "ldc.i4.0" "ldloca.s 0" "stelem.ref"
3058
3059
3060 #bad index values
3061 I=1
3062 for IDX in "ldc.i8 0" "ldc.r4 0" "ldc.r8 0" "newobj instance void ClassA::.ctor()"
3063 do
3064         ./make_stelem_test.sh stelem_bad_index_${I} unverifiable "newarr int32" "${IDX}" "ldc.i4.0" "stelem.i4"
3065         I=`expr $I + 1`
3066 done
3067
3068 #bad array values
3069 I=1
3070 for ARR in "ldc.i4.0" "ldc.i8 0" "ldc.r4 0" "ldc.r8 0" "newobj instance void ClassA::.ctor()"
3071 do
3072         ./make_stelem_test.sh stelem_bad_index_${I} unverifiable "pop\n\t${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i4"
3073         I=`expr $I + 1`
3074 done
3075
3076
3077 #empty stack
3078 ./make_stelem_test.sh stelem_empty_stack_1 invalid "newarr object" "ldc.i4.0" "pop" "stelem.ref"
3079 ./make_stelem_test.sh stelem_empty_stack_2 invalid "newarr object" "nop" "ldnull" "stelem.ref"
3080 ./make_stelem_test.sh stelem_empty_stack_3 invalid "newarr object" "nop" "nop" "stelem.ref"
3081 ./make_stelem_test.sh stelem_empty_stack_4 invalid "pop" "nop" "nop" "stelem.ref"
3082
3083
3084 #test with multi-dim array
3085 ./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"
3086
3087
3088
3089
3090 #adicional tests for stelem
3091 I=1
3092 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int"
3093 do
3094         ./make_stelem_test.sh stelem_token_basic_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem ${ARR}"
3095         I=`expr $I + 1`
3096 done
3097
3098 ./make_stelem_test.sh stelem_token_basic_types_i8 valid "newarr int64" "ldc.i4.0" "ldc.i8 0" "stelem int64"
3099 ./make_stelem_test.sh stelem_token_basic_types_r4 valid "newarr float32" "ldc.i4.0" "ldc.r4 0" "stelem float32"
3100 ./make_stelem_test.sh stelem_token_basic_types_r8 valid "newarr float64" "ldc.i4.0" "ldc.r8 0" "stelem float64"
3101
3102 I=1
3103 for TYPE in "object" "ClassA" "ClassSubA"
3104 do
3105         ./make_stelem_test.sh stelem_token_simple_ref_${I} valid "newarr object" "ldc.i4.0" "newobj instance void ${TYPE}::.ctor()" "stelem object"
3106         I=`expr $I + 1`
3107 done
3108
3109 #the array elem type must be a super type of the stelem token
3110 ./make_stelem_test.sh stelem_token_ref_1 valid "newarr object" "ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem ClassA"
3111 ./make_stelem_test.sh stelem_token_ref_2 valid "newarr ClassA" "ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem ClassA"
3112 ./make_stelem_test.sh stelem_token_ref_3 unverifiable "newarr ClassSubA" "ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem ClassA"
3113
3114 #the value type must be assignment compatible with token
3115 ./make_stelem_test.sh stelem_token_ref_4 valid "newarr object" "ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem ClassA"
3116 ./make_stelem_test.sh stelem_token_ref_5 valid "newarr object" "ldc.i4.0" "newobj instance void ClassSubA::.ctor()" "stelem ClassA"
3117 ./make_stelem_test.sh stelem_token_ref_6 unverifiable "newarr object" "ldc.i4.0" "newobj instance void object::.ctor()" "stelem ClassA"
3118
3119
3120
3121 #cast class and isins tests
3122
3123 #empty stack
3124 ./make_cast_test.sh cast_empty_stack invalid "int32" "nop" "castclass object"
3125 ./make_cast_test.sh isinst_empty_stack invalid "int32"  "nop" "isinst object"
3126
3127 #type
3128 I=1
3129 for OBJ in int32 int64 float32 float64 "int32\&" "valuetype MyStruct" "int32*" "typedref" "method int32 *(int32)"
3130 do
3131         ./make_cast_test.sh cast_object_${I} unverifiable "$OBJ" "ldloc.0" "castclass object"
3132         ./make_cast_test.sh isinst_object_${I} unverifiable "$OBJ" "ldloc.0" "isinst object"
3133         I=`expr $I + 1`
3134 done
3135
3136 for OBJ in "int32[]" "string"
3137 do
3138         ./make_cast_test.sh cast_object_${I} valid "$OBJ" "ldloc.0" "castclass object"
3139         ./make_cast_test.sh isinst_object_${I} valid "$OBJ" "ldloc.0" "isinst object"
3140         I=`expr $I + 1`
3141 done
3142 #token
3143
3144 I=1
3145 for TOKEN in int32 int64 float32 float64 "valuetype MyStruct" "int32*" "typedref" "int32[]" "string" "method int32 *(int32)"
3146 do
3147         ./make_cast_test.sh cast_token_${I} valid "object" "ldloc.0" "castclass $TOKEN"
3148         ./make_cast_test.sh isinst_token_${I} valid "object" "ldloc.0" "isinst $TOKEN"
3149         I=`expr $I + 1`
3150 done
3151
3152 for TOKEN in "int32\&"
3153 do
3154         ./make_cast_test.sh cast_token_${I} invalid "object" "ldloc.0" "castclass $TOKEN"
3155         ./make_cast_test.sh isinst_token_${I} invalid "object" "ldloc.0" "isinst $TOKEN"
3156         I=`expr $I + 1`
3157 done
3158
3159 #object
3160
3161 I=1
3162 for LOAD in "ldloc.0" "ldnull" 
3163 do
3164         ./make_cast_test.sh cast_good_obj_${I} valid "object" "$LOAD" "castclass object"
3165         ./make_cast_test.sh isinst_good_obj_${I} valid "object" "$LOAD" "isinst object"
3166         I=`expr $I + 1`
3167 done
3168
3169
3170
3171 #throw tests
3172
3173 #empty stack
3174 ./make_throw_test.sh throw_empty_stack invalid int32 pop
3175
3176 #null literal
3177 ./make_throw_test.sh throw_null_literal valid int32 "pop\n\tldnull"
3178
3179 #valid types
3180 I=1
3181 for TYPE in object string "[mscorlib]System.Exception" "int32[]" "ClassA" "class [mscorlib]System.IComparable\`1<int32>" "int32[,]"
3182 do
3183         ./make_throw_test.sh throw_ref_type_${I} valid "${TYPE}"
3184         I=`expr $I + 1`
3185 done
3186
3187 #invalid types
3188 I=1
3189 for TYPE in "valuetype MyStruct" int32 int64 float32 float64 "native int" "int32*" "typedref" "object\&"
3190 do
3191         ./make_throw_test.sh throw_value_type_${I} unverifiable "${TYPE}"
3192         I=`expr $I + 1`
3193 done
3194
3195
3196 # Exception block branch tests (see 2.19)
3197
3198 for I in {1..2};
3199 do
3200         ./make_rethrow_test.sh rethrow_from_catch_${I} invalid ${I}
3201 done
3202
3203 for I in {3..10};
3204 do
3205         ./make_rethrow_test.sh rethrow_from_catch_${I} valid ${I}
3206 done
3207
3208
3209
3210 # endfinally / endfault
3211
3212 for I in {1..7};
3213 do
3214         ./make_endfinally_test.sh endfinally_block_${I} invalid finally ${I}
3215         ./make_endfinally_test.sh endfault_block_${I} invalid fault ${I}
3216 done
3217
3218 for I in {8..9};
3219 do
3220         ./make_endfinally_test.sh endfinally_block_${I} valid finally ${I}
3221         ./make_endfinally_test.sh endfault_block_${I} valid fault ${I}
3222 done
3223
3224 #stack can have stuff and endfinally or endfault will just empty it
3225
3226 ./make_endfinally_test.sh endfinally_clean_stack valid finally 8 "ldc.i4.0"
3227 ./make_endfinally_test.sh endfault_clean_stack valid fault 8 "ldc.i4.0"
3228
3229
3230
3231 # endfilter
3232
3233 #valid endfilter
3234 ./make_endfilter_test.sh endfilter_at_end_of_filter_block valid 9
3235
3236 #endfilter outside protected block
3237 ./make_endfilter_test.sh endfilter_outside_protected_block invalid 1 "ldc.i4.1\n\t\tendfilter"
3238
3239 #endfilter inside bad protected block
3240 ./make_endfilter_test.sh endfilter_inside_protected_block_3 invalid 3 "ldc.i4.1\n\t\tendfilter"
3241 ./make_endfilter_test.sh endfilter_inside_protected_block_5 strict 5 "ldc.i4.1\n\t\tendfilter"
3242
3243 for I in {2,4,6};
3244 do
3245         ./make_endfilter_test.sh endfilter_inside_protected_block_${I} unverifiable ${I} "ldc.i4.1\n\t\tendfilter"
3246 done
3247
3248
3249 #endfilter is the first instruction
3250 ./make_endfilter_test.sh endfilter_first_instruction_of_filter_block invalid 7 "ldc.i4.1\n\tendfilter"
3251 ./make_endfilter_test.sh endfilter_in_the_midle_instruction_of_filter_block invalid 8 "ldc.i4.1\n\t\tendfilter"
3252
3253 #stack sizes
3254
3255 ./make_endfilter_test.sh endfilter_empty_stack strict 9 "pop"
3256 ./make_endfilter_test.sh endfilter_too_big strict 9 "ldc.i4.0"
3257
3258
3259 I=1
3260 for OP in "ldc.i8 0" "ldnull" "ldc.r4 0" "ldc.r8 1" "ldc.i4.0\n\t\tconv.i" "ldc.r8 99999"
3261 do
3262         ./make_endfilter_test.sh endfilter_bad_arg_${I} strict 9 "pop\t\n\n${OP}"
3263         I=`expr $I + 1`
3264 done
3265
3266
3267 # leave
3268
3269 #leave in all positions
3270
3271 EXTRA="ldloc.0\n\tbrfalse END"
3272
3273 #it's "OK" to use leave as a br
3274 ./make_leave_test.sh "filter_block_test_1" valid "1" "leave END" "$EXTRA"
3275
3276 #but not ok to leave finally or filter
3277 for I in {2..3};
3278 do
3279         ./make_leave_test.sh "filter_block_test_${I}" unverifiable "${I}" "leave END" "${EXTRA}_${I}"
3280 done
3281
3282 #neither is to branch to invalid regions of code
3283 ./make_leave_test.sh "filter_branch_before_start" invalid "1" "leave -400" "$EXTRA"
3284 ./make_leave_test.sh "filter_branch_after_end" invalid "1" "leave 400" "$EXTRA"
3285
3286
3287 # br.X
3288 #valid tests
3289 for I in {1..6}; do
3290         ./make_branch_test.sh branch_inside_same_block_${I} valid ${I} "br BLOCK_${I}";
3291         ./make_branch_test.sh branch_inside_same_block_${I}_s valid ${I} "br.s BLOCK_${I}";
3292 done
3293
3294 #branching outside of the protected block
3295 for I in {2..6}; do
3296         ./make_branch_test.sh branch_outside_protected_block_${I} unverifiable ${I} "br END";
3297 done
3298
3299 #branching to a protected block from the outside
3300 for I in {2..6}; do
3301         if [ "$I" == "4" ]; then
3302                 ./make_branch_test.sh branch_inside_protected_block_from_outside_${I}_finally invalid 1 "br BLOCK_${I}" "finally";
3303                 ./make_branch_test.sh branch_inside_protected_block_from_outside_${I}_fault invalid 1 "br BLOCK_${I}" "fault";
3304         else
3305                 ./make_branch_test.sh branch_inside_protected_block_from_outside_${I} unverifiable 1 "br BLOCK_${I}";
3306         fi
3307 done
3308
3309
3310 #branching out of range
3311 ./make_branch_test.sh branch_out_of_bounds_before_start invalid 1 "br -1000";
3312 ./make_branch_test.sh branch_out_of_bounds_after_end invalid 1 "br 1000";
3313
3314 #branching in the middle of an instruction
3315 ./make_branch_test.sh branch_middle_of_instruction invalid 1 "br 2";
3316
3317 #branching in between prefix and instruction 
3318 ./make_branch_test.sh branch_middle_of_instruction_prefix_1 invalid 1 "br AFTER_FIRST_PREFIX";
3319 ./make_branch_test.sh branch_middle_of_instruction_prefix_2 invalid 1 "br AFTER_SECOND_PREFIX";
3320
3321 #TODO test the encoding of the switch table
3322 # switch
3323 #valid tests
3324 for I in {1..6}; do
3325         ./make_switch_test.sh switch_inside_same_block_${I} valid ${I} "ldloc.0" "switch (BLOCK_${I}, BLOCK_${I}_B)";
3326 done
3327
3328 ./make_switch_test.sh switch_with_native_int_on_stack valid 1 "ldloc.1" "switch (BLOCK_1, BLOCK_1_B)";
3329
3330 #branching outside of the protected block
3331 for I in {2..6}; do
3332         ./make_switch_test.sh switch_outside_protected_block_${I} unverifiable ${I} "ldloc.0" "switch (END, BLOCK_1, BLOCK_1_B)";
3333 done
3334
3335 #branching to a protected block from the outside
3336 for I in {2..6}; do
3337         if [ "$I" == "4" ]; then
3338                 ./make_switch_test.sh switch_inside_protected_block_from_outside_${I}_finally invalid 1 "ldloc.0" "switch (BLOCK_${I}, BLOCK_${I}_B)" "finally";
3339                 ./make_switch_test.sh switch_inside_protected_block_from_outside_${I}_fault invalid 1 "ldloc.0" "switch (BLOCK_${I}, BLOCK_${I}_B)" "fault";
3340         else
3341                 ./make_switch_test.sh switch_inside_protected_block_from_outside_${I} unverifiable 1 "ldloc.0" "switch (BLOCK_${I}, BLOCK_${I}_B)";
3342         fi
3343 done
3344
3345 #TODO branching out of range (FIX ilasm first)
3346 #./make_switch_test.sh switch_out_of_bounds_before_start invalid 1 "ldloc.0" "switch (-1000, -2000)"
3347 #./make_switch_test.sh switch_out_of_bounds_after_end invalid 1 "ldloc.0" "switch (BLOCK_1, 1000, 1500)"
3348
3349 #empty stack
3350 ./make_switch_test.sh switch_empty_stack invalid 1 "nop" "switch (BLOCK_1, BLOCK_1_B)"
3351
3352 #wrong type on stack
3353 I=1
3354 for TYPE in "ldnull" "ldc.i8 0" "ldc.r4 0" "ldc.r8 0"
3355 do
3356         ./make_switch_test.sh switch_bad_type_on_stack_${I} unverifiable 1 "$TYPE" "switch (BLOCK_1, BLOCK_1_B)"
3357         I=`expr $I + 1`
3358 done
3359
3360 #switch landing in the middle of instructions
3361 #FIXME (ilasm don't work with offsets on switch statements)
3362 #./make_switch_test.sh switch_target_middle_of_instruction invalid 1 "ldloc.1" "switch (BLOCK_1, BLOCK_1)";
3363
3364 ./make_switch_test.sh switch_target_between_prefix_1 invalid 1 "ldloc.1" "switch (AFTER_FIRST_PREFIX, BLOCK_1)";
3365 ./make_switch_test.sh switch_target_between_prefix_2 invalid 1 "ldloc.1" "switch (AFTER_SECOND_PREFIX, BLOCK_1)";
3366 ./make_switch_test.sh switch_target_bad_merge_point invalid 1 "ldloc.1" "switch (INVALID_MERGE_POINT, BLOCK_1)";
3367
3368
3369 #TESTS for exception clauses. As described in P1 12.4.2.7.
3370 #regions must not overlap with each other
3371 ./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"
3372
3373 ./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" 
3374
3375 ./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"
3376
3377 ./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"
3378
3379 #blocks start in the middle of an intruction
3380 ./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"
3381
3382 ./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"
3383
3384 ./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"
3385
3386
3387 #block end in the middle of an instruction
3388 ./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"
3389
3390 ./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"
3391
3392
3393 #regions are disjoint
3394 ./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"
3395
3396 ./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"
3397
3398 #nesting
3399 ./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"
3400
3401 ./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"
3402
3403
3404 #mutual protectiong
3405 ./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"
3406
3407 ./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"
3408
3409 ./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"
3410
3411 ./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"
3412
3413 ./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"
3414
3415
3416 #ldftn
3417 ./make_ldftn_test.sh ldftn_static_method valid "ldftn void class Driver::Method()"
3418 ./make_ldftn_test.sh ldftn_virtual_method valid "ldftn instance void class Driver::VirtMethod()"
3419 ./make_ldftn_test.sh ldftn_corlib_method valid "ldftn instance string string::ToUpper()"
3420
3421 #this is encoded as a memberref
3422 ./make_ldftn_test.sh ldftn_bad_function invalid "ldftn void class Test::NonPresent()"
3423
3424 ./make_ldftn_test.sh ldftn_overflow invalid "ldftn instance void class Driver::Method()" "ldc.i4.0\n\tldc.i4.0"
3425
3426 ./make_ldftn_test.sh ldftn_ctor unverifiable "ldftn void class Test::.ctor()"
3427 ./make_ldftn_test.sh ldftn_static_method valid "ldftn void class Test::StaticMethod()"
3428 ./make_ldftn_test.sh ldftn_non_virtual_method valid "ldftn instance void class Test::Method()"
3429 ./make_ldftn_test.sh ldftn_virtual_method valid "ldftn instance void class Test::VirtMethod()"
3430
3431
3432 #ldvirtftn
3433 #TODO test visibility for ldftn and ldvirtftn
3434
3435 ./make_ldvirtftn_test.sh ldvirtftn_virt_method valid "ldvirtftn instance void class Test::VirtMethod()" "newobj void class Test::.ctor()"
3436 ./make_ldvirtftn_test.sh ldvirtftn_virt_underflow invalid "ldvirtftn instance void class Test::VirtMethod()" "nop"
3437 ./make_ldvirtftn_test.sh ldvirtftn_valid_obj_on_stack valid "ldvirtftn instance string object::ToString()" "newobj void object::.ctor()"
3438
3439 I=1
3440 for TYPE in "ldc.i4.0" "ldc.i8 0" "ldc.r4 2" "ldc.i4.1\n\tconv.i" "ldloca 0" "ldloc.1"
3441 do
3442         ./make_ldvirtftn_test.sh ldvirtftn_invalid_type_on_stack_${I} unverifiable "ldvirtftn instance string object::ToString()" "$TYPE"
3443         I=`expr $I + 1`
3444 done
3445
3446 ./make_ldvirtftn_test.sh ldvirtftn_non_virtual_method valid "ldvirtftn instance void class Test::Method()" "newobj void class Test::.ctor()"
3447
3448 ./make_ldvirtftn_test.sh ldvirtftn_ctor unverifiable "ldvirtftn void class Test::.ctor()" "newobj void class Test::.ctor()"
3449 ./make_ldvirtftn_test.sh ldvirtftn_static_method unverifiable "ldvirtftn void class Test::StaticMethod()" "newobj void class Test::.ctor()"
3450 ./make_ldvirtftn_test.sh ldvirtftn_method_not_present invalid "ldvirtftn void class Test::NonExistant()" "newobj void Test::.ctor()"
3451
3452
3453 ./make_ldvirtftn_test.sh ldvirtftn_method_stack_type_obj_compatible_1 valid "ldvirtftn instance string object::ToString()" "newobj void Test::.ctor()"
3454 ./make_ldvirtftn_test.sh ldvirtftn_method_stack_type_obj_compatible_2 valid "ldvirtftn void class Test::VirtMethod()" "newobj void Test::.ctor()"
3455 ./make_ldvirtftn_test.sh ldvirtftn_method_stack_type_obj_compatible_3 unverifiable "ldvirtftn void class Test::VirtMethod()" "newobj void object::.ctor()"
3456
3457
3458 #Delegates
3459 #ldftn delegates
3460 #pure native int
3461 ./make_delegate_test.sh delegate_with_native_int unverifiable "ldarg.1\n\tconv.i" "DelegateNoArg" "ldarg.0"
3462
3463 #random types
3464 I=1;
3465 for TYPE in "ldc.i4.0" "ldc.i8 0" "ldc.r4 0" "ldc.r8 1" "ldarga 1"
3466 do
3467         ./make_delegate_test.sh delegate_with_bad_type_${I} unverifiable "ldftn void Driver::Method()" "DelegateNoArg" "$TYPE"
3468         I=`expr $I + 1`
3469 done
3470
3471 #ldftn
3472 #static method
3473 ./make_delegate_test.sh delegate_ldftn_static_method_1 valid "ldftn void Driver::Method()" "DelegateNoArg" "ldnull"
3474 ./make_delegate_test.sh delegate_ldftn_static_method_2 valid "ldftn void Driver::Method2(int32)" "DelegateIntArg" "ldnull"
3475 ./make_delegate_test.sh delegate_ldftn_static_method_3 unverifiable "ldftn void Driver::Method2(int32)" "DelegateNoArg" "ldnull"
3476 ./make_delegate_test.sh delegate_ldftn_static_method_4 unverifiable "ldftn void Driver::Method()" "DelegateIntArg" "ldnull"
3477
3478 #non-virtual
3479 #null this
3480 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_1 valid "ldftn instance void Driver::NonVirtMethod()" "DelegateNoArg" "ldnull"
3481 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_2 valid "ldftn instance void Driver::NonVirtMethod2(int32)" "DelegateIntArg" "ldnull"
3482
3483 #method on this
3484 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_3 valid "ldftn instance void Driver::NonVirtMethod()" "DelegateNoArg" "newobj instance void class Driver::.ctor()"
3485 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_4 valid "ldftn instance void Driver::NonVirtMethod2(int32)" "DelegateIntArg" "newobj instance void class Driver::.ctor()"
3486 #method on parent
3487 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_5 valid "ldftn instance void Parent::ParentMethod()" "DelegateNoArg" "newobj instance void class Driver::.ctor()"
3488
3489 #invalid this
3490 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_6 unverifiable "ldftn instance void Driver::NonVirtMethod()" "DelegateNoArg" "newobj void object::.ctor()"
3491 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_7 unverifiable "ldftn instance void Driver::NonVirtMethod()" "DelegateNoArg" "newobj void Parent::.ctor()"
3492
3493 #virtual methods
3494 ./make_delegate_test.sh delegate_ldftn_virtual_method_1 valid "ldftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg.0"
3495 ./make_delegate_test.sh delegate_ldftn_virtual_method_2 valid "ldftn instance void Driver::VirtMethod2(int32)" "DelegateIntArg" "ldarg.0"
3496 ./make_delegate_test.sh delegate_ldftn_virtual_method_3 valid "ldftn instance void Driver::ParentVirtMethod()" "DelegateNoArg" "ldarg.0"
3497 ./make_delegate_test.sh delegate_ldftn_virtual_method_4 valid "ldftn instance void Parent::ParentVirtMethod()" "DelegateNoArg" "ldarg.0"
3498
3499 #other forms of ldarg
3500 ./make_delegate_test.sh delegate_ldftn_virtual_method_5 valid "ldftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg.s 0"
3501 ./make_delegate_test.sh delegate_ldftn_virtual_method_6 valid "ldftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg 0"
3502
3503 #object is not this
3504 ./make_delegate_test.sh delegate_ldftn_virtual_method_7 unverifiable "ldftn instance void Driver::VirtMethod()" "DelegateNoArg" "newobj instance void class Driver::.ctor()"
3505 ./make_delegate_test.sh delegate_ldftn_virtual_method_8 unverifiable "ldftn instance void Parent::VirtMethod()" "DelegateNoArg" "newobj instance void class Driver::.ctor()"
3506 ./make_delegate_test.sh delegate_ldftn_virtual_method_9 unverifiable "ldftn instance void Driver::ParentVirtMethod()" "DelegateNoArg" "newobj instance void class Driver::.ctor()"
3507 ./make_delegate_test.sh delegate_ldftn_virtual_method_10 unverifiable "ldftn instance void Parent::ParentVirtMethod()" "DelegateNoArg" "newobj instance void class Driver::.ctor()"
3508
3509 #static method
3510 ./make_delegate_test.sh delegate_ldftn_virtual_method_11 unverifiable "ldftn void Driver::VirtMethod()" "DelegateNoArg" "ldarg.0" "Driver"
3511 ./make_delegate_test.sh delegate_ldftn_virtual_method_12 unverifiable "ldftn void Parent::VirtMethod()" "DelegateNoArg" "ldarg.0" "Driver"
3512 ./make_delegate_test.sh delegate_ldftn_virtual_method_13 unverifiable "ldftn void Parent::ParentVirtMethod()" "DelegateNoArg" "ldarg.0" "Driver"
3513
3514 #final virtual
3515 ./make_delegate_test.sh delegate_ldftn_virtual_method_14 valid "ldftn instance void Driver::SealedVirtMethod()" "DelegateNoArg" "ldarg.0" "Driver"
3516 ./make_delegate_test.sh delegate_ldftn_virtual_method_15 unverifiable "ldftn instance void Parent::SealedVirtMethod()" "DelegateNoArg" "ldarg.0" "Driver"
3517 ./make_delegate_test.sh delegate_ldftn_virtual_method_16 unverifiable "ldftn instance void Parent::SealedVirtMethod()" "DelegateNoArg" "ldarg.0" "Parent"
3518
3519
3520 #instruction sequence
3521 ./make_delegate_test.sh delegate_ldftn_bad_sequence unverifiable "ldftn void Driver::Method()\n\t\tnop" "DelegateNoArg" "ldarg.0"
3522 #this one is terribly hard to read
3523
3524 ./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"
3525
3526 #it's not necessary to test split due to a protected block since the stack must be empty at the beginning.
3527
3528
3529 #virtual method with starg.0
3530 ./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"
3531 ./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"
3532
3533 #value types
3534 ./make_delegate_test.sh delegate_ldftn_non_virtual_method_valuetype valid "ldftn instance void MyValueType::NonVirtMethod()" "DelegateNoArg" "ldloc.0\n\tbox MyValueType"
3535 ./make_delegate_test.sh delegate_ldftn_virtual_method_valuetype valid "ldftn instance string MyValueType::ToString()" "ToStringDelegate" "ldloc.0\n\tbox MyValueType"
3536
3537 ./make_delegate_test.sh delegate_ldftn_virtual_method_valuetype_byref unverifiable "ldftn instance string MyValueType::ToString()" "ToStringDelegate" "ldloca 0"
3538
3539
3540 #ldvirtftn
3541 #ok cases
3542 ./make_delegate_test.sh delegate_ldvirtftn_non_virtual_method valid "ldvirtftn instance void Driver::NonVirtMethod()" "DelegateNoArg" "ldarg.0\n\tdup"
3543 ./make_delegate_test.sh delegate_ldvirtftn_virtual_method valid "ldvirtftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg.0\n\tdup"
3544
3545 #wrong instruction sequence
3546 ./make_delegate_test.sh delegate_ldvirtftn_bad_sequence unverifiable "ldvirtftn instance void Driver::VirtMethod()" "DelegateNoArg" "ldarg.0\n\tldarg.0"
3547
3548 ./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"
3549
3550 ./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"
3551
3552
3553 #tests for ovf opcodes
3554 I=1
3555 for OP in "add.ovf" "add.ovf.un" "mul.ovf" "mul.ovf.un" "sub.ovf" "sub.ovf.un" 
3556 do
3557         for TYPE in "object" "string" "float32" "float64" "int32*" "typedref" "int32[]" "int32[,]" "method int32 *(int32)"
3558         do
3559                 ./make_bin_test.sh bin_ovf_math_1_${I} unverifiable $OP int32 "${TYPE}"
3560                 ./make_bin_test.sh bin_ovf_math_2_${I} unverifiable $OP int64 "${TYPE}"
3561                 ./make_bin_test.sh bin_ovf_math_3_${I} unverifiable $OP "native int" "${TYPE}"
3562                 ./make_bin_test.sh bin_ovf_math_4_${I} unverifiable $OP "int32&" "${TYPE}"
3563                 I=`expr $I + 1`
3564         done
3565
3566         for TYPE in "int32" "native int"
3567         do
3568                 ./make_bin_test.sh bin_ovf_math_5_${I} valid $OP int32 "${TYPE}"
3569                 I=`expr $I + 1`
3570         done
3571
3572         for TYPE in "int32" "native int"
3573         do
3574                 ./make_bin_test.sh bin_ovf_math_6_${I} valid $OP "native int" "${TYPE}"
3575                 I=`expr $I + 1`
3576         done
3577 done
3578
3579 for OP in "add.ovf.un" "sub.ovf.un" 
3580 do
3581         for TYPE in "int32" "native int" "int32&"
3582         do
3583                 ./make_bin_test.sh bin_ovf_math_7_${I} unverifiable $OP "int32&" "${TYPE}"
3584                 I=`expr $I + 1`
3585         done
3586
3587         for TYPE in "int32" "native int" "int32&"
3588         do
3589                 ./make_bin_test.sh bin_ovf_math_8_${I} unverifiable $OP "${TYPE}" "int32&"
3590                 I=`expr $I + 1`
3591         done
3592 done
3593
3594 #should be invalid
3595 for OP in "add.ovf" "mul.ovf" "mul.ovf.un" "sub.ovf"
3596 do
3597         for TYPE in "int32" "native int" "int32&"
3598         do
3599                 ./make_bin_test.sh bin_ovf_math_7_${I} unverifiable $OP "int32&" "${TYPE}"
3600                 I=`expr $I + 1`
3601         done
3602
3603         for TYPE in "int32" "native int" "int32&"
3604         do
3605                 ./make_bin_test.sh bin_ovf_math_8_${I} unverifiable $OP "${TYPE}" "int32&"
3606                 I=`expr $I + 1`
3607         done
3608 done
3609
3610
3611 #unbox.any
3612
3613 ./make_unbox_any_test.sh unbox_any_valuetype valid object int32 "stloc.1" "ldc.i4.0\n\tbox int32"
3614 ./make_unbox_any_test.sh unbox_any_reference valid object string "stloc.1" "ldstr \"str\""
3615 ./make_unbox_any_test.sh unbox_any_reference_null valid object string "stloc.1" "ldnull"
3616
3617 #object is not a reference type
3618 I=1
3619 for TYPE in "ldc.i4.0" "ldc.i8 0" "ldc.r8 0" "ldloca 0" "ldc.i4.0\n\tconv.u"
3620 do
3621         ./make_unbox_any_test.sh unbox_any_bad_object_${I} unverifiable object int32 "stloc.1" "$TYPE"
3622         I=`expr $I + 1`
3623 done
3624
3625 #token is byref, byref-like or void
3626 ./make_unbox_any_test.sh unbox_any_bad_token_1 invalid object "int32\&" "pop" "ldnull"
3627 ./make_unbox_any_test.sh unbox_any_bad_token_2 unverifiable object typedref "pop" "ldnull"
3628 ./make_unbox_any_test.sh unbox_any_bad_token_3 invalid object void "pop" "ldnull"
3629
3630
3631
3632 #stobj
3633 #bad src
3634 I=1
3635 for TYPE in "int32" "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]" "native int"
3636 do
3637         ./make_stobj_test.sh stobj_simple_${I} valid "$TYPE" "$TYPE\&" "$TYPE" 
3638         I=`expr $I + 1`
3639 done
3640
3641
3642 for TYPE in "int32*" "typedref" "method int32 *(int32)"
3643 do
3644         ./make_stobj_test.sh stobj_simple_${I} unverifiable "$TYPE" "$TYPE\&" "$TYPE" 
3645         I=`expr $I + 1`
3646 done
3647
3648 for TYPE in "int32\&" "void"
3649 do
3650         ./make_stobj_test.sh stobj_simple_${I} invalid "$TYPE" "$TYPE\&" "$TYPE" 
3651         I=`expr $I + 1`
3652 done
3653
3654 #src should not be ptr or byref
3655 I=1
3656 for TYPE in "int32\&" "int32*" "typedref"
3657 do
3658         ./make_stobj_test.sh stobj_bad_src_${I} unverifiable "$TYPE" "int32\&" "int32" 
3659         I=`expr $I + 1`
3660 done
3661
3662 #dest type is not a managed pointer
3663 I=1
3664 for TYPE in "int32" "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]" "native int"
3665 do
3666         ./make_stobj_test.sh stobj_dest_not_managed_pointer_${I} unverifiable "$TYPE" "$TYPE" "$TYPE" 
3667         I=`expr $I + 1`
3668 done
3669
3670 #src is compat to dest
3671 I=1
3672 for TYPE in "int8" "unsigned int8" "bool" "int16" "unsigned int16" "char" "int32" "unsigned int32" "native int" "native unsigned int"
3673 do 
3674         ./make_stobj_test.sh stobj_src_compat_to_token_${I} valid "$TYPE" "int32\&" "int32" 
3675         I=`expr $I + 1`
3676 done
3677
3678 for TYPE in "int64" "unsigned int64" "float32" "float64" string object
3679 do 
3680         ./make_stobj_test.sh stobj_src_compat_to_token_${I} unverifiable "$TYPE" "int32\&" "int32" 
3681         I=`expr $I + 1`
3682 done
3683
3684 for TYPE in string object Class
3685 do 
3686         ./make_stobj_test.sh stobj_src_compat_to_token_${I} valid "$TYPE" "object\&" "object" 
3687         I=`expr $I + 1`
3688 done
3689
3690 ./make_stobj_test.sh stobj_src_compat_to_token_boxed_vt valid "int32" "object\&" "object" "box int32"
3691 ./make_stobj_test.sh stobj_src_compat_to_token_null_literal valid "object" "object\&" "object" "pop\n\tldnull"
3692
3693
3694 #token type subtype of dest_type
3695 for TYPE in string object Class "int32[]" "int32[,]"
3696 do 
3697         ./make_stobj_test.sh stobj_token_subtype_of_dest_${I} valid "$TYPE" "object\&" "$TYPE" 
3698         I=`expr $I + 1`
3699 done
3700
3701
3702
3703
3704 #initobj
3705 I=1
3706 for TYPE in int32 int64 float32 float64 object string MyStruct Class "valuetype StructTemplate\`1<object>" "native int"
3707 do
3708         ./make_initobj_test.sh initobj_good_types_${I} valid "${TYPE}\&" "${TYPE}"
3709         I=`expr $I + 1`
3710 done
3711
3712 #pointers
3713 I=1
3714 for TYPE in "native int" "int32*"
3715 do
3716         ./make_initobj_test.sh initobj_pointer_like_types_${I} unverifiable "${TYPE}" "${TYPE}"
3717         I=`expr $I + 1`
3718 done
3719
3720 #bad dest
3721 I=1
3722 for TYPE in int32 int64 float32 float64 string MyStruct typedref
3723 do
3724         ./make_initobj_test.sh initobj_wrong_on_stack_types_${I} unverifiable "${TYPE}" "${TYPE}"
3725         I=`expr $I + 1`
3726 done
3727
3728
3729 #invalid token
3730 I=1
3731 for TYPE in "int32\&" void
3732 do
3733         ./make_initobj_test.sh initobj_bad_token_type_${I} invalid "int32\&" "${TYPE}"
3734         I=`expr $I + 1`
3735 done
3736
3737 #bad token
3738 I=1
3739 for TYPE in int64 float32 float64 object string MyStruct Class "valuetype StructTemplate\`1<object>"
3740 do
3741         ./make_initobj_test.sh initobj_wrong_type_on_stack_${I} unverifiable "int32\&" "${TYPE}"
3742         I=`expr $I + 1`
3743 done
3744
3745 #type and token are compatible
3746 ./make_initobj_test.sh initobj_compatible_type_on_stack_1 valid "int32\&" "native int"
3747 ./make_initobj_test.sh initobj_compatible_type_on_stack_2 strict "object\&" "string"
3748 ./make_initobj_test.sh initobj_compatible_type_on_stack_3 unverifiable "string\&" "object"
3749
3750 ./make_initobj_test.sh initobj_stack_underflow invalid "int32\&" "int32" "pop"
3751
3752 ./make_initobj_test.sh initobj_null_literal unverifiable "int32\&" "int32" "pop\n\tldnull"
3753 ./make_initobj_test.sh initobj_boxed_value unverifiable "int32\&" "int32" "pop\n\tldc.i4.0\n\tbox int32"
3754
3755
3756
3757 #cpobj
3758 I=1
3759 for TYPE in int32 int64 float32 float64 object string "valuetype MyStruct" "int32[]" "int32[,]" "native int"
3760 do
3761         ./make_cpobj_test.sh cpobj_simple_${I} valid "${TYPE}\&" "${TYPE}\&" "${TYPE}"
3762         I=`expr $I + 1`
3763 done
3764
3765 #should be able to use unmanaged types
3766 for TYPE in "int32*" "typedref" "method int32 *(int32)"
3767 do
3768         ./make_cpobj_test.sh cpobj_simple_${I} unverifiable "${TYPE}\&" "${TYPE}\&" "${TYPE}"
3769         I=`expr $I + 1`
3770 done
3771
3772 #should be able to use invalid types
3773 for TYPE in "int32\&" "void"
3774 do
3775         ./make_cpobj_test.sh cpobj_simple_${I} invalid "${TYPE}\&" "${TYPE}\&" "${TYPE}"
3776         I=`expr $I + 1`
3777 done
3778
3779 #src not a managed pointer
3780 I=1
3781 for TYPE in "int32" "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]" "native int"
3782 do
3783         ./make_cpobj_test.sh cpobj_src_not_byref_${I} unverifiable "${TYPE}" "${TYPE}\&" "${TYPE}"
3784         I=`expr $I + 1`
3785 done
3786
3787 #dest not a managed pointer
3788 I=1
3789 for TYPE in "int32" "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]" "native int"
3790 do
3791         ./make_cpobj_test.sh cpobj_dest_not_byref_${I} unverifiable "${TYPE}\&" "${TYPE}" "${TYPE}"
3792         I=`expr $I + 1`
3793 done
3794
3795 #src and dest not a managed pointer
3796 I=1
3797 for TYPE in "int32" "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]" "native int"
3798 do
3799         ./make_cpobj_test.sh cpobj_src_and_dest_not_byref_${I} unverifiable "${TYPE}" "${TYPE}" "${TYPE}"
3800         I=`expr $I + 1`
3801 done
3802
3803
3804 #bad token type
3805 I=1
3806 for TYPE in "int32\&" "void"
3807 do
3808         ./make_cpobj_test.sh cpobj_bad_token_type_${I} invalid "int32\&" "int32\&" "${TYPE}"
3809         I=`expr $I + 1`
3810 done
3811
3812 #src compat to token
3813 ./make_cpobj_test.sh cpobj_src_compat_1 valid "int32\&" "int32\&" "native int"
3814 ./make_cpobj_test.sh cpobj_src_compat_2 valid "native int\&" "int32\&" "int32"
3815
3816 ./make_cpobj_test.sh cpobj_src_compat_3 valid "string\&" "object\&" "object"
3817 ./make_cpobj_test.sh cpobj_src_compat_4 valid "Class\&" "object\&" "object"
3818
3819 ./make_cpobj_test.sh cpobj_src_compat_5 unverifiable "object\&" "string\&" "string"
3820 ./make_cpobj_test.sh cpobj_src_compat_6 unverifiable "object\&" "Class\&" "Class"
3821
3822
3823 #src not compat to token
3824 I=1
3825 for TYPE in  "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]"
3826 do
3827         ./make_cpobj_test.sh cpobj_src_not_compat_to_token_${I} unverifiable "${TYPE}\&" "int32\&" "int32"
3828         I=`expr $I + 1`
3829 done
3830
3831 #token compat to dest
3832 ./make_cpobj_test.sh cpobj_token_compat_1 valid "int32\&" "int32\&" "native int"
3833 ./make_cpobj_test.sh cpobj_token_compat_2 valid "int32\&" "native int\&" "int32"
3834
3835 ./make_cpobj_test.sh cpobj_token_compat_3 valid "Class\&" "object\&" "Class"
3836 ./make_cpobj_test.sh cpobj_token_compat_4 valid "string\&" "object\&" "string"
3837
3838 ./make_cpobj_test.sh cpobj_token_compat_5 unverifiable "object\&" "Class\&" "object"
3839 ./make_cpobj_test.sh cpobj_token_compat_6 unverifiable "object\&" "string\&" "object"
3840
3841 #token to compat to dest
3842 I=1
3843 for TYPE in  "int64" "float32" "float64" Class MyStruct string object "int32[]" "int32[,]"
3844 do
3845         ./make_cpobj_test.sh cpobj_token_not_compat_to_dest${I} unverifiable "int32\&" "int32\&" "${TYPE}"
3846         I=`expr $I + 1`
3847 done
3848
3849 #src and dest not a managed pointer
3850 ./make_cpobj_test.sh cpobj_bad_src_and_dest unverifiable "int32" "int32" "int32"
3851
3852 #src or dest are null or boxed
3853 ./make_cpobj_test.sh cpobj_src_is_null unverifiable "int32\&" "int32\&" "int32" "pop\n\tldnull"
3854 ./make_cpobj_test.sh cpobj_dest_is_null unverifiable "int32\&" "int32\&" "int32" "pop\n\tpop\n\tldnull\n\tldloc.0"
3855
3856 ./make_cpobj_test.sh cpobj_src_is_boxed unverifiable "int32" "int32\&" "int32" "box int32"
3857 ./make_cpobj_test.sh cpobj_dest_is_boxed unverifiable "int32\&" "int32" "int32" "pop\n\tbox int32\n\tldloc.0"
3858
3859 ./make_cpobj_test.sh cpobj_underflow_1 invalid "int32\&" "int32\&" "int32" "pop"
3860 ./make_cpobj_test.sh cpobj_underflow_2 invalid "int32\&" "int32\&" "int32" "pop\n\tpop"
3861
3862
3863
3864 #sizeof
3865 I=1
3866 for TYPE in int32 object string "int32[]" "native int" "int32[,]" typedref "int32*" "method int32 *(int32)" "class Template\`1<int32>" "valuetype MyStruct"
3867 do
3868         ./make_sizeof_test.sh sizeof_${I} valid "$TYPE"
3869         I=`expr $I + 1`
3870 done
3871
3872 for TYPE in void "int32&"
3873 do
3874         ./make_sizeof_test.sh sizeof_${I} invalid "$TYPE"
3875         I=`expr $I + 1`
3876 done
3877
3878
3879