6 ./make_stack_0_test.sh invalid "$OP"
9 for OP in 'stloc.0' 'stloc.s 0' 'stfld int32 Class::fld' pop ret
11 ./make_stack_0_test.sh invalid "$OP"
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
16 ./make_stack_0_pop_test.sh "$OP"
19 for OP in add and ceq cgt clt div dup mul or rem shl shr sub xor 'stfld int32 Class::fld'
21 ./make_stack_1_pop_test.sh "$OP" int32
24 # Table 2: Binary Numeric Operators
26 for OP in add div mul rem sub
28 if [ "$OP" == "div" ] || [ "$OP" == "rem" ]; then
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}"
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}"
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}"
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}"
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}"
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}"
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}"
78 for OP in div mul rem sub
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&'
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&'
95 if [ "$OP" == "div" ] || [ "$OP" == "div" ]; then
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}"
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'
113 for OP in div mul rem add
115 if [ "$OP" == "div" ] || [ "$OP" == "div" ]; then
120 ./make_bin_test.sh bin_num_op_30_${I} unverifiable $OP 'int32&' 'int32&' "ldnull" "${INIT}"
126 ./make_bin_test.sh bin_num_op_30_${I} unverifiable $OP 'int32&' 'int32&'
130 # Table 4: Binary Comparison or Branch Operations
132 for OP in ceq cgt clt
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
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
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
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
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
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&'
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
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'
184 # Table 5: Integer Operations
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
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
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
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
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
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
228 for TYPE in bool int8 int16 char int32 int64 'native int' 'class Int8Enum'
230 ./make_unary_test.sh not_${I} valid "not\n\tpop" "$TYPE"
234 for TYPE in 'int32&' object "class MyStruct" typedref "method int32 *(int32)" 'class Template\`1<int32>' float32 float64
236 ./make_unary_test.sh not_${I} unverifiable "not\n\tpop" "$TYPE"
241 for TYPE in bool int8 int16 char int32 int64 'native int' 'class Int8Enum' float32 float64
243 ./make_unary_test.sh neg_${I} valid "neg\n\tpop" "$TYPE"
247 for TYPE in 'int32&' object "class MyStruct" typedref "method int32 *(int32)" 'class Template\`1<int32>'
249 ./make_unary_test.sh neg_${I} unverifiable "neg\n\tpop" "$TYPE"
254 # Table 6: Shift Operators
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
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
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
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
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
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
296 # Table 8: Conversion Operations
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"
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'
303 ./make_unary_test.sh conv_op_${J}_${I} valid $OP "$TYPE"
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>&'
309 ./make_unary_test.sh conv_op_${J}_${I} unverifiable $OP "$TYPE"
316 #local and argument store with invalid values lead to unverifiable code
318 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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&'
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
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
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
422 #valid coersion between native int and int32
424 for OP in stloc.0 "starg 0"
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
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"
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
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"
441 #test for unverifiable types
444 for OP in "stloc.0" "starg 0"
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)"
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&"
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&"
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&"
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&"
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&"
477 if [ "$3" != "" ]; then
479 elif [ "$2" != "" ]; then
485 if [ "$A" == "bool&" ]; then
487 elif [ "$A" == "char&" ]; then
494 #Tests related to storing reference types on other reference types
496 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
498 for TYPE1 in 'native int&' 'native unsigned int&'
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&'
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"
511 ./make_store_test.sh ref_coercion_${I} unverifiable "$OP" "$TYPE1" "$TYPE2"
519 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
521 for TYPE1 in 'int8&' 'unsigned int8&' 'bool&' 'int16&' 'unsigned int16&' 'char&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&'
523 for TYPE2 in 'int8&' 'unsigned int8&' 'bool&' 'int16&' 'unsigned int16&' 'char&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&'
527 if [ "$TA" == "$TB" ]; then
528 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
530 ./make_store_test.sh ref_coercion_${I} unverifiable "$OP" "$TYPE1" "$TYPE2"
537 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
539 for TYPE1 in 'class ClassA&' 'class ClassB&' 'class InterfaceA&' 'class InterfaceB&' 'class ValueType&'
541 for TYPE2 in 'class ClassA&' 'class ClassB&' 'class InterfaceA&' 'class InterfaceB&' 'class ValueType&'
543 if [ "$TYPE1" == "$TYPE2" ]; then
544 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
546 ./make_store_test.sh ref_coercion_${I} unverifiable "$OP" "$TYPE1" "$TYPE2"
553 #Field store parameter compatibility leads to invalid code
554 #Calling method with diferent verification types on stack lead to invalid code
556 for OP in "stfld TYPE1 Class::fld" "stsfld TYPE1 Class::sfld\n\tpop" "call void Class::Method(TYPE1)"
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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&'
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
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
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
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"
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
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"
670 for OP in "call void Class::Method(TYPE1)"
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"
680 # 1.8.1.2.3 Verification type compatibility (Assignment compatibility)
682 for OP in stloc.0 "stloc.s 0" "starg.s 0"
684 # ClassB not subtype of ClassA.
685 ./make_store_test.sh assign_compat_1_${I} unverifiable "$OP" 'class ClassA' 'class ClassB'
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'
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'
695 ./make_store_test.sh assign_compat_5_${I} unverifiable "$OP" 'string []' 'string[,]'
698 ./make_store_test.sh assign_compat_6_${I} unverifiable "$OP" 'string [,]' 'string[]'
700 # Arrays with different rank.
701 ./make_store_test.sh assign_compat_7_${I} unverifiable "$OP" 'string [,]' 'string[,,]'
703 # Method pointers with different return types.
704 ./make_store_test.sh assign_compat_8_${I} unverifiable "$OP" 'method int32 *(int32)' 'method float32 *(int32)'
706 # Method pointers with different parameters.
707 ./make_store_test.sh assign_compat_9_${I} unverifiable "$OP" 'method int32 *(float64)' 'method int32 *(int32)'
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)'
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)'
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)'
720 for OP in "stfld TYPE1 Class::fld" "stsfld TYPE1 Class::sfld\n\tpop" "call void Class::Method(TYPE1)"
722 # ClassB not subtype of ClassA.
723 ./make_obj_store_test.sh assign_compat_1_${I} unverifiable "$OP" 'class ClassA' 'class ClassB'
725 # object not subtype of ClassA.
726 ./make_obj_store_test.sh assign_compat_2_${I} unverifiable "$OP" 'class ClassA' 'object'
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'
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'
736 ./make_obj_store_test.sh assign_compat_5_${I} unverifiable "$OP" 'string []' 'string[,]'
739 ./make_obj_store_test.sh assign_compat_6_${I} unverifiable "$OP" 'string [,]' 'string[]'
741 # Arrays with different rank.
742 ./make_obj_store_test.sh assign_compat_7_${I} unverifiable "$OP" 'string [,]' 'string[,,]'
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)'
747 # Method pointers with different parameters.
748 ./make_obj_store_test.sh assign_compat_9_${I} unverifiable "$OP" 'method int32 *(float64)' 'method int32 *(int32)'
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)'
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)'
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)'
762 # 1.8.1.3 Merging stack states
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)'
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)'
768 ZZ=`echo $TYPE1 | grep "*";`
770 ZZ=`echo $TYPE2 | grep "*";`
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"
786 ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
792 # Unverifiable array stack merges
794 # These are verifiable, the merged type is 'object' or 'Array'
795 #for TYPE1 in 'string []' 'string [,]' 'string [,,]'
797 # for TYPE2 in 'string []' 'string [,]' 'string [,,]'
799 # if [ "$TYPE1" != "$TYPE2" ]; then
800 # ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
806 # Exception block branch tests (see 3.15)
808 for OP in br "ldc.i4.0\n\tbrfalse"
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"
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"
826 # Unary branch op type tests (see 3.17)
830 ./make_unary_test.sh un_branch_op unverifiable "$OP branch_target" float64
833 # Ldloc.0 and Ldarg tests (see 3.38)
836 for OP in "ldarg.s 0" "ldarg.0"
838 ./make_unary_test.sh ld_no_slot_${I} unverifiable "pop\n\t$OP\n\tpop" int32
842 for OP in "ldloc.s 1" "ldloc.1" "ldloc 1"
844 ./make_unary_test.sh ld_no_slot_${I} invalid "pop\n\t$OP\n\tpop" int32
848 for OP in "ldarga.s 0" "ldloca.s 1"
850 ./make_unary_test.sh ld_no_slot_${I} invalid "pop\n\t$OP\n\tpop" int32
854 # Starg and Stloc tests (see 3.61)
857 for OP in "starg.s 0"
859 ./make_unary_test.sh st_no_slot_${I} unverifiable "$OP" int32
863 for OP in "stloc.s 1"
865 ./make_unary_test.sh st_no_slot_${I} invalid "$OP" int32
869 # Ldfld and Ldflda tests (see 4.10)
871 for OP in ldfld ldflda
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"
884 #TODO: these tests are bogus, they need to be fixed
885 # Stfld tests (see 4.28)
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'
895 # Box tests (see 4.1)
897 # Box non-existent type.
898 ./make_unary_test.sh box_bad_type unverifiable "box valuetype NonExistent\n\tpop" "valuetype NonExistent"
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
904 ./make_unary_test.sh box_byref invalid "box [mscorlib]System.Int32\&\n\tpop" 'int32&'
906 # Box byref-like type.
907 ./make_unary_test.sh box_byref_like unverifiable "box [mscorlib]System.TypedReference\n\tpop" typedref
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"
913 #This is illegal since you cannot have a Void local variable, it should go into the structural tests part
915 #./make_unary_test.sh box_void unverifiable "box [mscorlib]System.Void\n\tpop" "class [mscorlib]System.Void"
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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&'
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
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
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
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"
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)"
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
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"
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'
1059 ./make_ret_test.sh ret_string_string unverifiable string object
1060 ./make_ret_test.sh ret_string_string unverifiable 'int32[]' object
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[,]'
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[]'
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
1079 ./make_ret_test.sh ret_object_type valid object ClassA
1080 ./make_ret_test.sh ret_type_object unverifiable ClassA object
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[]'
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>'
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>'
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>'
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>'
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>'
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>'
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>'
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>'
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>'
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 *>'
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>'
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>'
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>'
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>'
1178 #mix variance with inheritance
1179 #only interfaces or delegates can have covariance
1181 #mix variance with interfaces
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>'
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>'
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>'
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>'
1200 #mix variance with arrays
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[,]>'
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[,]>'
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[,]>'
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[,]>'
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[]>'
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[]>'
1261 #generic with value types
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>'
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>> )
1272 #test variance with delegates
1277 #the verifier must check if the generic instantiation is valid
1279 for OP in ldarg ldloc
1286 ARGS_2='int32 V, int32 V1'
1288 CALL_2='ldc.i4.0\n\tldc.i4.0'
1289 SIG_2='int32, int32'
1291 ARGS_3='int32 V, int32 V1, int32 V1'
1293 CALL_3='ldc.i4.0\n\tldc.i4.0\n\tldc.i4.0'
1294 SIG_3='int32, int32, int32'
1296 ARGS_4='int32 V, int32 V1, int32 V1, int32 V1'
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"
1303 if [ "$OP" == "ldloc" ]; then
1304 MAX_PARAM_RESULT="invalid"
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" '' '' '' ''
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}"
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}"
1339 ./make_load_test.sh ${OP}3_3_max_params "${MAX_PARAM_RESULT}" "${OP}.3" "${ARGS_3}" "${LOCALS_3}" "${CALL_3}" "${SIG_3}"
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}"
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}"
1352 #Test if the values used for brtrue and brfalse are valid
1354 for OP in brfalse brtrue 'brfalse.s' 'brtrue.s'
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'
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)'
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>[,,]'
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>'
1383 #tests for field loading
1385 for OP in 'ldfld' 'ldflda'
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
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 \&'
1413 ./make_field_store_test.sh field_store_${I}_24 valid "${OP} int32 ClassA::sfld" int32 'class ClassA' yes
1417 ./make_field_store_test.sh field_store_2_25 unverifiable 'ldflda int32 ClassA::const_field' int32 'class ClassA'
1419 #tests form static field loading
1421 for OP in 'ldsfld' 'ldsflda'
1424 ./make_field_store_test.sh static_field_store_${I}_1 invalid "${OP} int32 ClassA::unknown_field\n\tpop" 'class ClassA' 'class ClassA'
1426 ./make_field_store_test.sh static_field_store_${I}_2 invalid "${OP} int32 ClassA::fld\n\tpop" 'class ClassA' 'class ClassA'
1428 ./make_field_store_test.sh static_field_store_${I}_3 valid "${OP} ClassA ClassA::sfld\n\tpop" 'class ClassA' 'class ClassA'
1432 ./make_field_store_test.sh static_field_store_2_25 unverifiable 'ldsflda int32 ClassA::st_const_field\n\tpop' int32 'class ClassA'
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'
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'
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
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"
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
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
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
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
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
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
1533 #Tests for accessing an owned nested type
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"
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
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
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
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
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
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
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"
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
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
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
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
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
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
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"
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
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
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
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
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
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
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"
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
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
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
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
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
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
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"
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
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
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
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
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
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
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()"
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
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
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
1802 #static members are diferent from instance members
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"
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
1815 #try to access the base stuff directly
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()"
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
1828 #try to access the subclass stuff
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()"
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
1842 function create_nesting_test_same_result () {
1846 for NESTED in yes no
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"
1859 function create_nesting_test_only_first_ok () {
1864 for NESTED in yes no
1868 if ! ( [ "$NESTED" == "no" ] && [ "$LOAD" == "yes" ] ) ; then
1870 if [ "$FIRST" == "$K" ]; then
1873 ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $EXPECT "$OP" $2 $3 $4 "$BASE" "$NESTED" "$LOAD"
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"
1885 create_nesting_test_same_result 1 valid public assembly assembly
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
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
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
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
1912 create_nesting_test_only_first_ok 43 public family family
1913 create_nesting_test_only_first_ok 49 public family famandassem
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
1922 create_nesting_test_same_result 61 unverifiable public family private
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
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
1938 create_nesting_test_only_first_ok 79 public famandassem family
1939 create_nesting_test_only_first_ok 85 public famandassem famandassem
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
1948 create_nesting_test_same_result 97 unverifiable public famandassem private
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
1957 create_nesting_test_same_result 109 valid public famorassem assembly
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
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
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
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
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
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
2004 function create_nesting_test_same_result_static () {
2008 for NESTED in yes no
2010 ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $2 "$OP" $3 $4 $5 "$BASE" "$NESTED" yes
2016 function create_nesting_test_strips_result_static () {
2020 for NESTED in yes no
2023 if [ "$NESTED" == "yes" ]; then
2026 ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $EXPECT "$OP" $2 $3 $4 "$BASE" "$NESTED" yes
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"
2034 create_nesting_test_same_result 1 valid public assembly assembly
2036 create_nesting_test_strips_result_static 5 public assembly family
2037 create_nesting_test_strips_result_static 9 public assembly family
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
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
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
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
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
2063 create_nesting_test_same_result 41 unverifiable public family private
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
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
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
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
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
2090 create_nesting_test_same_result 65 unverifiable public famandassem private
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
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
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
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)"
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)"
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)"
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)"
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)"
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)"
2137 function fix_ldobj () {
2138 if [ "$3" != "" ]; then
2140 elif [ "$2" != "" ]; then
2146 if [ "$A" == "bool" ]; then
2148 elif [ "$A" == "char" ]; then
2159 for T1 in 'int8' 'bool' 'unsigned int8' 'int16' 'char' 'unsigned int16' 'int32' 'unsigned int32' 'int64' 'unsigned int64' 'float32' 'float64'
2161 for T2 in 'int8' 'bool' 'unsigned int8' 'int16' 'char' 'unsigned int16' 'int32' 'unsigned int32' 'int64' 'unsigned int64' 'float32' 'float64'
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}"
2168 ./make_ldobj_test.sh ldobj_${I} unverifiable "${T1}\&" "${T2}"
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"
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>"
2182 ./make_ldobj_test.sh ldobj_${I} unverifiable "${T1}" "${T2}"
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'
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\&"
2196 ./make_ldobj_test.sh ldobj_${I} invalid "${T1}" "${T2}"
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>"
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>"
2216 # unbox non-existent type.
2217 ./make_unbox_test.sh unbox_bad_type invalid "valuetype [mscorlib]NonExistent" "valuetype [mscorlib]NonExistent"
2220 ./make_unbox_test.sh unbox_byref_type invalid "int32" 'int32\&'
2222 # Box unbox-like type.
2223 ./make_unbox_test.sh unbox_byref_like unverifiable typedref typedref
2225 # Box unbox-like type.
2226 ./make_unbox_test.sh unbox_wrong_types valid object int32
2228 #This is illegal since you cannot have a Void local variable, it should go into the structural tests part
2230 #./make_unary_test.sh box_void unverifiable "box [mscorlib]System.Void\n\tpop" "class [mscorlib]System.Void"
2232 for OP in "native int" "int32*" typedref int16 string float32
2234 ./make_unbox_test.sh unbox_bad_stack_${I} unverifiable "${OP}" int32 "nop" "yes"
2239 #unboxing from int32
2240 ./make_unbox_test.sh unbox_wrong_types_1 unverifiable int32 int32 "nop" "yes"
2242 #unboxing from valuetype
2243 ./make_unbox_test.sh unbox_wrong_types_2 unverifiable "valuetype MyStruct" int32 "nop" "yes"
2245 #unboxing from managed ref
2246 ./make_unbox_test.sh unbox_stack_byref unverifiable "valuetype MyEnum\&" "valuetype MyEnum" "nop" "yes"
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"
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"
2263 #no int size on stack
2264 #invalid size type on stack
2265 #invalid array type (with bytref)
2268 ./make_newarr_test.sh newarr_empty_stack invalid int32 int32 pop
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
2274 ./make_newarr_test.sh newarr_stack_type_3 unverifiable float32 int32
2275 ./make_newarr_test.sh newarr_stack_type_4 unverifiable object int32
2277 #Invalid array element type (with byref)
2278 ./make_newarr_test.sh newarr_array_type_1 invalid int32 "int32\&"
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)"
2288 for OP in "ldind.i1" "ldind.u1"
2290 for TYPE in "int8" "bool" "unsigned int8"
2292 ./make_load_indirect_test.sh indirect_load_i1_${I} valid "${OP}" "${TYPE}"
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>"
2298 ./make_load_indirect_test.sh indirect_load_i1_${I} unverifiable "${OP}" "${TYPE}"
2304 for OP in "ldind.i2" "ldind.u2"
2306 for TYPE in "int16" "char" "unsigned int16"
2308 ./make_load_indirect_test.sh indirect_load_i2_${I} valid "${OP}" "${TYPE}"
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>"
2314 ./make_load_indirect_test.sh indirect_load_i2_${I} unverifiable "${OP}" "${TYPE}"
2320 for OP in "ldind.i4" "ldind.u4"
2322 for TYPE in "int32" "unsigned int32" "native int" "native unsigned int"
2324 ./make_load_indirect_test.sh indirect_load_i4_${I} valid "${OP}" "${TYPE}"
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>"
2330 ./make_load_indirect_test.sh indirect_load_i4_${I} unverifiable "${OP}" "${TYPE}"
2336 #no need to test ldind.u8 as it aliases to ldind.i8
2338 for TYPE in "int64" "unsigned int64"
2340 ./make_load_indirect_test.sh indirect_load_i8_${I} valid "ldind.i8" "${TYPE}"
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>"
2346 ./make_load_indirect_test.sh indirect_load_i8_${I} unverifiable "ldind.i8" "${TYPE}"
2352 for TYPE in "float32"
2354 ./make_load_indirect_test.sh indirect_load_r4_${I} valid "ldind.r4" "${TYPE}"
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>"
2360 ./make_load_indirect_test.sh indirect_load_r4_${I} unverifiable "ldind.r4" "${TYPE}"
2366 for TYPE in "float64"
2368 ./make_load_indirect_test.sh indirect_load_r8_${I} valid "ldind.r8" "${TYPE}"
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>"
2374 ./make_load_indirect_test.sh indirect_load_r8_${I} unverifiable "ldind.r8" "${TYPE}"
2380 for TYPE in "int32" "unsigned int32" "native int" "native unsigned int"
2382 ./make_load_indirect_test.sh indirect_load_i_${I} valid "ldind.i" "${TYPE}"
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>"
2388 ./make_load_indirect_test.sh indirect_load_i_${I} unverifiable "ldind.i" "${TYPE}"
2394 for TYPE in "object" "string" "class Class" "int32[]" "int32[,]" "class Template\`1<object>"
2396 ./make_load_indirect_test.sh indirect_load_r_${I} valid "ldind.ref" "${TYPE}"
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)"
2402 ./make_load_indirect_test.sh indirect_load_r_${I} unverifiable "ldind.ref" "${TYPE}"
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"
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"
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"
2424 ./make_store_indirect_test.sh indirect_store_i8_1 valid "stind.i8" "int64\&" "int64"
2426 ./make_store_indirect_test.sh indirect_store_r4_1 valid "stind.r4" "float32\&" "float32"
2428 ./make_store_indirect_test.sh indirect_store_r8_1 valid "stind.r8" "float64\&" "float64"
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"
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"
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"
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"
2452 #invalid stind.ref with valuetypes
2453 ./make_store_indirect_test.sh indirect_store_bad_type_r_3 valid "stind.ref" "int32[]\&" "int32[]"
2457 for TYPE1 in "int16" "char" "int32" "native int"
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}"
2464 for TYPE1 in "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct" "int32[]" "int32[,]" "int32*" "method int32 *(int32)" "class Template\`1<object>"
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}"
2473 for TYPE1 in "int8" "bool" "int32" "native int"
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}"
2480 for TYPE1 in "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct" "int32[]" "int32[,]" "int32*" "method int32 *(int32)" "class Template\`1<object>"
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}"
2489 for TYPE1 in "int8" "bool" "int16" "char"
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}"
2496 for TYPE1 in "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct" "int32[]" "int32[,]" "int32*" "method int32 *(int32)" "class Template\`1<object>"
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}"
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>"
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}"
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>"
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}"
2520 ./make_store_indirect_test.sh indirect_store_bad_val_r4_${I} unverifiable "stind.r4" "float32\&" "${TYPE1}"
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>"
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}";
2533 ./make_store_indirect_test.sh indirect_store_bad_val_r8_${I} unverifiable "stind.r8" "float64\&" "${TYPE1}";
2540 for TYPE1 in "int8" "bool" "int16" "char"
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}"
2547 for TYPE1 in "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct" "int32[]" "int32[,]" "int32*" "method int32 *(int32)" "class Template\`1<object>"
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}"
2556 for TYPE1 in "int8" "bool" "int16" "char" "int32" "int64" "float32" "float64" "native int"
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}"
2564 #TODO validate delegate construction (Wait for ldftn, ldvirtftn and calli to be fully checking)
2566 ./make_newobj_test.sh newobj_underflow invalid "newobj instance void class ClassA::.ctor(int32,int32)" "int32" "int32"
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"
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)"
2583 ./make_newobj_test.sh newobj_bad_inst_1 unverifiable "newobj instance void class AbsClass::.ctor()" "int32" "int32"
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"
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"
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"
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"
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"
2612 #calling something that it's not an instance constructor
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"
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[]"
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)"
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()"
2628 ./make_ldlen_test.sh ldlen_empty_stack invalid "nop"
2631 for OP in "ldc.i4.0" "ldc.r4 0" " newobj instance void object::.ctor()"
2633 ./make_ldlen_test.sh ldlen_bad_stuff_on_stack_${I} unverifiable "$OP"
2640 #TODO add tests for CMMP (read only prefix)
2641 #TODO add tests for arrays that are not zero-based
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"
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"
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"
2655 for ARR in "int8" "int16" "int32"
2657 ./make_ldelema_test.sh ldelema_size_compat_${I} valid "newarr ${ARR}" "ldc.i4.0" "unsigned ${ARR}"
2661 for ARR in "int8" "int16" "int32"
2663 ./make_ldelema_test.sh ldelema_size_compat_${I} valid "newarr unsigned ${ARR}" "ldc.i4.0" "${ARR}"
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"
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"
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"
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"
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"
2690 ./make_ldelema_test.sh ldelema_bad_array_${I} unverifiable "pop\n\t${ARR}" "ldc.i4.0" "int32"
2696 for IDX in "newobj instance void object::.ctor()" "ldc.i8 0" "ldc.r4 0"
2698 ./make_ldelema_test.sh ldelema_bad_index_${I} unverifiable "newarr int32" "${IDX}" "int32"
2703 for TOKEN in "object" "int64" "int32[]"
2705 ./make_ldelema_test.sh ldelema_type_mismatch_${I} unverifiable "newarr int32" "ldc.i4.0" "${TOKEN}"
2709 for TOKEN in "object" "int32"
2711 ./make_ldelema_test.sh ldelema_type_mismatch_${I} unverifiable "newarr string" "ldc.i4.0" "${TOKEN}"
2715 for TOKEN in "object" "int32" "ClassSubA"
2717 ./make_ldelema_test.sh ldelema_type_mismatch_${I} unverifiable "newarr ClassA" "ldc.i4.0" "${TOKEN}"
2724 #TODO add tests for CMMP (read only prefix)
2725 #TODO add tests for arrays that are not zero-based
2729 for ARR in "int8" "bool" "unsigned int8"
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"
2736 for ARR in "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
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"
2744 for ARR in "int16" "char" "unsigned int16"
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"
2751 for ARR in "int8" "bool" "unsigned int8" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
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"
2759 for ARR in "int32" "unsigned int32" "native int" "native unsigned int"
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"
2767 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int64" "unsigned int64" "float32" "float64" "object"
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"
2776 for ARR in "int64" "unsigned int64"
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"
2783 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "float32" "float64" "object"
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"
2791 for ARR in "float32"
2793 ./make_ldelem_test.sh ldelem_base_types_f_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.r4"
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"
2799 ./make_ldelem_test.sh ldelem_base_types_f_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.r4"
2804 for ARR in "float64"
2806 ./make_ldelem_test.sh ldelem_base_types_f_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.r8"
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"
2812 ./make_ldelem_test.sh ldelem_base_types_f_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.r8"
2817 for ARR in "object" "string" "ClassA"
2819 ./make_ldelem_test.sh ldelem_base_types_o_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem.ref"
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"
2825 ./make_ldelem_test.sh ldelem_base_types_o_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldelem.ref"
2830 for OP in i1 u1 i2 u2 i4 u4 i8 u8 r4 r8 i ref
2832 ./make_ldelem_test.sh ldelem_null_array_${I} valid "pop\n\tldnull" "ldc.i4.0" "ldelem.${OP}"
2838 for OP in i1 u1 i2 u2 i4 u4 i8 u8 r4 r8 i ref
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}"
2847 for OP in i1 u1 i2 u2 i4 u4 i8 u8 r4 r8 i ref
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"
2851 ./make_ldelem_test.sh ldelema_bad_array_${I} unverifiable "pop\n\t${ARR}" "ldc.i4.0" "ldelem.${OP}"
2858 for OP in i1 u1 i2 u2 i4 u4 i8 u8 r4 r8 i ref
2860 for IDX in "newobj instance void object::.ctor()" "ldc.i8 0" "ldc.r4 0"
2862 ./make_ldelem_test.sh ldelema_bad_index_${I} unverifiable "pop\n\tldnull" "${IDX}" "ldelem.${OP}"
2868 #adicional tests for ldelem
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"
2872 ./make_ldelem_test.sh ldelem_token_base_types_i_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldelem ${ARR}"
2878 #TODO add tests for arrays that are not zero-based
2881 for ARR in "int8" "bool" "unsigned int8"
2883 ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i1"
2887 for ARR in "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
2889 ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i1"
2894 for ARR in "int16" "char" "unsigned int16"
2896 ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i2"
2900 for ARR in "int8" "bool" "unsigned int8" "int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
2902 ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i2"
2907 for ARR in "int32" "unsigned int32" "native int" "native unsigned int"
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"
2914 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int64" "unsigned int64" "float32" "float64" "object"
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"
2922 for ARR in "int64" "unsigned int64"
2924 ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i8 0" "stelem.i8"
2928 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int" "float32" "float64" "object"
2930 ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i8 0" "stelem.i8"
2935 for ARR in "float32"
2937 ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.r4 0" "stelem.r4"
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"
2943 ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.r4 0" "stelem.r4"
2948 for ARR in "float64"
2950 ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.r8 0" "stelem.r8"
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"
2956 ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.r8 0" "stelem.r8"
2961 for ARR in "int32" "unsigned int32" "native int" "native unsigned int"
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"
2968 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int64" "unsigned int64" "float32" "float64" "object"
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"
2976 for ARR in object ClassA ClassSubA
2978 ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "newobj instance void ${ARR}::.ctor()" "stelem.ref"
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"
2984 ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.ref"
2990 ./make_stelem_test.sh stelem_native_int_index valid "newarr int32" "ldc.i4.0\n\tconv.i" "ldc.i4.0" "stelem.i4"
2993 #tests with null arrays and values (for ref types)
2996 for OP in i1 i2 i4 i
2998 ./make_stelem_test.sh stelem_null_array_index_i_${I} valid "pop\n\tldnull" "ldc.i4.0" "ldc.i4.0" "stelem.${OP}"
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"
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"
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"
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"
3027 for IDX in "ldc.i8 0" "ldc.r4 0" "ldc.r8 0" "newobj instance void ClassA::.ctor()"
3029 ./make_stelem_test.sh stelem_bad_index_${I} unverifiable "newarr int32" "${IDX}" "ldc.i4.0" "stelem.i4"
3035 for ARR in "ldc.i4.0" "ldc.i8 0" "ldc.r4 0" "ldc.r8 0" "newobj instance void ClassA::.ctor()"
3037 ./make_stelem_test.sh stelem_bad_index_${I} unverifiable "pop\n\t${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i4"
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"
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"
3055 #adicional tests for stelem
3057 for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16" "int32" "unsigned int32" "native int" "native unsigned int"
3059 ./make_stelem_test.sh stelem_token_basic_types_${I} valid "newarr ${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem ${ARR}"
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"
3068 for TYPE in "object" "ClassA" "ClassSubA"
3070 ./make_stelem_test.sh stelem_token_simple_ref_${I} valid "newarr object" "ldc.i4.0" "newobj instance void ${TYPE}::.ctor()" "stelem object"
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"
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"
3086 #cast class and isins tests
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"
3094 for OBJ in int32 int64 float32 float64 "int32\&" "valuetype MyStruct" "int32*" "typedref" "method int32 *(int32)"
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"
3101 for OBJ in "int32[]" "string"
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"
3110 for TOKEN in int32 int64 float32 float64 "valuetype MyStruct" "int32*" "typedref" "int32[]" "string" "method int32 *(int32)"
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"
3117 for TOKEN in "int32\&"
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"
3127 for LOAD in "ldloc.0" "ldnull"
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"
3139 ./make_throw_test.sh throw_empty_stack invalid int32 pop
3142 ./make_throw_test.sh throw_null_literal valid int32 "pop\n\tldnull"
3146 for TYPE in object string "[mscorlib]System.Exception" "int32[]" "ClassA" "class [mscorlib]System.IComparable\`1<int32>" "int32[,]"
3148 ./make_throw_test.sh throw_ref_type_${I} valid "${TYPE}"
3154 for TYPE in "valuetype MyStruct" int32 int64 float32 float64 "native int" "int32*" "typedref" "object\&"
3156 ./make_throw_test.sh throw_value_type_${I} unverifiable "${TYPE}"
3161 # Exception block branch tests (see 3.15)
3165 ./make_rethrow_test.sh rethrow_from_catch_${I} invalid ${I}
3170 ./make_rethrow_test.sh rethrow_from_catch_${I} valid ${I}