New test.
[mono.git] / mono / tests / verifier / make_tests.sh
1 #! /bin/sh
2
3 # Stack Size Tests
4 for OP in 'starg.s 0' 'stloc.0' 'stloc.s 0' 'stfld int32 Class::fld' pop ret
5 do
6   ./make_stack_0_test.sh "$OP"
7 done
8
9 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
10 do
11   ./make_stack_0_pop_test.sh "$OP"
12 done
13
14 for OP in add and ceq cgt clt div dup mul or rem shl shr sub xor 'stfld int32 Class::fld'
15 do
16   ./make_stack_1_pop_test.sh "$OP" int32
17 done
18
19 # Table 2: Binary Numeric Operators
20 I=1
21 for OP in add div mul rem sub
22 do
23   ./make_bin_test.sh bin_num_op_1_${I} invalid $OP int32 int64
24   ./make_bin_test.sh bin_num_op_2_${I} invalid $OP int32 float64
25   ./make_bin_test.sh bin_num_op_3_${I} invalid $OP int32 object
26
27   ./make_bin_test.sh bin_num_op_4_${I} invalid $OP int64 int32
28   ./make_bin_test.sh bin_num_op_5_${I} invalid $OP int64 'native int'
29   ./make_bin_test.sh bin_num_op_6_${I} invalid $OP int64 float64
30   ./make_bin_test.sh bin_num_op_7_${I} invalid $OP int64 'int64&'
31   ./make_bin_test.sh bin_num_op_8_${I} invalid $OP int64 object
32
33   ./make_bin_test.sh bin_num_op_9_${I} invalid $OP 'native int' int64
34   ./make_bin_test.sh bin_num_op_10_${I} invalid $OP 'native int' float64
35   ./make_bin_test.sh bin_num_op_11_${I} invalid $OP 'native int' object
36
37   ./make_bin_test.sh bin_num_op_12_${I} invalid $OP float64 int32
38   ./make_bin_test.sh bin_num_op_13_${I} invalid $OP float64 int64
39   ./make_bin_test.sh bin_num_op_14_${I} invalid $OP float64 'native int'
40   ./make_bin_test.sh bin_num_op_15_${I} invalid $OP float64 'float64&'
41   ./make_bin_test.sh bin_num_op_16_${I} invalid $OP float64 object
42
43   ./make_bin_test.sh bin_num_op_17_${I} invalid $OP 'int64&' int64
44   ./make_bin_test.sh bin_num_op_18_${I} invalid $OP 'float64&' float64
45   ./make_bin_test.sh bin_num_op_19_${I} invalid $OP 'object&' object
46
47   ./make_bin_test.sh bin_num_op_20_${I} invalid $OP object int32
48   ./make_bin_test.sh bin_num_op_21_${I} invalid $OP object int64
49   ./make_bin_test.sh bin_num_op_22_${I} invalid $OP object 'native int'
50   ./make_bin_test.sh bin_num_op_23_${I} invalid $OP object float64
51   ./make_bin_test.sh bin_num_op_24_${I} invalid $OP object 'object&'
52   ./make_bin_test.sh bin_num_op_25_${I} invalid $OP object object
53   I=`expr $I + 1`
54 done
55
56 I=1
57 for OP in div mul rem sub
58 do
59   ./make_bin_test.sh bin_num_op_26_${I} invalid $OP int32 'int32&'
60   ./make_bin_test.sh bin_num_op_27_${I} invalid $OP 'native int' 'native int&'
61   I=`expr $I + 1`
62 done
63
64 for OP in add
65 do
66   ./make_bin_test.sh bin_num_op_26_${I} unverifiable $OP int32 'int32&'
67   ./make_bin_test.sh bin_num_op_27_${I} unverifiable $OP 'native int' 'native int&'
68   I=`expr $I + 1`
69 done
70
71 I=1
72 for OP in div mul rem
73 do
74   ./make_bin_test.sh bin_num_op_28_${I} invalid $OP 'int32&' int32
75   ./make_bin_test.sh bin_num_op_29_${I} invalid $OP 'native int&' 'native int'
76   I=`expr $I + 1`
77 done
78
79 for OP in add sub
80 do
81   ./make_bin_test.sh bin_num_op_28_${I} unverifiable $OP 'int32&' int32
82   ./make_bin_test.sh bin_num_op_29_${I} unverifiable $OP 'native int&' 'native int'
83   I=`expr $I + 1`
84 done
85
86 I=1
87 for OP in div mul rem add
88 do
89   ./make_bin_test.sh bin_num_op_30_${I} invalid $OP 'int32&' 'int32&'
90   I=`expr $I + 1`
91 done
92
93 for OP in sub
94 do
95   ./make_bin_test.sh bin_num_op_30_${I} unverifiable $OP 'int32&' 'int32&'
96   I=`expr $I + 1`
97 done
98
99 # Table 4: Binary Comparison or Branch Operations
100 I=1
101 for OP in ceq cgt clt
102 do
103   ./make_bin_test.sh bin_comp_op_1_${I} invalid $OP int32 int64
104   ./make_bin_test.sh bin_comp_op_2_${I} invalid $OP int32 float64
105   ./make_bin_test.sh bin_comp_op_3_${I} invalid $OP int32 'int32&'
106   ./make_bin_test.sh bin_comp_op_4_${I} invalid $OP int32 object
107
108   ./make_bin_test.sh bin_comp_op_5_${I} invalid $OP int64 int32
109   ./make_bin_test.sh bin_comp_op_6_${I} invalid $OP int64 'native int'
110   ./make_bin_test.sh bin_comp_op_7_${I} invalid $OP int64 float64
111   ./make_bin_test.sh bin_comp_op_8_${I} invalid $OP int64 'int64&'
112   ./make_bin_test.sh bin_comp_op_9_${I} invalid $OP int64 object
113
114   ./make_bin_test.sh bin_comp_op_10_${I} invalid $OP 'native int' int64
115   ./make_bin_test.sh bin_comp_op_11_${I} invalid $OP 'native int' float64
116   ./make_bin_test.sh bin_comp_op_12_${I} invalid $OP 'native int' object
117
118   ./make_bin_test.sh bin_comp_op_13_${I} invalid $OP float64 int32
119   ./make_bin_test.sh bin_comp_op_14_${I} invalid $OP float64 int64
120   ./make_bin_test.sh bin_comp_op_15_${I} invalid $OP float64 'native int'
121   ./make_bin_test.sh bin_comp_op_16_${I} invalid $OP float64 'float64&'
122   ./make_bin_test.sh bin_comp_op_17_${I} invalid $OP float64 object
123
124   ./make_bin_test.sh bin_comp_op_18_${I} invalid $OP 'int32&' int32
125   ./make_bin_test.sh bin_comp_op_19_${I} invalid $OP 'int64&' int64
126   ./make_bin_test.sh bin_comp_op_20_${I} invalid $OP 'float64&' float64
127   ./make_bin_test.sh bin_comp_op_21_${I} invalid $OP 'object&' object
128
129   ./make_bin_test.sh bin_comp_op_22_${I} invalid $OP object int32
130   ./make_bin_test.sh bin_comp_op_23_${I} invalid $OP object int64
131   ./make_bin_test.sh bin_comp_op_24_${I} invalid $OP object 'native int'
132   ./make_bin_test.sh bin_comp_op_25_${I} invalid $OP object float64
133   ./make_bin_test.sh bin_comp_op_26_${I} invalid $OP object 'object&'
134   I=`expr $I + 1`
135 done
136
137 I=1
138 for OP in cgt clt
139 do
140   ./make_bin_test.sh bin_comp_op_27_${I} invalid $OP 'native int' 'native int&'
141   ./make_bin_test.sh bin_comp_op_28_${I} invalid $OP 'native int&' 'native int'
142   ./make_bin_test.sh bin_comp_op_29_${I} invalid $OP object object
143   I=`expr $I + 1`
144 done
145
146 for OP in ceq
147 do
148   ./make_bin_test.sh bin_comp_op_27_${I} unverifiable $OP 'native int' 'native int&'
149   ./make_bin_test.sh bin_comp_op_28_${I} unverifiable $OP 'native int&' 'native int'
150   I=`expr $I + 1`
151 done
152
153 # Table 5: Integer Operations
154 I=1
155 for OP in and or xor
156 do
157   ./make_bin_test.sh bin_int_op_1_${I} invalid "$OP" int32 int64
158   ./make_bin_test.sh bin_int_op_2_${I} invalid "$OP" int32 float64
159   ./make_bin_test.sh bin_int_op_3_${I} invalid "$OP" int32 'int32&'
160   ./make_bin_test.sh bin_int_op_4_${I} invalid "$OP" int32 object
161
162   ./make_bin_test.sh bin_int_op_5_${I} invalid "$OP" int64 int32
163   ./make_bin_test.sh bin_int_op_6_${I} invalid "$OP" int64 'native int'
164   ./make_bin_test.sh bin_int_op_7_${I} invalid "$OP" int64 float64
165   ./make_bin_test.sh bin_int_op_8_${I} invalid "$OP" int64 'int64&'
166   ./make_bin_test.sh bin_int_op_9_${I} invalid "$OP" int64 object
167
168   ./make_bin_test.sh bin_int_op_10_${I} invalid "$OP" 'native int' int64
169   ./make_bin_test.sh bin_int_op_11_${I} invalid "$OP" 'native int' float64
170   ./make_bin_test.sh bin_int_op_12_${I} invalid "$OP" 'native int' 'native int&'
171   ./make_bin_test.sh bin_int_op_13_${I} invalid "$OP" 'native int' object
172
173   ./make_bin_test.sh bin_int_op_14_${I} invalid "$OP" float64 int32
174   ./make_bin_test.sh bin_int_op_15_${I} invalid "$OP" float64 int64
175   ./make_bin_test.sh bin_int_op_16_${I} invalid "$OP" float64 'native int'
176   ./make_bin_test.sh bin_int_op_17_${I} invalid "$OP" float64 float64
177   ./make_bin_test.sh bin_int_op_18_${I} invalid "$OP" float64 'int32&'
178   ./make_bin_test.sh bin_int_op_19_${I} invalid "$OP" float64 object
179
180   ./make_bin_test.sh bin_int_op_20_${I} invalid "$OP" 'int32&' int32
181   ./make_bin_test.sh bin_int_op_21_${I} invalid "$OP" 'int64&' int64
182   ./make_bin_test.sh bin_int_op_22_${I} invalid "$OP" 'native int&' 'native int'
183   ./make_bin_test.sh bin_int_op_23_${I} invalid "$OP" 'float64&' float64
184   ./make_bin_test.sh bin_int_op_24_${I} invalid "$OP" 'int32&' 'int32&'
185   ./make_bin_test.sh bin_int_op_25_${I} invalid "$OP" 'float64&' object
186
187   ./make_bin_test.sh bin_int_op_26_${I} invalid "$OP" object int32
188   ./make_bin_test.sh bin_int_op_27_${I} invalid "$OP" object int64
189   ./make_bin_test.sh bin_int_op_28_${I} invalid "$OP" object 'native int'
190   ./make_bin_test.sh bin_int_op_29_${I} invalid "$OP" object float64
191   ./make_bin_test.sh bin_int_op_30_${I} invalid "$OP" object 'int32&'
192   ./make_bin_test.sh bin_int_op_31_${I} invalid "$OP" object object
193   I=`expr $I + 1`
194 done
195
196 for OP in "not\n\tpop"
197 do
198   ./make_unary_test.sh not_1 invalid "$OP" float64
199   ./make_unary_test.sh not_2 invalid "$OP" 'int32&'
200   ./make_unary_test.sh not_3 invalid "$OP" object
201 done
202
203 # Table 6: Shift Operators
204 I=1
205 for OP in shl shr
206 do
207   ./make_bin_test.sh shift_op_1_${I} invalid $OP int32 int64
208   ./make_bin_test.sh shift_op_2_${I} invalid $OP int32 float64
209   ./make_bin_test.sh shift_op_3_${I} invalid $OP int32 'int32&'
210   ./make_bin_test.sh shift_op_4_${I} invalid $OP int32 object
211
212   ./make_bin_test.sh shift_op_5_${I} invalid $OP int64 int64
213   ./make_bin_test.sh shift_op_6_${I} invalid $OP int64 float64
214   ./make_bin_test.sh shift_op_7_${I} invalid $OP int64 'int32&'
215   ./make_bin_test.sh shift_op_8_${I} invalid $OP int64 object
216
217   ./make_bin_test.sh shift_op_9_${I} invalid $OP 'native int' int64
218   ./make_bin_test.sh shift_op_10_${I} invalid $OP 'native int' float64
219   ./make_bin_test.sh shift_op_11_${I} invalid $OP 'native int' 'native int&'
220   ./make_bin_test.sh shift_op_12_${I} invalid $OP 'native int' object
221
222   ./make_bin_test.sh shift_op_13_${I} invalid $OP float64 int32
223   ./make_bin_test.sh shift_op_14_${I} invalid $OP float64 int64
224   ./make_bin_test.sh shift_op_15_${I} invalid $OP float64 'native int'
225   ./make_bin_test.sh shift_op_16_${I} invalid $OP float64 float64
226   ./make_bin_test.sh shift_op_17_${I} invalid $OP float64 'int32&'
227   ./make_bin_test.sh shift_op_18_${I} invalid $OP float64 object
228
229   ./make_bin_test.sh shift_op_19_${I} invalid $OP 'int32&' int32
230   ./make_bin_test.sh shift_op_20_${I} invalid $OP 'int64&' int64
231   ./make_bin_test.sh shift_op_21_${I} invalid $OP 'native int&' 'native int'
232   ./make_bin_test.sh shift_op_22_${I} invalid $OP 'float64&' float64
233   ./make_bin_test.sh shift_op_23_${I} invalid $OP 'int32&' 'int32&'
234   ./make_bin_test.sh shift_op_24_${I} invalid $OP 'float64&' object
235
236   ./make_bin_test.sh shift_op_25_${I} invalid $OP object int32
237   ./make_bin_test.sh shift_op_26_${I} invalid $OP object int64
238   ./make_bin_test.sh shift_op_27_${I} invalid $OP object 'native int'
239   ./make_bin_test.sh shift_op_28_${I} invalid $OP object float64
240   ./make_bin_test.sh shift_op_29_${I} invalid $OP object 'int32&'
241   ./make_bin_test.sh shift_op_30_${I} invalid $OP object object
242   I=`expr $I + 1`
243 done
244
245 # Table 8: Conversion Operations
246 I=1
247 for OP in "conv.i4\n\tpop" "conv.r8\n\tpop"
248 do
249   ./make_unary_test.sh conv_op_1_${I} invalid $OP 'int32&'
250   ./make_unary_test.sh conv_op_2_${I} invalid $OP object
251   I=`expr $I + 1`
252 done
253
254 # 1.6 Implicit argument coercion (Table 9: Signature Matching)
255 I=1
256 for OP in stloc.0 "stloc.s 0" "starg.s 0"
257 do
258   ./make_store_test.sh coercion_1_${I} invalid "$OP" int8 int64
259   ./make_store_test.sh coercion_2_${I} invalid "$OP" int8 float64
260   ./make_store_test.sh coercion_3_${I} invalid "$OP" int8 'int8&'
261   ./make_store_test.sh coercion_4_${I} invalid "$OP" int8 object
262
263   ./make_store_test.sh coercion_5_${I} invalid "$OP" 'unsigned int8' int64
264   ./make_store_test.sh coercion_6_${I} invalid "$OP" 'unsigned int8' float64
265   ./make_store_test.sh coercion_7_${I} invalid "$OP" 'unsigned int8' 'unsigned int8&'
266   ./make_store_test.sh coercion_8_${I} invalid "$OP" 'unsigned int8' object
267
268   ./make_store_test.sh coercion_9_${I} invalid "$OP" bool int64
269   ./make_store_test.sh coercion_10_${I} invalid "$OP" bool float64
270   ./make_store_test.sh coercion_11_${I} invalid "$OP" bool 'bool&'
271   ./make_store_test.sh coercion_12_${I} invalid "$OP" bool object
272
273   ./make_store_test.sh coercion_13_${I} invalid "$OP" int16 int64
274   ./make_store_test.sh coercion_14_${I} invalid "$OP" int16 float64
275   ./make_store_test.sh coercion_15_${I} invalid "$OP" int16 'int16&'
276   ./make_store_test.sh coercion_16_${I} invalid "$OP" int16 object
277   
278   ./make_store_test.sh coercion_17_${I} invalid "$OP" 'unsigned int16' int64
279   ./make_store_test.sh coercion_18_${I} invalid "$OP" 'unsigned int16' float64
280   ./make_store_test.sh coercion_19_${I} invalid "$OP" 'unsigned int16' 'unsigned int16&'
281   ./make_store_test.sh coercion_20_${I} invalid "$OP" 'unsigned int16' object
282   
283   ./make_store_test.sh coercion_21_${I} invalid "$OP" char int64
284   ./make_store_test.sh coercion_22_${I} invalid "$OP" char float64
285   ./make_store_test.sh coercion_23_${I} invalid "$OP" char 'char&'
286   ./make_store_test.sh coercion_24_${I} invalid "$OP" char object
287   
288   ./make_store_test.sh coercion_25_${I} invalid "$OP" int32 int64
289   ./make_store_test.sh coercion_26_${I} invalid "$OP" int32 float64
290   ./make_store_test.sh coercion_27_${I} invalid "$OP" int32 'int32&'
291   ./make_store_test.sh coercion_28_${I} invalid "$OP" int32 object
292   
293   ./make_store_test.sh coercion_29_${I} invalid "$OP" 'unsigned int32' int64
294   ./make_store_test.sh coercion_30_${I} invalid "$OP" 'unsigned int32' float64
295   ./make_store_test.sh coercion_31_${I} invalid "$OP" 'unsigned int32' 'unsigned int32&'
296   ./make_store_test.sh coercion_32_${I} invalid "$OP" 'unsigned int32' object
297  
298   ./make_store_test.sh coercion_33_${I} invalid "$OP" int64 int32
299   ./make_store_test.sh coercion_34_${I} invalid "$OP" int64 'native int'
300   ./make_store_test.sh coercion_35_${I} invalid "$OP" int64 float64
301   ./make_store_test.sh coercion_36_${I} invalid "$OP" int64 'int64&'
302   ./make_store_test.sh coercion_37_${I} invalid "$OP" int64 object
303   
304   ./make_store_test.sh coercion_38_${I} invalid "$OP" 'unsigned int64' int32
305   ./make_store_test.sh coercion_39_${I} invalid "$OP" 'unsigned int64' 'native int'
306   ./make_store_test.sh coercion_40_${I} invalid "$OP" 'unsigned int64' float64
307   ./make_store_test.sh coercion_41_${I} invalid "$OP" 'unsigned int64' 'unsigned int64&'
308   ./make_store_test.sh coercion_42_${I} invalid "$OP" 'unsigned int64' object
309   
310   ./make_store_test.sh coercion_43_${I} invalid "$OP" 'native int' int64
311   ./make_store_test.sh coercion_44_${I} invalid "$OP" 'native int' float64
312   ./make_store_test.sh coercion_45_${I} invalid "$OP" 'native int' 'native int&'
313   ./make_store_test.sh coercion_46_${I} invalid "$OP" 'native int' object
314   
315   ./make_store_test.sh coercion_47_${I} invalid "$OP" 'native unsigned int' int64
316   ./make_store_test.sh coercion_48_${I} invalid "$OP" 'native unsigned int' float64
317   ./make_store_test.sh coercion_49_${I} invalid "$OP" 'native unsigned int' 'native unsigned int&'
318   ./make_store_test.sh coercion_50_${I} invalid "$OP" 'native unsigned int' object
319   
320   ./make_store_test.sh coercion_51_${I} invalid "$OP" float32 int32
321   ./make_store_test.sh coercion_52_${I} invalid "$OP" float32 'native int'
322   ./make_store_test.sh coercion_53_${I} invalid "$OP" float32 int64
323   ./make_store_test.sh coercion_54_${I} invalid "$OP" float32 'float32&'
324   ./make_store_test.sh coercion_55_${I} invalid "$OP" float32 object
325   
326   ./make_store_test.sh coercion_56_${I} invalid "$OP" float64 int32
327   ./make_store_test.sh coercion_57_${I} invalid "$OP" float64 'native int'
328   ./make_store_test.sh coercion_58_${I} invalid "$OP" float64 int64
329   ./make_store_test.sh coercion_59_${I} invalid "$OP" float64 'float64&'
330   ./make_store_test.sh coercion_60_${I} invalid "$OP" float64 object
331
332   ./make_store_test.sh coercion_61_${I} invalid "$OP" object int32
333   ./make_store_test.sh coercion_62_${I} invalid "$OP" object 'native int'
334   ./make_store_test.sh coercion_63_${I} invalid "$OP" object int64
335   ./make_store_test.sh coercion_64_${I} invalid "$OP" object float64
336   ./make_store_test.sh coercion_65_${I} invalid "$OP" object 'object&'
337   
338   ./make_store_test.sh coercion_66_${I} invalid "$OP" 'class ValueType' int32
339   ./make_store_test.sh coercion_67_${I} invalid "$OP" 'class ValueType' 'native int'
340   ./make_store_test.sh coercion_68_${I} invalid "$OP" 'class ValueType' int64
341   ./make_store_test.sh coercion_69_${I} invalid "$OP" 'class ValueType' float64
342   ./make_store_test.sh coercion_70_${I} invalid "$OP" 'class ValueType' 'class ValueType&'
343   ./make_store_test.sh coercion_71_${I} invalid "$OP" 'class ValueType' object
344   
345   ./make_store_test.sh coercion_72_${I} invalid "$OP" 'int32&' int32
346   ./make_store_test.sh coercion_73_${I} unverifiable "$OP" 'int32&' 'native int'
347   ./make_store_test.sh coercion_74_${I} invalid "$OP" 'int32&' int64
348   ./make_store_test.sh coercion_75_${I} invalid "$OP" 'int32&' float64
349   ./make_store_test.sh coercion_76_${I} invalid "$OP" 'int32&' object
350   
351   ./make_store_test.sh coercion_77_${I} invalid "$OP" typedref int32
352   ./make_store_test.sh coercion_78_${I} invalid "$OP" typedref 'native int'
353   ./make_store_test.sh coercion_89_${I} invalid "$OP" typedref int64
354   ./make_store_test.sh coercion_80_${I} invalid "$OP" typedref float64
355   ./make_store_test.sh coercion_81_${I} invalid "$OP" typedref 'typedref&'
356   ./make_store_test.sh coercion_82_${I} invalid "$OP" typedref object
357   I=`expr $I + 1`
358 done
359
360 I=1
361 for OP in "stfld TYPE1 Class::fld" "call void Class::Method(TYPE1)"
362 do
363   ./make_obj_store_test.sh obj_coercion_1_${I} invalid "$OP" int8 int64
364   ./make_obj_store_test.sh obj_coercion_2_${I} invalid "$OP" int8 float64
365   ./make_obj_store_test.sh obj_coercion_3_${I} invalid "$OP" int8 'int8&'
366   ./make_obj_store_test.sh obj_coercion_4_${I} invalid "$OP" int8 object
367
368   ./make_obj_store_test.sh obj_coercion_5_${I} invalid "$OP" 'unsigned int8' int64
369   ./make_obj_store_test.sh obj_coercion_6_${I} invalid "$OP" 'unsigned int8' float64
370   ./make_obj_store_test.sh obj_coercion_7_${I} invalid "$OP" 'unsigned int8' 'unsigned int8&'
371   ./make_obj_store_test.sh obj_coercion_8_${I} invalid "$OP" 'unsigned int8' object
372
373   ./make_obj_store_test.sh obj_coercion_9_${I} invalid "$OP" bool int64
374   ./make_obj_store_test.sh obj_coercion_10_${I} invalid "$OP" bool float64
375   ./make_obj_store_test.sh obj_coercion_11_${I} invalid "$OP" bool 'bool&'
376   ./make_obj_store_test.sh obj_coercion_12_${I} invalid "$OP" bool object
377
378   ./make_obj_store_test.sh obj_coercion_13_${I} invalid "$OP" int16 int64
379   ./make_obj_store_test.sh obj_coercion_14_${I} invalid "$OP" int16 float64
380   ./make_obj_store_test.sh obj_coercion_15_${I} invalid "$OP" int16 'int16&'
381   ./make_obj_store_test.sh obj_coercion_16_${I} invalid "$OP" int16 object
382   
383   ./make_obj_store_test.sh obj_coercion_17_${I} invalid "$OP" 'unsigned int16' int64
384   ./make_obj_store_test.sh obj_coercion_18_${I} invalid "$OP" 'unsigned int16' float64
385   ./make_obj_store_test.sh obj_coercion_19_${I} invalid "$OP" 'unsigned int16' 'unsigned int16&'
386   ./make_obj_store_test.sh obj_coercion_20_${I} invalid "$OP" 'unsigned int16' object
387   
388   ./make_obj_store_test.sh obj_coercion_21_${I} invalid "$OP" char int64
389   ./make_obj_store_test.sh obj_coercion_22_${I} invalid "$OP" char float64
390   ./make_obj_store_test.sh obj_coercion_23_${I} invalid "$OP" char 'char&'
391   ./make_obj_store_test.sh obj_coercion_24_${I} invalid "$OP" char object
392   
393   ./make_obj_store_test.sh obj_coercion_25_${I} invalid "$OP" int32 int64
394   ./make_obj_store_test.sh obj_coercion_26_${I} invalid "$OP" int32 float64
395   ./make_obj_store_test.sh obj_coercion_27_${I} invalid "$OP" int32 'int32&'
396   ./make_obj_store_test.sh obj_coercion_28_${I} invalid "$OP" int32 object
397   
398   ./make_obj_store_test.sh obj_coercion_29_${I} invalid "$OP" 'unsigned int32' int64
399   ./make_obj_store_test.sh obj_coercion_30_${I} invalid "$OP" 'unsigned int32' float64
400   ./make_obj_store_test.sh obj_coercion_31_${I} invalid "$OP" 'unsigned int32' 'unsigned int32&'
401   ./make_obj_store_test.sh obj_coercion_32_${I} invalid "$OP" 'unsigned int32' object
402  
403   ./make_obj_store_test.sh obj_coercion_33_${I} invalid "$OP" int64 int32
404   ./make_obj_store_test.sh obj_coercion_34_${I} invalid "$OP" int64 'native int'
405   ./make_obj_store_test.sh obj_coercion_35_${I} invalid "$OP" int64 float64
406   ./make_obj_store_test.sh obj_coercion_36_${I} invalid "$OP" int64 'int64&'
407   ./make_obj_store_test.sh obj_coercion_37_${I} invalid "$OP" int64 object
408   
409   ./make_obj_store_test.sh obj_coercion_38_${I} invalid "$OP" 'unsigned int64' int32
410   ./make_obj_store_test.sh obj_coercion_39_${I} invalid "$OP" 'unsigned int64' 'native int'
411   ./make_obj_store_test.sh obj_coercion_40_${I} invalid "$OP" 'unsigned int64' float64
412   ./make_obj_store_test.sh obj_coercion_41_${I} invalid "$OP" 'unsigned int64' 'unsigned int64&'
413   ./make_obj_store_test.sh obj_coercion_42_${I} invalid "$OP" 'unsigned int64' object
414   
415   ./make_obj_store_test.sh obj_coercion_43_${I} invalid "$OP" 'native int' int64
416   ./make_obj_store_test.sh obj_coercion_44_${I} invalid "$OP" 'native int' float64
417   ./make_obj_store_test.sh obj_coercion_45_${I} invalid "$OP" 'native int' 'native int&'
418   ./make_obj_store_test.sh obj_coercion_46_${I} invalid "$OP" 'native int' object
419   
420   ./make_obj_store_test.sh obj_coercion_47_${I} invalid "$OP" 'native unsigned int' int64
421   ./make_obj_store_test.sh obj_coercion_48_${I} invalid "$OP" 'native unsigned int' float64
422   ./make_obj_store_test.sh obj_coercion_49_${I} invalid "$OP" 'native unsigned int' 'native unsigned int&'
423   ./make_obj_store_test.sh obj_coercion_50_${I} invalid "$OP" 'native unsigned int' object
424   
425   ./make_obj_store_test.sh obj_coercion_51_${I} invalid "$OP" float32 int32
426   ./make_obj_store_test.sh obj_coercion_52_${I} invalid "$OP" float32 'native int'
427   ./make_obj_store_test.sh obj_coercion_53_${I} invalid "$OP" float32 int64
428   ./make_obj_store_test.sh obj_coercion_54_${I} invalid "$OP" float32 'float32&'
429   ./make_obj_store_test.sh obj_coercion_55_${I} invalid "$OP" float32 object
430   
431   ./make_obj_store_test.sh obj_coercion_56_${I} invalid "$OP" float64 int32
432   ./make_obj_store_test.sh obj_coercion_57_${I} invalid "$OP" float64 'native int'
433   ./make_obj_store_test.sh obj_coercion_58_${I} invalid "$OP" float64 int64
434   ./make_obj_store_test.sh obj_coercion_59_${I} invalid "$OP" float64 'float64&'
435   ./make_obj_store_test.sh obj_coercion_60_${I} invalid "$OP" float64 object
436
437   ./make_obj_store_test.sh obj_coercion_61_${I} invalid "$OP" object int32
438   ./make_obj_store_test.sh obj_coercion_62_${I} invalid "$OP" object 'native int'
439   ./make_obj_store_test.sh obj_coercion_63_${I} invalid "$OP" object int64
440   ./make_obj_store_test.sh obj_coercion_64_${I} invalid "$OP" object float64
441   ./make_obj_store_test.sh obj_coercion_65_${I} invalid "$OP" object 'object&'
442   
443   ./make_obj_store_test.sh obj_coercion_66_${I} invalid "$OP" 'class ValueType' int32
444   ./make_obj_store_test.sh obj_coercion_67_${I} invalid "$OP" 'class ValueType' 'native int'
445   ./make_obj_store_test.sh obj_coercion_68_${I} invalid "$OP" 'class ValueType' int64
446   ./make_obj_store_test.sh obj_coercion_69_${I} invalid "$OP" 'class ValueType' float64
447   ./make_obj_store_test.sh obj_coercion_70_${I} invalid "$OP" 'class ValueType' 'class ValueType&'
448   ./make_obj_store_test.sh obj_coercion_71_${I} invalid "$OP" 'class ValueType' object
449   
450   ./make_obj_store_test.sh obj_coercion_72_${I} invalid "$OP" 'int32&' int32
451   ./make_obj_store_test.sh obj_coercion_73_${I} unverifiable "$OP" 'int32&' 'native int'
452   ./make_obj_store_test.sh obj_coercion_74_${I} invalid "$OP" 'int32&' int64
453   ./make_obj_store_test.sh obj_coercion_75_${I} invalid "$OP" 'int32&' float64
454   ./make_obj_store_test.sh obj_coercion_76_${I} invalid "$OP" 'int32&' object
455   
456   ./make_obj_store_test.sh obj_coercion_77_${I} invalid "$OP" typedref int32
457   ./make_obj_store_test.sh obj_coercion_78_${I} invalid "$OP" typedref 'native int'
458   ./make_obj_store_test.sh obj_coercion_79_${I} invalid "$OP" typedref int64
459   ./make_obj_store_test.sh obj_coercion_80_${I} invalid "$OP" typedref float64
460   ./make_obj_store_test.sh obj_coercion_81_${I} invalid "$OP" typedref 'typedref&'
461   ./make_obj_store_test.sh obj_coercion_82_${I} invalid "$OP" typedref object
462   I=`expr $I + 1`
463 done
464
465 # 1.8.1.2.3 Verification type compatibility (Assignment compatibility)
466 I=1
467 for OP in stloc.0 "stloc.s 0" "starg.s 0"
468 do
469   # ClassB not subtype of ClassA.
470   ./make_store_test.sh assign_compat_1_${I} unverifiable "$OP" 'class ClassA' 'classB'
471
472   # ClassA not interface type.
473   ./make_store_test.sh assign_compat_3_${I} unverifiable "$OP" object 'class ClassA'
474   
475   # Implementation of InterfaceB does not require the implementation of InterfaceA
476   ./make_store_test.sh assign_compat_4_${I} unverifiable "$OP" 'class InterfaceA' 'class InterfaceB'
477
478   # Array/vector.
479   ./make_store_test.sh assign_compat_5_${I} unverifiable "$OP" 'string []' 'string[,]'
480
481   # Vector/array.
482   ./make_store_test.sh assign_compat_6_${I} unverifiable "$OP" 'string [,]' 'string[]'
483
484   # Arrays with different rank.
485   ./make_store_test.sh assign_compat_7_${I} unverifiable "$OP" 'string [,]' 'string[,,]'
486
487   # Method pointers with different return types.
488   ./make_store_test.sh assign_compat_8_${I} unverifiable "$OP" 'method int32 *(int32)' 'method float32 *(int32)'
489
490   # Method pointers with different parameters.
491   ./make_store_test.sh assign_compat_9_${I} unverifiable "$OP" 'method int32 *(float64)' 'method int32 *(int32)'
492
493   # Method pointers with different calling conventions.
494   ./make_store_test.sh assign_compat_10_${I} unverifiable "$OP" 'method vararg int32 *(int32)' 'method int32 *(int32)'
495   I=`expr $I + 1`
496 done
497
498 for OP in "stfld TYPE1 Class::fld" "call void Class::Method(TYPE1)"
499 do
500   # ClassB not subtype of ClassA.
501   ./make_obj_store_test.sh assign_compat_1_${I} unverifiable "$OP" 'class ClassA' 'classB'
502
503   # ClassA not interface type.
504   ./make_obj_store_test.sh assign_compat_3_${I} unverifiable "$OP" object 'class ClassA'
505   
506   # Implementation of InterfaceB does not require the implementation of InterfaceA
507   ./make_obj_store_test.sh assign_compat_4_${I} unverifiable "$OP" 'class InterfaceA' 'class InterfaceB'
508
509   # Array/vector.
510   ./make_obj_store_test.sh assign_compat_5_${I} unverifiable "$OP" 'string []' 'string[,]'
511
512   # Vector/array.
513   ./make_obj_store_test.sh assign_compat_6_${I} unverifiable "$OP" 'string [,]' 'string[]'
514
515   # Arrays with different rank.
516   ./make_obj_store_test.sh assign_compat_7_${I} unverifiable "$OP" 'string [,]' 'string[,,]'
517
518   # Method pointers with different return types.
519   ./make_obj_store_test.sh assign_compat_8_${I} unverifiable "$OP" 'method int32 *(int32)' 'method float32 *(int32)'
520
521   # Method pointers with different parameters.
522   ./make_obj_store_test.sh assign_compat_9_${I} unverifiable "$OP" 'method int32 *(float64)' 'method int32 *(int32)'
523
524   # Method pointers with different calling conventions.
525   ./make_obj_store_test.sh assign_compat_10_${I} unverifiable "$OP" 'method vararg int32 *(int32)' 'method int32 *(int32)'
526   I=`expr $I + 1`
527 done
528
529 # 1.8.1.3 Merging stack states
530 I=1
531 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 int32 *(int32)' 'method float32 *(int32)' 'method int32 *(float64)' 'method vararg int32 *(int32)'
532 do
533   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 int32 *(int32)' 'method float32 *(int32)' 'method int32 *(float64)' 'method vararg int32 *(int32)'
534   do
535     if [ "$TYPE1" != "$TYPE2" ]; then
536         ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
537         I=`expr $I + 1`
538     fi
539   done
540 done
541
542 # Unverifiable array stack merges
543
544 # These are verifiable, the merged type is 'object' or 'Array'
545 #for TYPE1 in 'string []' 'string [,]' 'string [,,]' 
546 #do
547 #  for TYPE2 in 'string []' 'string [,]' 'string [,,]' 
548 #  do
549 #    if [ "$TYPE1" != "$TYPE2" ]; then
550 #       ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
551 #       I=`expr $I + 1`
552 #    fi
553 #  done
554 #done
555
556 # Exception block branch tests (see 3.15)
557 I=1
558 for OP in br "ldc.i4.0\n\tbrfalse"
559 do
560   ./make_exception_branch_test.sh in_try_${I} "$OP branch_target1"
561   ./make_exception_branch_test.sh in_catch_${I} "$OP branch_target2"
562   ./make_exception_branch_test.sh in_finally_${I} "$OP branch_target3"
563   ./make_exception_branch_test.sh in_filter_${I} "$OP branch_target4"
564   ./make_exception_branch_test.sh out_try_${I} "" "$OP branch_target5"
565   ./make_exception_branch_test.sh out_catch_${I} "" "" "$OP branch_target5"
566   ./make_exception_branch_test.sh out_finally_${I} "" "" "" "$OP branch_target5"
567   ./make_exception_branch_test.sh out_filter_${I} "" "" "" "" "$OP branch_target5"
568   I=`expr $I + 1`
569 done
570
571 ./make_exception_branch_test.sh ret_out_try "" "ldc.i4.0\n\tret"
572 ./make_exception_branch_test.sh ret_out_catch "" "" "ldc.i4.0\n\tret"
573 ./make_exception_branch_test.sh ret_out_finally "" "" "" "ldc.i4.0\n\tret"
574 ./make_exception_branch_test.sh ret_out_filter "" "" "" "" "ldc.i4.0\n\tret"
575
576 # Unary branch op type tests (see 3.17)
577
578 for OP in brfalse
579 do
580   ./make_unary_test.sh un_branch_op invalid "$OP branch_target" float64
581 done
582
583 # Ldloc.0 and Ldarg tests (see 3.38)
584
585 I=1
586 for OP in "ldarg.s 0" "ldarg.0" "ldarga.s 0" "ldloc.s 1" "ldloca.s 1"
587 do
588   ./make_unary_test.sh ld_no_slot_${I} invalid "pop\n\t$OP\n\tpop" int32
589   I=`expr $I + 1`
590 done
591
592 # Starg and Stloc tests (see 3.61)
593
594 I=1
595 for OP in "starg.s 0" "stloc.s 1"
596 do
597   ./make_unary_test.sh st_no_slot_${I} invalid "$OP" int32
598   I=`expr $I + 1`
599 done
600
601 # Ldfld and Ldflda tests (see 4.10)
602
603 for OP in ldfld ldflda
604 do
605   ./make_unary_test.sh ${OP}_no_fld invalid "$OP int32 Class::invalid\n\tpop" "class Class"
606   ./make_unary_test.sh ${OP}_bad_obj invalid "$OP int32 Class::valid\n\tpop" object
607   ./make_unary_test.sh ${OP}_obj_int32 invalid "$OP int32 Class::valid\n\tpop" int32
608   ./make_unary_test.sh ${OP}_obj_int64 invalid "$OP int32 Class::valid\n\tpop" int64
609   ./make_unary_test.sh ${OP}_obj_float64 invalid "$OP int32 Class::valid\n\tpop" float64
610   ./make_unary_test.sh ${OP}_obj_native_int unverifiable "$OP int32 Class::valid\n\tpop" 'native int'
611   ./make_unary_test.sh ${OP}_obj_native_int unverifiable "$OP object Overlapped::objVal\n\tpop" "class Overlapped"
612   ./make_unary_test.sh ${OP}_obj_native_int unverifiable "$OP int32 Overlapped::publicIntVal\n\tpop" "class Overlapped"
613 done
614
615 # Stfld tests (see 4.28)
616
617 ./make_unary_test.sh stfld_no_fld invalid "ldc.i4.0\n\tstfld int32 Class::invalid" "class Class"
618 ./make_unary_test.sh stfld_bad_obj invalid "ldc.i4.0\n\tstfld int32 Class::valid" object
619 ./make_unary_test.sh stfld_obj_int32 invalid "ldc.i4.0\n\tstfld int32 Class::valid" int32
620 ./make_unary_test.sh stfld_obj_int64 invalid "ldc.i4.0\n\tstfld int32 Class::valid" int64
621 ./make_unary_test.sh stfld_obj_float64 invalid "ldc.i4.0\n\tstfld int32 Class::valid" float64
622 ./make_unary_test.sh stfld_no_int invalid "stfld int32 Class::valid" "class Class"
623 ./make_unary_test.sh stfld_obj_native_int unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" 'native int'
624
625 # Box tests (see 4.1)
626
627 # Box non-existent type.
628 ./make_unary_test.sh box_bad_type unverifiable "box valuetype NonExistent\n\tpop" "valuetype NonExistent"
629
630 # Top of stack not assignment compatible with typeToc.
631 ./make_unary_test.sh box_not_compat unverifiable "box [mscorlib]System.Int32\n\tpop" float32
632
633 # Box byref type.
634 ./make_unary_test.sh box_byref unverifiable "box [mscorlib]System.Int32&\n\tpop" 'int32&'
635
636 # Box byref-like type.
637 ./make_unary_test.sh box_byref_like unverifiable "box [mscorlib]System.TypedRefrence\n\tpop" typedref
638
639 # Box void type.
640 ./make_unary_test.sh box_void unverifiable "box [mscorlib]System.Void\n\tpop" "class [mscorlib]System.Void"