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