2007-08-13 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mono / tests / verifier / make_tests.sh
1 #! /bin/sh
2
3 # Stack Size Tests
4 for OP in 'starg.s 0'
5 do
6   ./make_stack_0_test.sh invalid "$OP"
7 done
8
9 for OP in 'stloc.0' 'stloc.s 0' 'stfld int32 Class::fld' pop ret
10 do
11   ./make_stack_0_test.sh invalid "$OP"
12 done
13
14 for OP in add and 'box [mscorlib]System.Int32' 'brfalse branch_target' ceq cgt clt conv.i4 conv.r8 div dup 'ldfld int32 Class::fld' 'ldflda int32 Class::fld' mul not or rem shl shr sub xor
15 do
16   ./make_stack_0_pop_test.sh "$OP"
17 done
18
19 for OP in add and ceq cgt clt div dup mul or rem shl shr sub xor 'stfld int32 Class::fld'
20 do
21   ./make_stack_1_pop_test.sh "$OP" int32
22 done
23
24 # Table 2: Binary Numeric Operators
25 I=1
26 for OP in add div mul rem sub
27 do
28   if [ "$OP" == "div" ] || [ "$OP" == "rem" ]; then
29         INIT="yes";
30   else
31         INIT="no";
32   fi
33         
34   ./make_bin_test.sh bin_num_op_32_${I} valid $OP int32 int32 "ldc.i4.1" "${INIT}"
35   ./make_bin_test.sh bin_num_op_33_${I} valid $OP int32 'native int' "ldc.i4.1" "${INIT}"
36   ./make_bin_test.sh bin_num_op_34_${I} valid $OP int64 int64 "ldc.i8 1" "${INIT}"
37   ./make_bin_test.sh bin_num_op_35_${I} valid $OP 'native int' int32 "ldc.i4.1" "${INIT}"
38   ./make_bin_test.sh bin_num_op_36_${I} valid $OP 'native int' 'native int' "ldc.i4.1" "${INIT}"
39   ./make_bin_test.sh bin_num_op_37_${I} valid $OP float64 float64 "ldc.r8 0" "${INIT}"
40   ./make_bin_test.sh bin_num_op_38_${I} valid $OP float32 float64 "ldc.r8 0" "${INIT}"
41   ./make_bin_test.sh bin_num_op_39_${I} valid $OP float64 float32 "ldc.r4 0" "${INIT}"
42   ./make_bin_test.sh bin_num_op_40_${I} valid $OP float32 float32 "ldc.r4 0" "${INIT}"
43   
44   ./make_bin_test.sh bin_num_op_1_${I} unverifiable $OP int32 int64 "ldc.i8 1" "${INIT}"
45   ./make_bin_test.sh bin_num_op_2_${I} unverifiable $OP int32 float64 "ldc.r8 0" "${INIT}"
46   ./make_bin_test.sh bin_num_op_3_${I} unverifiable $OP int32 object "ldnull" "${INIT}"
47
48   ./make_bin_test.sh bin_num_op_4_${I} unverifiable $OP int64 int32 "ldc.i4.1" "${INIT}"
49   ./make_bin_test.sh bin_num_op_5_${I} unverifiable $OP int64 'native int' "ldc.i4.1" "${INIT}"
50   ./make_bin_test.sh bin_num_op_6_${I} unverifiable $OP int64 float64 "ldc.r8 0" "${INIT}"
51   ./make_bin_test.sh bin_num_op_7_${I} unverifiable $OP int64 'int64&' "ldnull" "${INIT}"
52   ./make_bin_test.sh bin_num_op_8_${I} unverifiable $OP int64 object "ldnull" "${INIT}"
53
54   ./make_bin_test.sh bin_num_op_9_${I} unverifiable $OP 'native int' int64 "ldc.i8 1" "${INIT}"
55   ./make_bin_test.sh bin_num_op_10_${I} unverifiable $OP 'native int' float64 "ldc.r8 0" "${INIT}"
56   ./make_bin_test.sh bin_num_op_11_${I} unverifiable $OP 'native int' object "ldnull" "${INIT}"
57
58   ./make_bin_test.sh bin_num_op_12_${I} unverifiable $OP float64 int32 "ldc.i4.1" "${INIT}"
59   ./make_bin_test.sh bin_num_op_13_${I} unverifiable $OP float64 int64 "ldc.i8 1" "${INIT}"
60   ./make_bin_test.sh bin_num_op_14_${I} unverifiable $OP float64 'native int' "ldc.i4.1" "${INIT}"
61   ./make_bin_test.sh bin_num_op_15_${I} unverifiable $OP float64 'float64&' "ldnull" "${INIT}"
62   ./make_bin_test.sh bin_num_op_16_${I} unverifiable $OP float64 object "ldnull" "${INIT}"
63
64   ./make_bin_test.sh bin_num_op_17_${I} unverifiable $OP 'int64&' int64 "ldc.i8 1" "${INIT}"
65   ./make_bin_test.sh bin_num_op_18_${I} unverifiable $OP 'float64&' float64 "ldc.r8 0" "${INIT}"
66   ./make_bin_test.sh bin_num_op_19_${I} unverifiable $OP 'object&' object "ldnull" "${INIT}"
67
68   ./make_bin_test.sh bin_num_op_20_${I} unverifiable $OP object int32 "ldc.i4.1" "${INIT}"
69   ./make_bin_test.sh bin_num_op_21_${I} unverifiable $OP object int64 "ldc.i8 1" "${INIT}"
70   ./make_bin_test.sh bin_num_op_22_${I} unverifiable $OP object 'native int' "ldc.i4.1" "${INIT}"
71   ./make_bin_test.sh bin_num_op_23_${I} unverifiable $OP object float64 "ldc.r8 0" "${INIT}"
72   ./make_bin_test.sh bin_num_op_24_${I} unverifiable $OP object 'object&' "ldnull" "${INIT}"
73   ./make_bin_test.sh bin_num_op_25_${I} unverifiable $OP object object "ldnull" "${INIT}"
74   I=`expr $I + 1`
75 done
76
77 I=1
78 for OP in div mul rem sub
79 do
80   ./make_bin_test.sh bin_num_op_26_${I} unverifiable $OP int32 'int32&'
81   ./make_bin_test.sh bin_num_op_27_${I} unverifiable $OP 'native int' 'native int&'
82   I=`expr $I + 1`
83 done
84
85 for OP in add
86 do
87   ./make_bin_test.sh bin_num_op_26_${I} unverifiable $OP int32 'int32&'
88   ./make_bin_test.sh bin_num_op_27_${I} unverifiable $OP 'native int' 'native int&'
89   I=`expr $I + 1`
90 done
91
92 I=1
93 for OP in div mul rem
94 do
95   if [ "$OP" == "div" ] || [ "$OP" == "div" ]; then
96         INIT="yes";
97   else
98         INIT="no";
99   fi
100   ./make_bin_test.sh bin_num_op_28_${I} unverifiable $OP 'int32&' int32 "ldc.i4.1" "${INIT}"
101   ./make_bin_test.sh bin_num_op_29_${I} unverifiable $OP 'native int&' 'native int' "ldc.i4.1" "${INIT}"
102   I=`expr $I + 1`
103 done
104
105 for OP in add sub
106 do
107   ./make_bin_test.sh bin_num_op_28_${I} unverifiable $OP 'int32&' int32
108   ./make_bin_test.sh bin_num_op_29_${I} unverifiable $OP 'native int&' 'native int'
109   I=`expr $I + 1`
110 done
111
112 I=1
113 for OP in div mul rem add
114 do
115   if [ "$OP" == "div" ] || [ "$OP" == "div" ]; then
116         INIT="yes";
117   else
118         INIT="no";
119   fi
120   ./make_bin_test.sh bin_num_op_30_${I} unverifiable $OP 'int32&' 'int32&' "ldnull" "${INIT}"
121   I=`expr $I + 1`
122 done
123
124 for OP in sub
125 do
126   ./make_bin_test.sh bin_num_op_30_${I} unverifiable $OP 'int32&' 'int32&'
127   I=`expr $I + 1`
128 done
129
130 # Table 4: Binary Comparison or Branch Operations
131 I=1
132 for OP in ceq cgt clt
133 do
134   ./make_bin_test.sh bin_comp_op_1_${I} unverifiable $OP int32 int64
135   ./make_bin_test.sh bin_comp_op_2_${I} unverifiable $OP int32 float64
136   ./make_bin_test.sh bin_comp_op_3_${I} unverifiable $OP int32 'int32&'
137   ./make_bin_test.sh bin_comp_op_4_${I} unverifiable $OP int32 object
138
139   ./make_bin_test.sh bin_comp_op_5_${I} unverifiable $OP int64 int32
140   ./make_bin_test.sh bin_comp_op_6_${I} unverifiable $OP int64 'native int'
141   ./make_bin_test.sh bin_comp_op_7_${I} unverifiable $OP int64 float64
142   ./make_bin_test.sh bin_comp_op_8_${I} unverifiable $OP int64 'int64&'
143   ./make_bin_test.sh bin_comp_op_9_${I} unverifiable $OP int64 object
144
145   ./make_bin_test.sh bin_comp_op_10_${I} unverifiable $OP 'native int' int64
146   ./make_bin_test.sh bin_comp_op_11_${I} unverifiable $OP 'native int' float64
147   ./make_bin_test.sh bin_comp_op_12_${I} unverifiable $OP 'native int' object
148
149   ./make_bin_test.sh bin_comp_op_13_${I} unverifiable $OP float64 int32
150   ./make_bin_test.sh bin_comp_op_14_${I} unverifiable $OP float64 int64
151   ./make_bin_test.sh bin_comp_op_15_${I} unverifiable $OP float64 'native int'
152   ./make_bin_test.sh bin_comp_op_16_${I} unverifiable $OP float64 'float64&'
153   ./make_bin_test.sh bin_comp_op_17_${I} unverifiable $OP float64 object
154
155   ./make_bin_test.sh bin_comp_op_18_${I} unverifiable $OP 'int32&' int32
156   ./make_bin_test.sh bin_comp_op_19_${I} unverifiable $OP 'int64&' int64
157   ./make_bin_test.sh bin_comp_op_20_${I} unverifiable $OP 'float64&' float64
158   ./make_bin_test.sh bin_comp_op_21_${I} unverifiable $OP 'object&' object
159
160   ./make_bin_test.sh bin_comp_op_22_${I} unverifiable $OP object int32
161   ./make_bin_test.sh bin_comp_op_23_${I} unverifiable $OP object int64
162   ./make_bin_test.sh bin_comp_op_24_${I} unverifiable $OP object 'native int'
163   ./make_bin_test.sh bin_comp_op_25_${I} unverifiable $OP object float64
164   ./make_bin_test.sh bin_comp_op_26_${I} unverifiable $OP object 'object&'
165   I=`expr $I + 1`
166 done
167
168 I=1
169 for OP in cgt clt
170 do
171   ./make_bin_test.sh bin_comp_op_27_${I} unverifiable $OP 'native int' 'native int&'
172   ./make_bin_test.sh bin_comp_op_28_${I} unverifiable $OP 'native int&' 'native int'
173   ./make_bin_test.sh bin_comp_op_29_${I} unverifiable $OP object object
174   I=`expr $I + 1`
175 done
176
177 for OP in ceq
178 do
179   ./make_bin_test.sh bin_comp_op_27_${I} unverifiable $OP 'native int' 'native int&'
180   ./make_bin_test.sh bin_comp_op_28_${I} unverifiable $OP 'native int&' 'native int'
181   I=`expr $I + 1`
182 done
183
184 # Table 5: Integer Operations
185 I=1
186 for OP in and or xor
187 do
188   ./make_bin_test.sh bin_int_op_1_${I} unverifiable "$OP" int32 int64
189   ./make_bin_test.sh bin_int_op_2_${I} unverifiable "$OP" int32 float64
190   ./make_bin_test.sh bin_int_op_3_${I} unverifiable "$OP" int32 'int32&'
191   ./make_bin_test.sh bin_int_op_4_${I} unverifiable "$OP" int32 object
192
193   ./make_bin_test.sh bin_int_op_5_${I} unverifiable "$OP" int64 int32
194   ./make_bin_test.sh bin_int_op_6_${I} unverifiable "$OP" int64 'native int'
195   ./make_bin_test.sh bin_int_op_7_${I} unverifiable "$OP" int64 float64
196   ./make_bin_test.sh bin_int_op_8_${I} unverifiable "$OP" int64 'int64&'
197   ./make_bin_test.sh bin_int_op_9_${I} unverifiable "$OP" int64 object
198
199   ./make_bin_test.sh bin_int_op_10_${I} unverifiable "$OP" 'native int' int64
200   ./make_bin_test.sh bin_int_op_11_${I} unverifiable "$OP" 'native int' float64
201   ./make_bin_test.sh bin_int_op_12_${I} unverifiable "$OP" 'native int' 'native int&'
202   ./make_bin_test.sh bin_int_op_13_${I} unverifiable "$OP" 'native int' object
203
204   ./make_bin_test.sh bin_int_op_14_${I} unverifiable "$OP" float64 int32
205   ./make_bin_test.sh bin_int_op_15_${I} unverifiable "$OP" float64 int64
206   ./make_bin_test.sh bin_int_op_16_${I} unverifiable "$OP" float64 'native int'
207   ./make_bin_test.sh bin_int_op_17_${I} unverifiable "$OP" float64 float64
208   ./make_bin_test.sh bin_int_op_18_${I} unverifiable "$OP" float64 'int32&'
209   ./make_bin_test.sh bin_int_op_19_${I} unverifiable "$OP" float64 object
210
211   ./make_bin_test.sh bin_int_op_20_${I} unverifiable "$OP" 'int32&' int32
212   ./make_bin_test.sh bin_int_op_21_${I} unverifiable "$OP" 'int64&' int64
213   ./make_bin_test.sh bin_int_op_22_${I} unverifiable "$OP" 'native int&' 'native int'
214   ./make_bin_test.sh bin_int_op_23_${I} unverifiable "$OP" 'float64&' float64
215   ./make_bin_test.sh bin_int_op_24_${I} unverifiable "$OP" 'int32&' 'int32&'
216   ./make_bin_test.sh bin_int_op_25_${I} unverifiable "$OP" 'float64&' object
217
218   ./make_bin_test.sh bin_int_op_26_${I} unverifiable "$OP" object int32
219   ./make_bin_test.sh bin_int_op_27_${I} unverifiable "$OP" object int64
220   ./make_bin_test.sh bin_int_op_28_${I} unverifiable "$OP" object 'native int'
221   ./make_bin_test.sh bin_int_op_29_${I} unverifiable "$OP" object float64
222   ./make_bin_test.sh bin_int_op_30_${I} unverifiable "$OP" object 'int32&'
223   ./make_bin_test.sh bin_int_op_31_${I} unverifiable "$OP" object object
224   I=`expr $I + 1`
225 done
226
227 I=1
228 for TYPE in bool int8 int16 char int32 int64 'native int' 'class Int8Enum'
229 do
230   ./make_unary_test.sh not_${I} valid "not\n\tpop" "$TYPE"
231   I=`expr $I + 1`
232 done
233
234 for TYPE in 'int32&' object "class MyStruct" typedref "method int32 *(int32)" 'class Template\`1<int32>' float32 float64
235 do
236   ./make_unary_test.sh not_${I} unverifiable "not\n\tpop" "$TYPE"
237   I=`expr $I + 1`
238 done
239
240 I=1
241 for TYPE in bool int8 int16 char int32 int64 'native int' 'class Int8Enum' float32 float64
242 do
243   ./make_unary_test.sh neg_${I} valid "neg\n\tpop" "$TYPE"
244   I=`expr $I + 1`
245 done
246
247 for TYPE in 'int32&' object "class MyStruct" typedref "method int32 *(int32)" 'class Template\`1<int32>'
248 do
249   ./make_unary_test.sh neg_${I} unverifiable "neg\n\tpop" "$TYPE"
250   I=`expr $I + 1`
251 done
252
253
254 # Table 6: Shift Operators
255 I=1
256 for OP in shl shr
257 do
258   ./make_bin_test.sh shift_op_1_${I} unverifiable $OP int32 int64
259   ./make_bin_test.sh shift_op_2_${I} unverifiable $OP int32 float64
260   ./make_bin_test.sh shift_op_3_${I} unverifiable $OP int32 'int32&'
261   ./make_bin_test.sh shift_op_4_${I} unverifiable $OP int32 object
262
263   ./make_bin_test.sh shift_op_5_${I} unverifiable $OP int64 int64
264   ./make_bin_test.sh shift_op_6_${I} unverifiable $OP int64 float64
265   ./make_bin_test.sh shift_op_7_${I} unverifiable $OP int64 'int32&'
266   ./make_bin_test.sh shift_op_8_${I} unverifiable $OP int64 object
267
268   ./make_bin_test.sh shift_op_9_${I} unverifiable $OP 'native int' int64
269   ./make_bin_test.sh shift_op_10_${I} unverifiable $OP 'native int' float64
270   ./make_bin_test.sh shift_op_11_${I} unverifiable $OP 'native int' 'native int&'
271   ./make_bin_test.sh shift_op_12_${I} unverifiable $OP 'native int' object
272
273   ./make_bin_test.sh shift_op_13_${I} unverifiable $OP float64 int32
274   ./make_bin_test.sh shift_op_14_${I} unverifiable $OP float64 int64
275   ./make_bin_test.sh shift_op_15_${I} unverifiable $OP float64 'native int'
276   ./make_bin_test.sh shift_op_16_${I} unverifiable $OP float64 float64
277   ./make_bin_test.sh shift_op_17_${I} unverifiable $OP float64 'int32&'
278   ./make_bin_test.sh shift_op_18_${I} unverifiable $OP float64 object
279
280   ./make_bin_test.sh shift_op_19_${I} unverifiable $OP 'int32&' int32
281   ./make_bin_test.sh shift_op_20_${I} unverifiable $OP 'int64&' int64
282   ./make_bin_test.sh shift_op_21_${I} unverifiable $OP 'native int&' 'native int'
283   ./make_bin_test.sh shift_op_22_${I} unverifiable $OP 'float64&' float64
284   ./make_bin_test.sh shift_op_23_${I} unverifiable $OP 'int32&' 'int32&'
285   ./make_bin_test.sh shift_op_24_${I} unverifiable $OP 'float64&' object
286
287   ./make_bin_test.sh shift_op_25_${I} unverifiable $OP object int32
288   ./make_bin_test.sh shift_op_26_${I} unverifiable $OP object int64
289   ./make_bin_test.sh shift_op_27_${I} unverifiable $OP object 'native int'
290   ./make_bin_test.sh shift_op_28_${I} unverifiable $OP object float64
291   ./make_bin_test.sh shift_op_29_${I} unverifiable $OP object 'int32&'
292   ./make_bin_test.sh shift_op_30_${I} unverifiable $OP object object
293   I=`expr $I + 1`
294 done
295
296 # Table 8: Conversion Operations
297 I=1
298 J=1
299 for OP in "conv.i1\n\tpop" "conv.i2\n\tpop" "conv.i4\n\tpop" "conv.i8\n\tpop" "conv.r4\n\tpop" "conv.r8\n\tpop" "conv.u1\n\tpop" "conv.u2\n\tpop" "conv.u4\n\tpop" "conv.u8\n\tpop" "conv.i\n\tpop" "conv.u\n\tpop" "conv.r.un\n\tpop" "conv.ovf.i1\n\tpop" "conv.ovf.i2\n\tpop" "conv.ovf.i4\n\tpop" "conv.ovf.i8\n\tpop" "conv.ovf.u1\n\tpop" "conv.ovf.u2\n\tpop" "conv.ovf.u4\n\tpop" "conv.ovf.u8\n\tpop" "conv.ovf.i\n\tpop"  "conv.ovf.u\n\tpop" "conv.ovf.i1.un\n\tpop" "conv.ovf.i2.un\n\tpop" "conv.ovf.i4.un\n\tpop" "conv.ovf.i8.un\n\tpop" "conv.ovf.u1.un\n\tpop" "conv.ovf.u2.un\n\tpop" "conv.ovf.u4.un\n\tpop" "conv.ovf.u8.un\n\tpop" "conv.ovf.i.un\n\tpop"  "conv.ovf.u.un\n\tpop" 
300 do
301   for TYPE in 'int8' 'bool' 'unsigned int8' 'int16' 'char' 'unsigned int16' 'int32' 'unsigned int32' 'int64' 'unsigned int64' 'float32' 'float64' 'native int' 'native unsigned int'
302   do
303     ./make_unary_test.sh conv_op_${J}_${I} valid $OP "$TYPE"
304     I=`expr $I + 1`
305   done
306
307   for TYPE in 'object' 'string' 'class Class' 'valuetype MyStruct' 'int32[]' 'int32[,]' 'typedref' 'int32*' 'method int32 *(int32)' 'class Template`1<object>' 'int8&' 'bool&' 'unsigned int8&' 'int16&' 'char&' 'unsigned int16&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&' 'native int&' 'native unsigned int&' 'object&' 'string&' 'class Class&' 'valuetype MyStruct&' 'int32[]&' 'int32[,]&' 'typedref&'  'class Template`1<object>&'
308   do
309     ./make_unary_test.sh conv_op_${J}_${I} unverifiable $OP "$TYPE"
310     I=`expr $I + 1`
311   done
312   J=`expr $J + 1`
313   I=1
314 done
315
316 #local and argument store with invalid values lead to unverifiable code
317 I=1
318 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
319 do
320   ./make_store_test.sh coercion_1_${I} unverifiable "$OP" int8 int64
321   ./make_store_test.sh coercion_2_${I} unverifiable "$OP" int8 float64
322   ./make_store_test.sh coercion_3_${I} unverifiable "$OP" int8 'int8&'
323   ./make_store_test.sh coercion_4_${I} unverifiable "$OP" int8 object
324
325   ./make_store_test.sh coercion_5_${I} unverifiable "$OP" 'unsigned int8' int64
326   ./make_store_test.sh coercion_6_${I} unverifiable "$OP" 'unsigned int8' float64
327   ./make_store_test.sh coercion_7_${I} unverifiable "$OP" 'unsigned int8' 'unsigned int8&'
328   ./make_store_test.sh coercion_8_${I} unverifiable "$OP" 'unsigned int8' object
329
330   ./make_store_test.sh coercion_9_${I} unverifiable "$OP" bool int64
331   ./make_store_test.sh coercion_10_${I} unverifiable "$OP" bool float64
332   ./make_store_test.sh coercion_11_${I} unverifiable "$OP" bool 'bool&'
333   ./make_store_test.sh coercion_12_${I} unverifiable "$OP" bool object
334
335   ./make_store_test.sh coercion_13_${I} unverifiable "$OP" int16 int64
336   ./make_store_test.sh coercion_14_${I} unverifiable "$OP" int16 float64
337   ./make_store_test.sh coercion_15_${I} unverifiable "$OP" int16 'int16&'
338   ./make_store_test.sh coercion_16_${I} unverifiable "$OP" int16 object
339   
340   ./make_store_test.sh coercion_17_${I} unverifiable "$OP" 'unsigned int16' int64
341   ./make_store_test.sh coercion_18_${I} unverifiable "$OP" 'unsigned int16' float64
342   ./make_store_test.sh coercion_19_${I} unverifiable "$OP" 'unsigned int16' 'unsigned int16&'
343   ./make_store_test.sh coercion_20_${I} unverifiable "$OP" 'unsigned int16' object
344   
345   ./make_store_test.sh coercion_21_${I} unverifiable "$OP" char int64
346   ./make_store_test.sh coercion_22_${I} unverifiable "$OP" char float64
347   ./make_store_test.sh coercion_23_${I} unverifiable "$OP" char 'char&'
348   ./make_store_test.sh coercion_24_${I} unverifiable "$OP" char object
349   
350   ./make_store_test.sh coercion_25_${I} unverifiable "$OP" int32 int64
351   ./make_store_test.sh coercion_26_${I} unverifiable "$OP" int32 float64
352   ./make_store_test.sh coercion_27_${I} unverifiable "$OP" int32 'int32&'
353   ./make_store_test.sh coercion_28_${I} unverifiable "$OP" int32 object
354   
355   ./make_store_test.sh coercion_29_${I} unverifiable "$OP" 'unsigned int32' int64
356   ./make_store_test.sh coercion_30_${I} unverifiable "$OP" 'unsigned int32' float64
357   ./make_store_test.sh coercion_31_${I} unverifiable "$OP" 'unsigned int32' 'unsigned int32&'
358   ./make_store_test.sh coercion_32_${I} unverifiable "$OP" 'unsigned int32' object
359  
360   ./make_store_test.sh coercion_33_${I} unverifiable "$OP" int64 int32
361   ./make_store_test.sh coercion_34_${I} unverifiable "$OP" int64 'native int'
362   ./make_store_test.sh coercion_35_${I} unverifiable "$OP" int64 float64
363   ./make_store_test.sh coercion_36_${I} unverifiable "$OP" int64 'int64&'
364   ./make_store_test.sh coercion_37_${I} unverifiable "$OP" int64 object
365   
366   ./make_store_test.sh coercion_38_${I} unverifiable "$OP" 'unsigned int64' int32
367   ./make_store_test.sh coercion_39_${I} unverifiable "$OP" 'unsigned int64' 'native int'
368   ./make_store_test.sh coercion_40_${I} unverifiable "$OP" 'unsigned int64' float64
369   ./make_store_test.sh coercion_41_${I} unverifiable "$OP" 'unsigned int64' 'unsigned int64&'
370   ./make_store_test.sh coercion_42_${I} unverifiable "$OP" 'unsigned int64' object
371   
372   ./make_store_test.sh coercion_43_${I} unverifiable "$OP" 'native int' int64
373   ./make_store_test.sh coercion_44_${I} unverifiable "$OP" 'native int' float64
374   ./make_store_test.sh coercion_45_${I} unverifiable "$OP" 'native int' 'native int&'
375   ./make_store_test.sh coercion_46_${I} unverifiable "$OP" 'native int' object
376   
377   ./make_store_test.sh coercion_47_${I} unverifiable "$OP" 'native unsigned int' int64
378   ./make_store_test.sh coercion_48_${I} unverifiable "$OP" 'native unsigned int' float64
379   ./make_store_test.sh coercion_49_${I} unverifiable "$OP" 'native unsigned int' 'native unsigned int&'
380   ./make_store_test.sh coercion_50_${I} unverifiable "$OP" 'native unsigned int' object
381   
382   ./make_store_test.sh coercion_51_${I} unverifiable "$OP" float32 int32
383   ./make_store_test.sh coercion_52_${I} unverifiable "$OP" float32 'native int'
384   ./make_store_test.sh coercion_53_${I} unverifiable "$OP" float32 int64
385   ./make_store_test.sh coercion_54_${I} unverifiable "$OP" float32 'float32&'
386   ./make_store_test.sh coercion_55_${I} unverifiable "$OP" float32 object
387   
388   ./make_store_test.sh coercion_56_${I} unverifiable "$OP" float64 int32
389   ./make_store_test.sh coercion_57_${I} unverifiable "$OP" float64 'native int'
390   ./make_store_test.sh coercion_58_${I} unverifiable "$OP" float64 int64
391   ./make_store_test.sh coercion_59_${I} unverifiable "$OP" float64 'float64&'
392   ./make_store_test.sh coercion_60_${I} unverifiable "$OP" float64 object
393
394   ./make_store_test.sh coercion_61_${I} unverifiable "$OP" object int32
395   ./make_store_test.sh coercion_62_${I} unverifiable "$OP" object 'native int'
396   ./make_store_test.sh coercion_63_${I} unverifiable "$OP" object int64
397   ./make_store_test.sh coercion_64_${I} unverifiable "$OP" object float64
398   ./make_store_test.sh coercion_65_${I} unverifiable "$OP" object 'object&'
399   
400   ./make_store_test.sh coercion_66_${I} unverifiable "$OP" 'class ValueType' int32
401   ./make_store_test.sh coercion_67_${I} unverifiable "$OP" 'class ValueType' 'native int'
402   ./make_store_test.sh coercion_68_${I} unverifiable "$OP" 'class ValueType' int64
403   ./make_store_test.sh coercion_69_${I} unverifiable "$OP" 'class ValueType' float64
404   ./make_store_test.sh coercion_70_${I} unverifiable "$OP" 'class ValueType' 'class ValueType&'
405   ./make_store_test.sh coercion_71_${I} unverifiable "$OP" 'class ValueType' object
406   
407   ./make_store_test.sh coercion_72_${I} unverifiable "$OP" 'int32&' int32
408   ./make_store_test.sh coercion_73_${I} unverifiable "$OP" 'int32&' 'native int'
409   ./make_store_test.sh coercion_74_${I} unverifiable "$OP" 'int32&' int64
410   ./make_store_test.sh coercion_75_${I} unverifiable "$OP" 'int32&' float64
411   ./make_store_test.sh coercion_76_${I} unverifiable "$OP" 'int32&' object
412   
413   ./make_store_test.sh coercion_77_${I} unverifiable "$OP" typedref int32
414   ./make_store_test.sh coercion_78_${I} unverifiable "$OP" typedref 'native int'
415   ./make_store_test.sh coercion_89_${I} unverifiable "$OP" typedref int64
416   ./make_store_test.sh coercion_80_${I} unverifiable "$OP" typedref float64
417   ./make_store_test.sh coercion_81_${I} unverifiable "$OP" typedref 'typedref&'
418   ./make_store_test.sh coercion_82_${I} unverifiable "$OP" typedref object
419   I=`expr $I + 1`
420 done
421
422 function fix () {
423         if [ "$3" != "" ]; then
424                 A=$3;
425         elif [ "$2" != "" ]; then
426                 A=$2;
427         else
428                 A=$1;
429         fi
430
431         if [ "$A" == "bool&" ]; then
432                 A="int8&";
433         elif [ "$A" == "char&" ]; then
434                 A="int16&";
435         fi
436
437         echo "$A";
438 }
439
440 #Tests related to storing reference types on other reference types
441 I=1
442 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
443 do
444         for TYPE1 in 'native int&' 'native unsigned int&'
445         do
446                 for TYPE2 in 'int8&' 'unsigned int8&' 'bool&' 'int16&' 'unsigned int16&' 'char&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&' 'native int&' 'native unsigned int&'
447                 do
448                         TA="$(fix $TYPE1)"
449                         TB="$(fix $TYPE2)"
450                         if [ "$TA" == "$TB" ]; then
451                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
452                         elif [ "$TA" == "int32&" ] && [ "$TB" == "int&" ]; then
453                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
454                         elif [ "$TA" == "int&" ] && [ "$TB" == "int32&" ]; then
455                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
456                         else
457                                 ./make_store_test.sh ref_coercion_${I} unverifiable "$OP" "$TYPE1" "$TYPE2"
458                         fi
459                         I=`expr $I + 1`
460                 done
461         done
462 done
463
464 I=1
465 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
466 do
467         for TYPE1 in 'int8&' 'unsigned int8&' 'bool&' 'int16&' 'unsigned int16&' 'char&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&'
468         do
469                 for TYPE2 in 'int8&' 'unsigned int8&' 'bool&' 'int16&' 'unsigned int16&' 'char&' 'int32&' 'unsigned int32&' 'int64&' 'unsigned int64&' 'float32&' 'float64&'
470                 do
471                         TA="$(fix $TYPE1)"
472                         TB="$(fix $TYPE2)"
473                         if [ "$TA" == "$TB" ]; then
474                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
475                         else
476                                 ./make_store_test.sh ref_coercion_${I} unverifiable "$OP" "$TYPE1" "$TYPE2"
477                         fi
478                         I=`expr $I + 1`
479                 done
480         done
481 done
482
483 for OP in stloc.0 "stloc.s 0" "starg 0" "starg.s 0"
484 do
485         for TYPE1 in 'class ClassA&' 'class ClassB&' 'class InterfaceA&' 'class InterfaceB&' 'class ValueType&'
486         do
487                 for TYPE2 in 'class ClassA&' 'class ClassB&' 'class InterfaceA&' 'class InterfaceB&' 'class ValueType&'
488                 do
489                         if [ "$TYPE1" == "$TYPE2" ]; then
490                                 ./make_store_test.sh ref_coercion_${I} valid "$OP" "$TYPE1" "$TYPE2"
491                         else
492                                 ./make_store_test.sh ref_coercion_${I} unverifiable "$OP" "$TYPE1" "$TYPE2"
493                         fi
494                         I=`expr $I + 1`
495                 done
496         done
497 done
498
499 #Field store parameter compatibility leads to invalid code
500 #Calling method with diferent verification types on stack lead to invalid code
501 I=1
502 for OP in "stfld TYPE1 Class::fld" "stsfld TYPE1 Class::sfld\n\tpop"  "call void Class::Method(TYPE1)"
503 do
504   ./make_obj_store_test.sh obj_coercion_1_${I} unverifiable "$OP" int8 int64
505   ./make_obj_store_test.sh obj_coercion_2_${I} unverifiable "$OP" int8 float64
506   ./make_obj_store_test.sh obj_coercion_3_${I} unverifiable "$OP" int8 'int8&'
507   ./make_obj_store_test.sh obj_coercion_4_${I} unverifiable "$OP" int8 object
508
509   ./make_obj_store_test.sh obj_coercion_5_${I} unverifiable "$OP" 'unsigned int8' int64
510   ./make_obj_store_test.sh obj_coercion_6_${I} unverifiable "$OP" 'unsigned int8' float64
511   ./make_obj_store_test.sh obj_coercion_7_${I} unverifiable "$OP" 'unsigned int8' 'unsigned int8&'
512   ./make_obj_store_test.sh obj_coercion_8_${I} unverifiable "$OP" 'unsigned int8' object
513
514   ./make_obj_store_test.sh obj_coercion_9_${I} unverifiable "$OP" bool int64
515   ./make_obj_store_test.sh obj_coercion_10_${I} unverifiable "$OP" bool float64
516   ./make_obj_store_test.sh obj_coercion_11_${I} unverifiable "$OP" bool 'bool&'
517   ./make_obj_store_test.sh obj_coercion_12_${I} unverifiable "$OP" bool object
518
519   ./make_obj_store_test.sh obj_coercion_13_${I} unverifiable "$OP" int16 int64
520   ./make_obj_store_test.sh obj_coercion_14_${I} unverifiable "$OP" int16 float64
521   ./make_obj_store_test.sh obj_coercion_15_${I} unverifiable "$OP" int16 'int16&'
522   ./make_obj_store_test.sh obj_coercion_16_${I} unverifiable "$OP" int16 object
523   
524   ./make_obj_store_test.sh obj_coercion_17_${I} unverifiable "$OP" 'unsigned int16' int64
525   ./make_obj_store_test.sh obj_coercion_18_${I} unverifiable "$OP" 'unsigned int16' float64
526   ./make_obj_store_test.sh obj_coercion_19_${I} unverifiable "$OP" 'unsigned int16' 'unsigned int16&'
527   ./make_obj_store_test.sh obj_coercion_20_${I} unverifiable "$OP" 'unsigned int16' object
528   
529   ./make_obj_store_test.sh obj_coercion_21_${I} unverifiable "$OP" char int64
530   ./make_obj_store_test.sh obj_coercion_22_${I} unverifiable "$OP" char float64
531   ./make_obj_store_test.sh obj_coercion_23_${I} unverifiable "$OP" char 'char&'
532   ./make_obj_store_test.sh obj_coercion_24_${I} unverifiable "$OP" char object
533   
534   ./make_obj_store_test.sh obj_coercion_25_${I} unverifiable "$OP" int32 int64
535   ./make_obj_store_test.sh obj_coercion_26_${I} unverifiable "$OP" int32 float64
536   ./make_obj_store_test.sh obj_coercion_27_${I} unverifiable "$OP" int32 'int32&'
537   ./make_obj_store_test.sh obj_coercion_28_${I} unverifiable "$OP" int32 object
538   
539   ./make_obj_store_test.sh obj_coercion_29_${I} unverifiable "$OP" 'unsigned int32' int64
540   ./make_obj_store_test.sh obj_coercion_30_${I} unverifiable "$OP" 'unsigned int32' float64
541   ./make_obj_store_test.sh obj_coercion_31_${I} unverifiable "$OP" 'unsigned int32' 'unsigned int32&'
542   ./make_obj_store_test.sh obj_coercion_32_${I} unverifiable "$OP" 'unsigned int32' object
543  
544   ./make_obj_store_test.sh obj_coercion_33_${I} unverifiable "$OP" int64 int32
545   ./make_obj_store_test.sh obj_coercion_34_${I} unverifiable "$OP" int64 'native int'
546   ./make_obj_store_test.sh obj_coercion_35_${I} unverifiable "$OP" int64 float64
547   ./make_obj_store_test.sh obj_coercion_36_${I} unverifiable "$OP" int64 'int64&'
548   ./make_obj_store_test.sh obj_coercion_37_${I} unverifiable "$OP" int64 object
549   
550   ./make_obj_store_test.sh obj_coercion_38_${I} unverifiable "$OP" 'unsigned int64' int32
551   ./make_obj_store_test.sh obj_coercion_39_${I} unverifiable "$OP" 'unsigned int64' 'native int'
552   ./make_obj_store_test.sh obj_coercion_40_${I} unverifiable "$OP" 'unsigned int64' float64
553   ./make_obj_store_test.sh obj_coercion_41_${I} unverifiable "$OP" 'unsigned int64' 'unsigned int64&'
554   ./make_obj_store_test.sh obj_coercion_42_${I} unverifiable "$OP" 'unsigned int64' object
555   
556   ./make_obj_store_test.sh obj_coercion_43_${I} unverifiable "$OP" 'native int' int64
557   ./make_obj_store_test.sh obj_coercion_44_${I} unverifiable "$OP" 'native int' float64
558   ./make_obj_store_test.sh obj_coercion_45_${I} unverifiable "$OP" 'native int' 'native int&'
559   ./make_obj_store_test.sh obj_coercion_46_${I} unverifiable "$OP" 'native int' object
560   
561   ./make_obj_store_test.sh obj_coercion_47_${I} unverifiable "$OP" 'native unsigned int' int64
562   ./make_obj_store_test.sh obj_coercion_48_${I} unverifiable "$OP" 'native unsigned int' float64
563   ./make_obj_store_test.sh obj_coercion_49_${I} unverifiable "$OP" 'native unsigned int' 'native unsigned int&'
564   ./make_obj_store_test.sh obj_coercion_50_${I} unverifiable "$OP" 'native unsigned int' object
565   
566   ./make_obj_store_test.sh obj_coercion_51_${I} unverifiable "$OP" float32 int32
567   ./make_obj_store_test.sh obj_coercion_52_${I} unverifiable "$OP" float32 'native int'
568   ./make_obj_store_test.sh obj_coercion_53_${I} unverifiable "$OP" float32 int64
569   ./make_obj_store_test.sh obj_coercion_54_${I} unverifiable "$OP" float32 'float32&'
570   ./make_obj_store_test.sh obj_coercion_55_${I} unverifiable "$OP" float32 object
571   
572   ./make_obj_store_test.sh obj_coercion_56_${I} unverifiable "$OP" float64 int32
573   ./make_obj_store_test.sh obj_coercion_57_${I} unverifiable "$OP" float64 'native int'
574   ./make_obj_store_test.sh obj_coercion_58_${I} unverifiable "$OP" float64 int64
575   ./make_obj_store_test.sh obj_coercion_59_${I} unverifiable "$OP" float64 'float64&'
576   ./make_obj_store_test.sh obj_coercion_60_${I} unverifiable "$OP" float64 object
577
578   ./make_obj_store_test.sh obj_coercion_61_${I} unverifiable "$OP" object int32
579   ./make_obj_store_test.sh obj_coercion_62_${I} unverifiable "$OP" object 'native int'
580   ./make_obj_store_test.sh obj_coercion_63_${I} unverifiable "$OP" object int64
581   ./make_obj_store_test.sh obj_coercion_64_${I} unverifiable "$OP" object float64
582   ./make_obj_store_test.sh obj_coercion_65_${I} unverifiable "$OP" object 'object&'
583   
584   ./make_obj_store_test.sh obj_coercion_66_${I} unverifiable "$OP" 'class ValueType' int32
585   ./make_obj_store_test.sh obj_coercion_67_${I} unverifiable "$OP" 'class ValueType' 'native int'
586   ./make_obj_store_test.sh obj_coercion_68_${I} unverifiable "$OP" 'class ValueType' int64
587   ./make_obj_store_test.sh obj_coercion_69_${I} unverifiable "$OP" 'class ValueType' float64
588   ./make_obj_store_test.sh obj_coercion_70_${I} unverifiable "$OP" 'class ValueType' 'class ValueType&'
589   ./make_obj_store_test.sh obj_coercion_71_${I} unverifiable "$OP" 'class ValueType' object
590   
591   
592   #These tests don't test store error since one cannot have an 'int32&' field
593   #They should exist in the structural tests session
594   #./make_obj_store_test.sh obj_coercion_72_${I} invalid "$OP" 'int32&' int32
595   #./make_obj_store_test.sh obj_coercion_73_${I} invalid "$OP" 'int32&' 'native int'
596   #./make_obj_store_test.sh obj_coercion_74_${I} invalid "$OP" 'int32&' int64
597   #./make_obj_store_test.sh obj_coercion_75_${I} invalid "$OP" 'int32&' float64
598   #./make_obj_store_test.sh obj_coercion_76_${I} invalid "$OP" 'int32&' object
599   
600   ./make_obj_store_test.sh obj_coercion_77_${I} invalid "$OP" typedref int32
601   ./make_obj_store_test.sh obj_coercion_78_${I} invalid "$OP" typedref 'native int'
602   ./make_obj_store_test.sh obj_coercion_79_${I} invalid "$OP" typedref int64
603   ./make_obj_store_test.sh obj_coercion_80_${I} invalid "$OP" typedref float64
604   ./make_obj_store_test.sh obj_coercion_81_${I} invalid "$OP" typedref 'typedref&'
605   ./make_obj_store_test.sh obj_coercion_82_${I} invalid "$OP" typedref object
606   I=`expr $I + 1`
607 done
608
609 # 1.8.1.2.3 Verification type compatibility (Assignment compatibility)
610 I=1
611 for OP in stloc.0 "stloc.s 0" "starg.s 0"
612 do
613   # ClassB not subtype of ClassA.
614   ./make_store_test.sh assign_compat_1_${I} unverifiable "$OP" 'class ClassA' 'class ClassB'
615
616   # ClassA not interface type.
617   # FIXME: what was the purpoise of this test? on it's current for it is valid and not unverifiable
618   ./make_store_test.sh assign_compat_3_${I} valid "$OP" object 'class ClassA'
619   
620   # Implementation of InterfaceB does not require the implementation of InterfaceA
621   ./make_store_test.sh assign_compat_4_${I} unverifiable "$OP" 'class InterfaceA' 'class InterfaceB'
622
623   # Array/vector.
624   ./make_store_test.sh assign_compat_5_${I} unverifiable "$OP" 'string []' 'string[,]'
625
626   # Vector/array.
627   ./make_store_test.sh assign_compat_6_${I} unverifiable "$OP" 'string [,]' 'string[]'
628
629   # Arrays with different rank.
630   ./make_store_test.sh assign_compat_7_${I} unverifiable "$OP" 'string [,]' 'string[,,]'
631
632   # Method pointers with different return types.
633   ./make_store_test.sh assign_compat_8_${I} unverifiable "$OP" 'method int32 *(int32)' 'method float32 *(int32)'
634
635   # Method pointers with different parameters.
636   ./make_store_test.sh assign_compat_9_${I} unverifiable "$OP" 'method int32 *(float64)' 'method int32 *(int32)'
637
638   # Method pointers with different calling conventions.
639   ./make_store_test.sh assign_compat_10_${I} unverifiable "$OP" 'method vararg int32 *(int32)' 'method int32 *(int32)'
640
641   # Method pointers with different calling conventions. (2)
642   ./make_store_test.sh assign_compat_11_${I} unverifiable "$OP" 'method unmanaged fastcall int32 *(int32)' 'method int32 *(int32)'
643
644   # Method pointers with different calling conventions. (3)
645   ./make_store_test.sh assign_compat_12_${I} unverifiable "$OP" 'method unmanaged fastcall int32 *(int32)' 'method unmanaged stdcall int32 *(int32)'
646   I=`expr $I + 1`
647 done
648
649 for OP in "stfld TYPE1 Class::fld" "stsfld TYPE1 Class::sfld\n\tpop"  "call void Class::Method(TYPE1)"
650 do
651   # ClassB not subtype of ClassA.
652   ./make_obj_store_test.sh assign_compat_1_${I} unverifiable "$OP" 'class ClassA' 'class ClassB'
653
654   # object not subtype of ClassA.
655   ./make_obj_store_test.sh assign_compat_2_${I} unverifiable "$OP" 'class ClassA' 'object'
656
657   # ClassA not interface type.
658   #FIXME: this test is valid, you can store type ClassA in a object field
659   ./make_obj_store_test.sh assign_compat_3_${I} valid "$OP" object 'class ClassA'
660   
661   # Implementation of InterfaceB does not require the implementation of InterfaceA
662   ./make_obj_store_test.sh assign_compat_4_${I} unverifiable "$OP" 'class InterfaceA' 'class InterfaceB'
663
664   # Array/vector.
665   ./make_obj_store_test.sh assign_compat_5_${I} unverifiable "$OP" 'string []' 'string[,]'
666
667   # Vector/array.
668   ./make_obj_store_test.sh assign_compat_6_${I} unverifiable "$OP" 'string [,]' 'string[]'
669
670   # Arrays with different rank.
671   ./make_obj_store_test.sh assign_compat_7_${I} unverifiable "$OP" 'string [,]' 'string[,,]'
672
673   # Method pointers with different return types.
674   ./make_obj_store_test.sh assign_compat_8_${I} unverifiable "$OP" 'method int32 *(int32)' 'method float32 *(int32)'
675
676   # Method pointers with different parameters.
677   ./make_obj_store_test.sh assign_compat_9_${I} unverifiable "$OP" 'method int32 *(float64)' 'method int32 *(int32)'
678
679   # Method pointers with different calling conventions.
680   ./make_obj_store_test.sh assign_compat_10_${I} unverifiable "$OP" 'method vararg int32 *(int32)' 'method int32 *(int32)'
681   
682     # Method pointers with different calling conventions. (2)
683   ./make_obj_store_test.sh assign_compat_11_${I} unverifiable "$OP" 'method unmanaged fastcall int32 *(int32)' 'method int32 *(int32)'
684   
685     # Method pointers with different calling conventions. (3)
686   ./make_obj_store_test.sh assign_compat_12_${I} unverifiable "$OP" 'method unmanaged fastcall int32 *(int32)' 'method unmanaged stdcall int32 *(int32)'
687   
688   I=`expr $I + 1`
689 done
690
691 # 1.8.1.3 Merging stack states
692 I=1
693 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)'
694 do
695   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)'
696   do
697         ZZ=`echo $TYPE1 | grep "*";`
698         T1_PTR=$?
699         ZZ=`echo $TYPE2 | grep "*";`
700         T2_PTR=$?
701         
702     if (($T1_PTR == 0  ||  $T2_PTR == 0)); then
703                 ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
704     elif [ "$TYPE1" == "$TYPE2" ]; then
705                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
706         elif [ "$TYPE1" == "int32" ] && [ "$TYPE2" == "native int" ]; then
707                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
708         elif [ "$TYPE1" == "native int" ] && [ "$TYPE2" == "int32" ]; then
709                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
710         elif [ "$TYPE1" == "int32&" ] && [ "$TYPE2" == "native int&" ]; then
711                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
712         elif [ "$TYPE1" == "native int&" ] && [ "$TYPE2" == "int32&" ]; then
713                 ./make_stack_merge_test.sh stack_merge_${I} valid "$TYPE1" "$TYPE2"
714         else
715                 ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
716     fi
717         I=`expr $I + 1`
718   done
719 done
720
721 # Unverifiable array stack merges
722
723 # These are verifiable, the merged type is 'object' or 'Array'
724 #for TYPE1 in 'string []' 'string [,]' 'string [,,]' 
725 #do
726 #  for TYPE2 in 'string []' 'string [,]' 'string [,,]' 
727 #  do
728 #    if [ "$TYPE1" != "$TYPE2" ]; then
729 #       ./make_stack_merge_test.sh stack_merge_${I} unverifiable "$TYPE1" "$TYPE2"
730 #       I=`expr $I + 1`
731 #    fi
732 #  done
733 #done
734
735 # Exception block branch tests (see 3.15)
736 I=1
737 for OP in br "ldc.i4.0\n\tbrfalse"
738 do
739   ./make_exception_branch_test.sh in_try_${I} "$OP branch_target1"
740   ./make_exception_branch_test.sh in_catch_${I} "$OP branch_target2"
741   ./make_exception_branch_test.sh in_finally_${I} "$OP branch_target3"
742   ./make_exception_branch_test.sh in_filter_${I} "$OP branch_target4"
743   ./make_exception_branch_test.sh out_try_${I} "" "$OP branch_target5"
744   ./make_exception_branch_test.sh out_catch_${I} "" "" "$OP branch_target5"
745   ./make_exception_branch_test.sh out_finally_${I} "" "" "" "$OP branch_target5"
746   ./make_exception_branch_test.sh out_filter_${I} "" "" "" "" "$OP branch_target5"
747   I=`expr $I + 1`
748 done
749
750 ./make_exception_branch_test.sh ret_out_try "" "ldc.i4.0\n\tret"
751 ./make_exception_branch_test.sh ret_out_catch "" "" "ldc.i4.0\n\tret"
752 ./make_exception_branch_test.sh ret_out_finally "" "" "" "ldc.i4.0\n\tret"
753 ./make_exception_branch_test.sh ret_out_filter "" "" "" "" "ldc.i4.0\n\tret"
754
755 # Unary branch op type tests (see 3.17)
756
757 for OP in brfalse
758 do
759   ./make_unary_test.sh un_branch_op unverifiable "$OP branch_target" float64
760 done
761
762 # Ldloc.0 and Ldarg tests (see 3.38)
763
764 I=1
765 for OP in "ldarg.s 0" "ldarg.0"
766 do
767   ./make_unary_test.sh ld_no_slot_${I} unverifiable "pop\n\t$OP\n\tpop" int32
768   I=`expr $I + 1`
769 done
770
771 for OP in "ldloc.s 1" "ldloc.1" "ldloc 1"
772 do
773   ./make_unary_test.sh ld_no_slot_${I} invalid "pop\n\t$OP\n\tpop" int32
774   I=`expr $I + 1`
775 done
776
777 for OP in "ldarga.s 0" "ldloca.s 1"
778 do
779   ./make_unary_test.sh ld_no_slot_${I} invalid "pop\n\t$OP\n\tpop" int32
780   I=`expr $I + 1`
781 done
782
783 # Starg and Stloc tests (see 3.61)
784
785 I=1
786 for OP in "starg.s 0"
787 do
788   ./make_unary_test.sh st_no_slot_${I} unverifiable "$OP" int32
789   I=`expr $I + 1`
790 done
791
792 for OP in "stloc.s 1"
793 do
794   ./make_unary_test.sh st_no_slot_${I} invalid "$OP" int32
795   I=`expr $I + 1`
796 done
797
798 # Ldfld and Ldflda tests (see 4.10)
799
800 for OP in ldfld ldflda
801 do
802   ./make_unary_test.sh ${OP}_no_fld invalid "$OP int32 Class::invalid\n\tpop" "class Class"
803   ./make_unary_test.sh ${OP}_bad_obj unverifiable "$OP int32 Class::valid\n\tpop" object
804   ./make_unary_test.sh ${OP}_obj_int32 unverifiable "$OP int32 Class::valid\n\tpop" int32
805   ./make_unary_test.sh ${OP}_obj_int64 unverifiable "$OP int32 Class::valid\n\tpop" int64
806   ./make_unary_test.sh ${OP}_obj_float64 unverifiable "$OP int32 Class::valid\n\tpop" float64
807   ./make_unary_test.sh ${OP}_obj_native_int unverifiable "$OP int32 Class::valid\n\tpop" 'native int'
808   ./make_unary_test.sh ${OP}_obj_ref_overlapped unverifiable "$OP object Overlapped::objVal\n\tpop" "class Overlapped"
809   ./make_unary_test.sh ${OP}_obj_overlapped_field_not_accessible unverifiable "$OP int32 Overlapped::publicIntVal\n\tpop" "class Overlapped"
810 done
811
812 #TODO: these tests are bogus, they need to be fixed
813 # Stfld tests (see 4.28)
814
815 ./make_unary_test.sh stfld_no_fld invalid "ldc.i4.0\n\tstfld int32 Class::invalid" "class Class"
816 ./make_unary_test.sh stfld_bad_obj unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" object
817 ./make_unary_test.sh stfld_obj_int32 unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" int32
818 ./make_unary_test.sh stfld_obj_int64 unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" int64
819 ./make_unary_test.sh stfld_obj_float64 unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" float64
820 ./make_unary_test.sh stfld_no_int invalid "stfld int32 Class::valid" "class Class"
821 ./make_unary_test.sh stfld_obj_native_int unverifiable "ldc.i4.0\n\tstfld int32 Class::valid" 'native int'
822
823 # Box tests (see 4.1)
824
825 # Box non-existent type.
826 ./make_unary_test.sh box_bad_type unverifiable "box valuetype NonExistent\n\tpop" "valuetype NonExistent"
827
828 # Top of stack not assignment compatible with typeToc.
829 ./make_unary_test.sh box_not_compat unverifiable "box [mscorlib]System.Int32\n\tpop" float32
830
831 # Box byref type.
832 ./make_unary_test.sh box_byref invalid "box [mscorlib]System.Int32\&\n\tpop" 'int32&'
833
834 # Box byref-like type.
835 ./make_unary_test.sh box_byref_like unverifiable "box [mscorlib]System.TypedReference\n\tpop" typedref
836
837 #This is illegal since you cannot have a Void local variable, it should go into the structural tests part
838 # Box void type.
839 #./make_unary_test.sh box_void unverifiable "box [mscorlib]System.Void\n\tpop" "class [mscorlib]System.Void"
840
841
842
843
844
845 ./make_ret_test.sh ret_coercion_1 unverifiable int8 int64
846 ./make_ret_test.sh ret_coercion_2 unverifiable int8 float64
847 ./make_ret_test.sh ret_coercion_3 unverifiable int8 'int8&'
848 ./make_ret_test.sh ret_coercion_4 unverifiable int8 object
849
850 ./make_ret_test.sh ret_coercion_5 unverifiable 'unsigned int8' int64
851 ./make_ret_test.sh ret_coercion_6 unverifiable 'unsigned int8' float64
852 ./make_ret_test.sh ret_coercion_6 unverifiable 'unsigned int8' float64
853 ./make_ret_test.sh ret_coercion_6 unverifiable 'unsigned int8' float64
854 ./make_ret_test.sh ret_coercion_7 unverifiable 'unsigned int8' 'unsigned int8&'
855 ./make_ret_test.sh ret_coercion_8 unverifiable 'unsigned int8' object
856
857 ./make_ret_test.sh ret_coercion_9 unverifiable bool int64
858 ./make_ret_test.sh ret_coercion_10 unverifiable bool float64
859 ./make_ret_test.sh ret_coercion_11 unverifiable bool 'bool&'
860 ./make_ret_test.sh ret_coercion_12 unverifiable bool object
861
862 ./make_ret_test.sh ret_coercion_13 unverifiable int16 int64
863 ./make_ret_test.sh ret_coercion_14 unverifiable int16 float64
864 ./make_ret_test.sh ret_coercion_15 unverifiable int16 'int16&'
865 ./make_ret_test.sh ret_coercion_16 unverifiable int16 object
866   
867 ./make_ret_test.sh ret_coercion_17 unverifiable 'unsigned int16' int64
868 ./make_ret_test.sh ret_coercion_18 unverifiable 'unsigned int16' float64
869 ./make_ret_test.sh ret_coercion_19 unverifiable 'unsigned int16' 'unsigned int16&'
870 ./make_ret_test.sh ret_coercion_20 unverifiable 'unsigned int16' object
871   
872 ./make_ret_test.sh ret_coercion_21 unverifiable char int64
873 ./make_ret_test.sh ret_coercion_22 unverifiable char float64
874 ./make_ret_test.sh ret_coercion_23 unverifiable char 'char&'
875 ./make_ret_test.sh ret_coercion_24 unverifiable char object
876   
877 ./make_ret_test.sh ret_coercion_25 unverifiable int32 int64
878 ./make_ret_test.sh ret_coercion_26 unverifiable int32 float64
879 ./make_ret_test.sh ret_coercion_27 unverifiable int32 'int32&'
880 ./make_ret_test.sh ret_coercion_28 unverifiable int32 object
881   
882 ./make_ret_test.sh ret_coercion_29 unverifiable 'unsigned int32' int64
883 ./make_ret_test.sh ret_coercion_30 unverifiable 'unsigned int32' float64
884 ./make_ret_test.sh ret_coercion_31 unverifiable 'unsigned int32' 'unsigned int32&'
885 ./make_ret_test.sh ret_coercion_32 unverifiable 'unsigned int32' object
886  
887 ./make_ret_test.sh ret_coercion_33 unverifiable int64 int32
888 ./make_ret_test.sh ret_coercion_34 unverifiable int64 'native int'
889 ./make_ret_test.sh ret_coercion_35 unverifiable int64 float64
890 ./make_ret_test.sh ret_coercion_36 unverifiable int64 'int64&'
891 ./make_ret_test.sh ret_coercion_37 unverifiable int64 object
892   
893 ./make_ret_test.sh ret_coercion_38 unverifiable 'unsigned int64' int32
894 ./make_ret_test.sh ret_coercion_39 unverifiable 'unsigned int64' 'native int'
895 ./make_ret_test.sh ret_coercion_40 unverifiable 'unsigned int64' float64
896 ./make_ret_test.sh ret_coercion_41 unverifiable 'unsigned int64' 'unsigned int64&'
897 ./make_ret_test.sh ret_coercion_42 unverifiable 'unsigned int64' object
898   
899 ./make_ret_test.sh ret_coercion_43 unverifiable 'native int' int64
900 ./make_ret_test.sh ret_coercion_44 unverifiable 'native int' float64
901 ./make_ret_test.sh ret_coercion_45 unverifiable 'native int' 'native int&'
902 ./make_ret_test.sh ret_coercion_46 unverifiable 'native int' object
903   
904 ./make_ret_test.sh ret_coercion_47 unverifiable 'native unsigned int' int64
905 ./make_ret_test.sh ret_coercion_48 unverifiable 'native unsigned int' float64
906 ./make_ret_test.sh ret_coercion_49 unverifiable 'native unsigned int' 'native unsigned int&'
907 ./make_ret_test.sh ret_coercion_50 unverifiable 'native unsigned int' object
908   
909 ./make_ret_test.sh ret_coercion_51 unverifiable float32 int32
910 ./make_ret_test.sh ret_coercion_52 unverifiable float32 'native int'
911 ./make_ret_test.sh ret_coercion_53 unverifiable float32 int64
912 ./make_ret_test.sh ret_coercion_54 unverifiable float32 'float32&'
913 ./make_ret_test.sh ret_coercion_55 unverifiable float32 object
914   
915 ./make_ret_test.sh ret_coercion_56 unverifiable float64 int32
916 ./make_ret_test.sh ret_coercion_57 unverifiable float64 'native int'
917 ./make_ret_test.sh ret_coercion_58 unverifiable float64 int64
918 ./make_ret_test.sh ret_coercion_59 unverifiable float64 'float64&'
919 ./make_ret_test.sh ret_coercion_60 unverifiable float64 object
920
921 ./make_ret_test.sh ret_coercion_61 unverifiable object int32
922 ./make_ret_test.sh ret_coercion_62 unverifiable object 'native int'
923 ./make_ret_test.sh ret_coercion_63 unverifiable object int64
924 ./make_ret_test.sh ret_coercion_64 unverifiable object float64
925 ./make_ret_test.sh ret_coercion_65 unverifiable object 'object&'
926   
927 ./make_ret_test.sh ret_coercion_66 unverifiable 'class MyValueType' int32
928 ./make_ret_test.sh ret_coercion_67 unverifiable 'class MyValueType' 'native int'
929 ./make_ret_test.sh ret_coercion_68 unverifiable 'class MyValueType' int64
930 ./make_ret_test.sh ret_coercion_69 unverifiable 'class MyValueType' float64
931 ./make_ret_test.sh ret_coercion_70 unverifiable 'class MyValueType' 'class MyValueType&'
932 ./make_ret_test.sh ret_coercion_71 unverifiable 'class MyValueType' object
933   
934 ./make_ret_test.sh ret_coercion_72 unverifiable 'int32&' int32
935 ./make_ret_test.sh ret_coercion_73 unverifiable 'int32&' 'native int'
936 ./make_ret_test.sh ret_coercion_74 unverifiable 'int32&' int64
937 ./make_ret_test.sh ret_coercion_75 unverifiable 'int32&' float64
938 ./make_ret_test.sh ret_coercion_76 unverifiable 'int32&' object
939   
940 ./make_ret_test.sh ret_coercion_77 unverifiable typedref int32
941 ./make_ret_test.sh ret_coercion_78 unverifiable typedref 'native int'
942 ./make_ret_test.sh ret_coercion_79 unverifiable typedref int64
943 ./make_ret_test.sh ret_coercion_80 unverifiable typedref float64
944 ./make_ret_test.sh ret_coercion_81 unverifiable typedref 'typedref&'
945 ./make_ret_test.sh ret_coercion_82 unverifiable typedref object
946
947
948 ./make_ret_test.sh ret_sub_type valid ClassA ClassSubA
949 ./make_ret_test.sh ret_same_type valid ClassA ClassA
950 ./make_ret_test.sh ret_obj_iface valid object InterfaceA
951 ./make_ret_test.sh ret_obj_obj valid object object
952 ./make_ret_test.sh ret_obj_string valid object string
953 ./make_ret_test.sh ret_string_string valid string string
954 ./make_ret_test.sh ret_obj_vector valid object 'int32[]'
955 ./make_ret_test.sh ret_obj_array valid object 'int32[,]'
956 ./make_ret_test.sh ret_obj_generic valid object 'class Template`1<object>'
957 ./make_ret_test.sh ret_obj_value_type unverifiable object 'MyValueType'
958 ./make_ret_test.sh ret_string_value_type unverifiable string 'MyValueType'
959 ./make_ret_test.sh ret_class_value_type unverifiable ClassA 'MyValueType'
960
961 ./make_ret_test.sh ret_string_string unverifiable string object
962 ./make_ret_test.sh ret_string_string unverifiable 'int32[]' object
963
964 ./make_ret_test.sh ret_iface_imple valid InterfaceA ImplA
965 ./make_ret_test.sh ret_arrays_same_vector valid 'int32[]' 'int32[]'
966 ./make_ret_test.sh ret_arrays_same_rank valid 'int32[,]' 'int32[,]'
967
968 ./make_ret_test.sh ret_sub_type_array_covariant valid 'ClassA[]' 'ClassSubA[]'
969 ./make_ret_test.sh ret_same_type_array_covariant valid 'ClassA[]' 'ClassA[]'
970 ./make_ret_test.sh ret_obj_iface_array_covariant valid 'object[]' 'InterfaceA[]'
971 ./make_ret_test.sh ret_iface_imple_array_covariant valid 'InterfaceA[]' 'ImplA[]'
972
973 ./make_ret_test.sh ret_diff_types unverifiable ClassA ClassB
974 ./make_ret_test.sh ret_class_vale_type unverifiable ClassA MyValueType
975 ./make_ret_test.sh ret_diff_vale_type unverifiable MyValueType2 MyValueType
976 ./make_ret_test.sh ret_value_type_class unverifiable MyValueType ClassA
977 ./make_ret_test.sh ret_super_type unverifiable ClassSubA ClassB
978 ./make_ret_test.sh ret_interfaces unverifiable InterfaceA InterfaceB
979 ./make_ret_test.sh ret_interface_class unverifiable ClassA InterfaceB
980
981 ./make_ret_test.sh ret_object_type valid object ClassA
982 ./make_ret_test.sh ret_type_object unverifiable ClassA object
983
984
985 ./make_ret_test.sh ret_array_diff_rank unverifiable 'int32[]' 'int32[,]'
986 ./make_ret_test.sh ret_array_diff_rank2 unverifiable 'int32[,]' 'int32[]'
987 ./make_ret_test.sh ret_array_diff_rank3 unverifiable 'int32[,,]' 'int32[,]'
988 ./make_ret_test.sh ret_array_not_covar unverifiable 'ClassA[]' 'ClassB[]'
989 ./make_ret_test.sh ret_array_not_covar2 unverifiable 'ClassSubA[]' 'ClassA[]'
990 ./make_ret_test.sh ret_array_not_covar3 unverifiable 'ClassA[]' 'InterfaceA[]'
991 ./make_ret_test.sh ret_array_not_covar4 unverifiable 'ImplA[]' 'InterfaceA[]'
992 ./make_ret_test.sh ret_array_not_covar5 unverifiable 'InterfaceA[]' 'object[]'
993
994
995 #generics tests
996 ./make_ret_test.sh ret_generics_1 valid 'class Template' 'class Template'
997 ./make_ret_test.sh ret_generics_2 valid 'class Template`1<int32>' 'class Template`1<int32>'
998 ./make_ret_test.sh ret_generics_3 valid 'class Template`2<int32,object>' 'class Template`2<int32,object>'
999
1000 ./make_ret_test.sh ret_generics_4 unverifiable 'class Template' 'class Template`1<object>'
1001 ./make_ret_test.sh ret_generics_5 unverifiable 'class Template`1<object>' 'class Template'
1002 ./make_ret_test.sh ret_generics_6 unverifiable 'class Template`1<object>' 'class Template`1<string>'
1003 ./make_ret_test.sh ret_generics_7 unverifiable 'class Template`1<string>' 'class Template`1<object>'
1004 ./make_ret_test.sh ret_generics_8 unverifiable 'class Template`1<object>' 'class Template`2<object, object>'
1005 ./make_ret_test.sh ret_generics_9 unverifiable 'class Template`2<object, object>' 'class Template`1<object>'
1006
1007 ./make_ret_test.sh ret_generics_10 unverifiable 'class Template`1<int32>' 'class Template`1<int16>'
1008 ./make_ret_test.sh ret_generics_11 unverifiable 'class Template`1<int16>' 'class Template`1<int32>'
1009 ./make_ret_test.sh ret_generics_12 unverifiable 'class Template`1<unsigned int32>' 'class Template`1<int32>'
1010 ./make_ret_test.sh ret_generics_13 unverifiable 'class Template`1<float32>' 'class Template`1<float64>'
1011 ./make_ret_test.sh ret_generics_14 unverifiable 'class Template`1<float64>' 'class Template`1<float32>'
1012
1013 #variance tests
1014 ./make_ret_test.sh ret_generics_15 valid 'class ICovariant`1<object>' 'class ICovariant`1<string>'
1015 ./make_ret_test.sh ret_generics_16 valid 'class ICovariant`1<string>' 'class ICovariant`1<string>'
1016 ./make_ret_test.sh ret_generics_17 unverifiable 'class ICovariant`1<string>' 'class ICovariant`1<object>'
1017
1018 ./make_ret_test.sh ret_generics_18 valid 'class IContravariant`1<string>' 'class IContravariant`1<object>'
1019 ./make_ret_test.sh ret_generics_19 valid 'class IContravariant`1<string>' 'class IContravariant`1<string>'
1020 ./make_ret_test.sh ret_generics_20 unverifiable 'class IContravariant`1<object>' 'class IContravariant`1<string>'
1021
1022 ./make_ret_test.sh ret_generics_21 valid 'class ICovariant`1<ClassA>' 'class ICovariant`1<ClassSubA>'
1023 ./make_ret_test.sh ret_generics_22 valid 'class ICovariant`1<ClassSubA>' 'class ICovariant`1<ClassSubA>'
1024 ./make_ret_test.sh ret_generics_23 unverifiable 'class ICovariant`1<ClassSubA>' 'class ICovariant`1<ClassA>'
1025
1026 ./make_ret_test.sh ret_generics_24 valid 'class IContravariant`1<ClassSubA>' 'class IContravariant`1<ClassA>'
1027 ./make_ret_test.sh ret_generics_25 valid 'class IContravariant`1<ClassSubA>' 'class IContravariant`1<ClassSubA>'
1028 ./make_ret_test.sh ret_generics_26 unverifiable 'class IContravariant`1<ClassA>' 'class IContravariant`1<ClassSubA>'
1029
1030
1031 ./make_ret_test.sh ret_generics_27 valid 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<ClassA, ClassB>'
1032 ./make_ret_test.sh ret_generics_28 valid 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<ClassA, object>'
1033 ./make_ret_test.sh ret_generics_29 valid 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<ClassSubA, ClassB>'
1034 ./make_ret_test.sh ret_generics_30 valid 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<ClassSubA, object>'
1035 ./make_ret_test.sh ret_generics_31 unverifiable 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<object, ClassB>'
1036 ./make_ret_test.sh ret_generics_32 unverifiable 'class Bivariant`2<ClassA, ClassB>' 'class Bivariant`2<object, object>'
1037 ./make_ret_test.sh ret_generics_33 unverifiable 'class Bivariant`2<ClassA, object>' 'class Bivariant`2<object, ClassB>'
1038 ./make_ret_test.sh ret_generics_34 unverifiable 'class Bivariant`2<ClassA, object>' 'class Bivariant`2<ClassA, ClassB>'
1039
1040 #mix parameter types
1041 ./make_ret_test.sh ret_generics_types_1 unverifiable 'class Template`1<int8>' 'class Template`1<unsigned int8>'
1042 ./make_ret_test.sh ret_generics_types_2 unverifiable 'class Template`1<int8>' 'class Template`1<int16>'
1043 ./make_ret_test.sh ret_generics_types_3 unverifiable 'class Template`1<int8>' 'class Template`1<unsigned int16>'
1044 ./make_ret_test.sh ret_generics_types_4 unverifiable 'class Template`1<int8>' 'class Template`1<int32>'
1045 ./make_ret_test.sh ret_generics_types_5 unverifiable 'class Template`1<int8>' 'class Template`1<unsigned int32>'
1046 ./make_ret_test.sh ret_generics_types_6 unverifiable 'class Template`1<int8>' 'class Template`1<int64>'
1047 ./make_ret_test.sh ret_generics_types_7 unverifiable 'class Template`1<int8>' 'class Template`1<unsigned int64>'
1048 ./make_ret_test.sh ret_generics_types_8 unverifiable 'class Template`1<int8>' 'class Template`1<float32>'
1049 ./make_ret_test.sh ret_generics_types_9 unverifiable 'class Template`1<int8>' 'class Template`1<float64>'
1050 ./make_ret_test.sh ret_generics_types_10 unverifiable 'class Template`1<int8>' 'class Template`1<bool>'
1051
1052 ./make_ret_test.sh ret_generics_types_11 unverifiable 'class Template`1<int8>' 'class Template`1<native int>'
1053 ./make_ret_test.sh ret_generics_types_12 unverifiable 'class Template`1<int8>' 'class Template`1<native unsigned int>'
1054 ./make_ret_test.sh ret_generics_types_13 unverifiable 'class Template`1<int8>' 'class Template`1<int32 *>'
1055
1056
1057 #inheritance tests
1058 ./make_ret_test.sh ret_generics_inheritante_1 valid 'class Base`1<int32>' 'class SubClass1`1<int32>'
1059 ./make_ret_test.sh ret_generics_inheritante_2 valid 'class SubClass1`1<int32>' 'class SubClass1`1<int32>'
1060 ./make_ret_test.sh ret_generics_inheritante_3 unverifiable 'class SubClass1`1<int32>' 'class Base`1<int32>'
1061 ./make_ret_test.sh ret_generics_inheritante_4 unverifiable 'class Base`1<int32>' 'class SubClass1`1<float32>'
1062 ./make_ret_test.sh ret_generics_inheritante_5 valid 'class Base`1<object>' 'class SubClass1`1<object>'
1063
1064 ./make_ret_test.sh ret_generics_inheritante_6 valid 'class BaseBase`2<int32, object>' 'class SubClass1`1<object>'
1065 ./make_ret_test.sh ret_generics_inheritante_7 valid 'class BaseBase`2<int32, object>' 'class Base`1<object>'
1066
1067 ./make_ret_test.sh ret_generics_inheritante_8 unverifiable 'class BaseBase`2<int64, object>' 'class Base`1<object>'
1068 ./make_ret_test.sh ret_generics_inheritante_9 unverifiable 'class BaseBase`2<int64, object>' 'class SubClass1`1<object>'
1069 ./make_ret_test.sh ret_generics_inheritante_10 unverifiable 'class BaseBase`2<int32, object>' 'class SubClass1`1<string>'
1070
1071 #interface tests
1072
1073 ./make_ret_test.sh ret_generics_inheritante_12 valid 'class Interface`1<int32>' 'class InterfaceImpl`1<int32>'
1074 ./make_ret_test.sh ret_generics_inheritante_13 valid 'class InterfaceImpl`1<int32>' 'class InterfaceImpl`1<int32>'
1075 ./make_ret_test.sh ret_generics_inheritante_14 unverifiable 'class InterfaceImpl`1<int32>' 'class Interface`1<int32>'
1076 ./make_ret_test.sh ret_generics_inheritante_15 unverifiable 'class Interface`1<int32>' 'class InterfaceImpl`1<float32>'
1077 ./make_ret_test.sh ret_generics_inheritante_16 valid 'class Interface`1<object>' 'class InterfaceImpl`1<object>'
1078
1079
1080 #mix variance with inheritance
1081 #only interfaces or delegates can have covariance
1082
1083 #mix variance with interfaces
1084
1085 ./make_ret_test.sh ret_generics_inheritante_28 valid 'class ICovariant`1<object>' 'class CovariantImpl`1<string>'
1086 ./make_ret_test.sh ret_generics_inheritante_29 valid 'class ICovariant`1<string>' 'class CovariantImpl`1<string>'
1087 ./make_ret_test.sh ret_generics_inheritante_30 unverifiable 'class ICovariant`1<string>' 'class CovariantImpl`1<object>'
1088
1089 ./make_ret_test.sh ret_generics_inheritante_31 valid 'class IContravariant`1<string>' 'class ContravariantImpl`1<object>'
1090 ./make_ret_test.sh ret_generics_inheritante_32 valid 'class IContravariant`1<string>' 'class ContravariantImpl`1<string>'
1091 ./make_ret_test.sh ret_generics_inheritante_33 unverifiable 'class IContravariant`1<object>' 'class ContravariantImpl`1<string>'
1092
1093 ./make_ret_test.sh ret_generics_inheritante_34 valid 'class ICovariant`1<ClassA>' 'class CovariantImpl`1<ClassSubA>'
1094 ./make_ret_test.sh ret_generics_inheritante_35 valid 'class ICovariant`1<ClassSubA>' 'class CovariantImpl`1<ClassSubA>'
1095 ./make_ret_test.sh ret_generics_inheritante_36 unverifiable 'class ICovariant`1<ClassSubA>' 'class CovariantImpl`1<ClassA>'
1096
1097 ./make_ret_test.sh ret_generics_inheritante_37 valid 'class IContravariant`1<ClassSubA>' 'class ContravariantImpl`1<ClassA>'
1098 ./make_ret_test.sh ret_generics_inheritante_38 valid 'class IContravariant`1<ClassSubA>' 'class ContravariantImpl`1<ClassSubA>'
1099 ./make_ret_test.sh ret_generics_inheritante_39 unverifiable 'class IContravariant`1<ClassA>' 'class ContravariantImpl`1<ClassSubA>'
1100
1101
1102 #mix variance with arrays
1103
1104 ./make_ret_test.sh ret_generics_arrays_1 valid 'class ICovariant`1<object>' 'class ICovariant`1<object[]>'
1105 ./make_ret_test.sh ret_generics_arrays_2 valid 'class ICovariant`1<object>' 'class ICovariant`1<int32[]>'
1106 ./make_ret_test.sh ret_generics_arrays_3 valid 'class ICovariant`1<object>' 'class ICovariant`1<int32[,]>'
1107 ./make_ret_test.sh ret_generics_arrays_4 valid 'class ICovariant`1<object>' 'class ICovariant`1<string[]>'
1108 ./make_ret_test.sh ret_generics_arrays_5 valid 'class ICovariant`1<object[]>' 'class ICovariant`1<string[]>'
1109 ./make_ret_test.sh ret_generics_arrays_6 valid 'class ICovariant`1<object[]>' 'class ICovariant`1<ClassA[]>'
1110 ./make_ret_test.sh ret_generics_arrays_7 valid 'class ICovariant`1<ClassA[]>' 'class ICovariant`1<ClassSubA[]>'
1111 ./make_ret_test.sh ret_generics_arrays_8 valid 'class ICovariant`1<InterfaceA[]>' 'class ICovariant`1<ImplA[]>'
1112 ./make_ret_test.sh ret_generics_arrays_9 valid 'class ICovariant`1<object[,]>' 'class ICovariant`1<string[,]>'
1113 ./make_ret_test.sh ret_generics_arrays_10 valid 'class ICovariant`1<ClassA[,]>' 'class ICovariant`1<ClassSubA[,]>'
1114
1115 ./make_ret_test.sh ret_generics_arrays_1_b valid 'class ICovariant`1<object>' 'class CovariantImpl`1<object[]>'
1116 ./make_ret_test.sh ret_generics_arrays_2_b valid 'class ICovariant`1<object>' 'class CovariantImpl`1<int32[]>'
1117 ./make_ret_test.sh ret_generics_arrays_3_b valid 'class ICovariant`1<object>' 'class CovariantImpl`1<int32[,]>'
1118 ./make_ret_test.sh ret_generics_arrays_4_b valid 'class ICovariant`1<object>' 'class ICovariant`1<string[]>'
1119 ./make_ret_test.sh ret_generics_arrays_5_b valid 'class ICovariant`1<object[]>' 'class CovariantImpl`1<string[]>'
1120 ./make_ret_test.sh ret_generics_arrays_6_b valid 'class ICovariant`1<object[]>' 'class CovariantImpl`1<ClassA[]>'
1121 ./make_ret_test.sh ret_generics_arrays_7_b valid 'class ICovariant`1<ClassA[]>' 'class CovariantImpl`1<ClassSubA[]>'
1122 ./make_ret_test.sh ret_generics_arrays_8_b valid 'class ICovariant`1<InterfaceA[]>' 'class CovariantImpl`1<ImplA[]>'
1123 ./make_ret_test.sh ret_generics_arrays_9_b valid 'class ICovariant`1<object[,]>' 'class CovariantImpl`1<string[,]>'
1124 ./make_ret_test.sh ret_generics_arrays_10_b valid 'class ICovariant`1<ClassA[,]>' 'class CovariantImpl`1<ClassSubA[,]>'
1125
1126 ./make_ret_test.sh ret_generics_arrays_11 valid 'class IContravariant`1<object[]>' 'class IContravariant`1<object>'
1127 ./make_ret_test.sh ret_generics_arrays_12 valid 'class IContravariant`1<int32[]>' 'class IContravariant`1<object>'
1128 ./make_ret_test.sh ret_generics_arrays_13 valid 'class IContravariant`1<int32[,]>' 'class IContravariant`1<object>'
1129 ./make_ret_test.sh ret_generics_arrays_14 valid 'class IContravariant`1<string[]>' 'class IContravariant`1<object>'
1130 ./make_ret_test.sh ret_generics_arrays_15 valid 'class IContravariant`1<string[]>' 'class IContravariant`1<object[]>'
1131 ./make_ret_test.sh ret_generics_arrays_16 valid 'class IContravariant`1<ClassA[]>' 'class IContravariant`1<object[]>'
1132 ./make_ret_test.sh ret_generics_arrays_17 valid 'class IContravariant`1<ClassSubA[]>' 'class IContravariant`1<ClassA[]>'
1133 ./make_ret_test.sh ret_generics_arrays_18 valid 'class IContravariant`1<ImplA[]>' 'class IContravariant`1<InterfaceA[]>'
1134 ./make_ret_test.sh ret_generics_arrays_19 valid 'class IContravariant`1<string[,]>' 'class IContravariant`1<object[,]>'
1135 ./make_ret_test.sh ret_generics_arrays_20 valid 'class IContravariant`1<ClassSubA[,]>' 'class IContravariant`1<ClassA[,]>'
1136
1137 ./make_ret_test.sh ret_generics_arrays_11_b valid 'class IContravariant`1<object[]>' 'class ContravariantImpl`1<object>'
1138 ./make_ret_test.sh ret_generics_arrays_12_b valid 'class IContravariant`1<int32[]>' 'class ContravariantImpl`1<object>'
1139 ./make_ret_test.sh ret_generics_arrays_13_b valid 'class IContravariant`1<int32[,]>' 'class ContravariantImpl`1<object>'
1140 ./make_ret_test.sh ret_generics_arrays_14_b valid 'class IContravariant`1<string[]>' 'class ContravariantImpl`1<object>'
1141 ./make_ret_test.sh ret_generics_arrays_15_b valid 'class IContravariant`1<string[]>' 'class ContravariantImpl`1<object[]>'
1142 ./make_ret_test.sh ret_generics_arrays_16_b valid 'class IContravariant`1<ClassA[]>' 'class ContravariantImpl`1<object[]>'
1143 ./make_ret_test.sh ret_generics_arrays_17_b valid 'class IContravariant`1<ClassSubA[]>' 'class ContravariantImpl`1<ClassA[]>'
1144 ./make_ret_test.sh ret_generics_arrays_18_b valid 'class IContravariant`1<ImplA[]>' 'class ContravariantImpl`1<InterfaceA[]>'
1145 ./make_ret_test.sh ret_generics_arrays_19_b valid 'class IContravariant`1<string[,]>' 'class ContravariantImpl`1<object[,]>'
1146 ./make_ret_test.sh ret_generics_arrays_20_b valid 'class IContravariant`1<ClassSubA[,]>' 'class ContravariantImpl`1<ClassA[,]>'
1147
1148 ./make_ret_test.sh ret_generics_arrays_21 unverifiable 'class ICovariant`1<int32[]>' 'class ICovariant`1<object>'
1149 ./make_ret_test.sh ret_generics_arrays_22 unverifiable 'class ICovariant`1<int32[]>' 'class ICovariant`1<object[]>'
1150 ./make_ret_test.sh ret_generics_arrays_23 unverifiable 'class ICovariant`1<string[]>' 'class ICovariant`1<object[]>'
1151 ./make_ret_test.sh ret_generics_arrays_24 unverifiable 'class ICovariant`1<ClassSubA[]>' 'class ICovariant`1<ClassA[]>'
1152 ./make_ret_test.sh ret_generics_arrays_25 unverifiable 'class ICovariant`1<int32[]>' 'class ICovariant`1<int32[,]>'
1153 ./make_ret_test.sh ret_generics_arrays_26 unverifiable 'class ICovariant`1<ImplA[]>' 'class ICovariant`1<InterfaceA[]>'
1154
1155 ./make_ret_test.sh ret_generics_arrays_27 unverifiable 'class IContravariant`1<object>' 'class IContravariant`1<int32[]>'
1156 ./make_ret_test.sh ret_generics_arrays_28 unverifiable 'class IContravariant`1<object[]>' 'class IContravariant`1<int32[]>'
1157 ./make_ret_test.sh ret_generics_arrays_29 unverifiable 'class IContravariant`1<object[]>' 'class IContravariant`1<string[]>'
1158 ./make_ret_test.sh ret_generics_arrays_30 unverifiable 'class IContravariant`1<ClassA[]>' 'class IContravariant`1<ClassSubA[]>'
1159 ./make_ret_test.sh ret_generics_arrays_31 unverifiable 'class IContravariant`1<int32[,]>' 'class IContravariant`1<int32[]>'
1160 ./make_ret_test.sh ret_generics_arrays_32 unverifiable 'class IContravariant`1<InterfaceA[]>' 'class IContravariant`1<ImplA[]>'
1161
1162
1163 #generic with value types
1164
1165 ./make_ret_test.sh ret_generics_vt_1 valid 'class Template`1<MyValueType>' 'class Template`1<MyValueType>'
1166 ./make_ret_test.sh ret_generics_vt_2 unverifiable 'class Template`1<MyValueType>' 'class Template`1<MyValueType2>'
1167 ./make_ret_test.sh ret_generics_vt_3 unverifiable 'class ICovariant`1<MyValueType>' 'class ICovariant`1<MyValueType2>'
1168 ./make_ret_test.sh ret_generics_vt_4 unverifiable 'class ICovariant`1<object>' 'class ICovariant`1<MyValueType2>'
1169
1170
1171 #mix variance and generic compatibility with all kinds of types valid for a generic parameter (hellish task - huge task)
1172 #test with composite generics ( Foo<Bar<int>> )
1173
1174 #test variance with delegates
1175 #generic methods
1176 #generic atributes
1177 #generic delegates
1178 #generic code
1179 #the verifier must check if the generic instantiation is valid
1180
1181 for OP in ldarg ldloc
1182 do
1183         ARGS_1='int32 V'
1184         LOCALS_1=''
1185         CALL_1='ldc.i4.0'
1186         SIG_1='int32'
1187         
1188         ARGS_2='int32 V, int32 V1'
1189         LOCALS_2=''
1190         CALL_2='ldc.i4.0\n\tldc.i4.0'
1191         SIG_2='int32, int32'
1192         
1193         ARGS_3='int32 V, int32 V1, int32 V1'
1194         LOCALS_3=''
1195         CALL_3='ldc.i4.0\n\tldc.i4.0\n\tldc.i4.0'
1196         SIG_3='int32, int32, int32'
1197         
1198         ARGS_4='int32 V, int32 V1, int32 V1, int32 V1'
1199         LOCALS_4=''
1200         CALL_4='ldc.i4.0\n\tldc.i4.0\n\tldc.i4.0\n\tldc.i4.0'
1201         SIG_4='int32, int32, int32, int32'
1202         MAX_PARAM_RESULT="unverifiable"
1203         POPS="pop\npop\npop\npop\npop\npop\npop\npop\n"
1204         
1205         if [ "$OP" == "ldloc" ]; then
1206                 MAX_PARAM_RESULT="invalid"
1207
1208                 LOCALS_1=$ARGS_1
1209                 ARGS_1=''
1210                 CALL_1=''
1211                 SIG_1=''
1212
1213                 LOCALS_2=$ARGS_2
1214                 ARGS_2=''
1215                 CALL_2=''
1216                 SIG_2=''
1217
1218                 LOCALS_3=$ARGS_3
1219                 ARGS_3=''
1220                 CALL_3=''
1221                 SIG_3=''
1222
1223                 LOCALS_4=$ARGS_4
1224                 ARGS_4=''
1225                 CALL_4=''
1226                 SIG_4=''
1227         fi;
1228         
1229         ./make_load_test.sh ${OP}0_max_params "${MAX_PARAM_RESULT}" "${OP}.0" '' '' '' ''
1230         ./make_load_test.sh ${OP}1_max_params "${MAX_PARAM_RESULT}" "${OP}.1" '' '' '' ''
1231         ./make_load_test.sh ${OP}2_max_params "${MAX_PARAM_RESULT}" "${OP}.2" '' '' '' ''
1232         ./make_load_test.sh ${OP}3_max_params "${MAX_PARAM_RESULT}" "${OP}.3" '' '' '' ''
1233         
1234         ./make_load_test.sh ${OP}1_1_max_params "${MAX_PARAM_RESULT}" "${OP}.1" "${ARGS_1}" "${LOCALS_1}" "${CALL_1}" "${SIG_1}"
1235         ./make_load_test.sh ${OP}2_1_max_params "${MAX_PARAM_RESULT}" "${OP}.2" "${ARGS_1}" "${LOCALS_1}" "${CALL_1}" "${SIG_1}"
1236         ./make_load_test.sh ${OP}3_1_max_params "${MAX_PARAM_RESULT}" "${OP}.3" "${ARGS_1}" "${LOCALS_1}" "${CALL_1}" "${SIG_1}"
1237         
1238         ./make_load_test.sh ${OP}2_2_max_params "${MAX_PARAM_RESULT}" "${OP}.2" "${ARGS_2}" "${LOCALS_2}" "${CALL_2}" "${SIG_2}"
1239         ./make_load_test.sh ${OP}3_2_max_params "${MAX_PARAM_RESULT}" "${OP}.3" "${ARGS_2}" "${LOCALS_2}" "${CALL_2}" "${SIG_2}"
1240         
1241         ./make_load_test.sh ${OP}3_3_max_params "${MAX_PARAM_RESULT}" "${OP}.3" "${ARGS_3}" "${LOCALS_3}" "${CALL_3}" "${SIG_3}"
1242         
1243         ./make_load_test.sh ${OP}0_max_params valid "${OP}.0" "${ARGS_1}" "${LOCALS_1}" "${CALL_1}" "${SIG_1}"
1244         ./make_load_test.sh ${OP}1_max_params valid "${OP}.1" "${ARGS_2}" "${LOCALS_2}" "${CALL_2}" "${SIG_2}"
1245         ./make_load_test.sh ${OP}2_max_params valid "${OP}.2" "${ARGS_3}" "${LOCALS_3}" "${CALL_3}" "${SIG_3}"
1246         ./make_load_test.sh ${OP}3_max_params valid "${OP}.3" "${ARGS_4}" "${LOCALS_4}" "${CALL_4}" "${SIG_4}"
1247         
1248         ./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}"
1249         ./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}"
1250         ./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}"
1251         ./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}"
1252 done
1253
1254 #Test if the values used for brtrue and brfalse are valid
1255 I=1
1256 for OP in brfalse brtrue 'brfalse.s' 'brtrue.s'
1257 do
1258         ./make_bool_branch_test.sh boolean_branch_${I}_1 valid ${OP} int8
1259         ./make_bool_branch_test.sh boolean_branch_${I}_2 valid ${OP} int16
1260         ./make_bool_branch_test.sh boolean_branch_${I}_3 valid ${OP} int32
1261         ./make_bool_branch_test.sh boolean_branch_${I}_4 valid ${OP} int64
1262         ./make_bool_branch_test.sh boolean_branch_${I}_5 valid ${OP} 'native int'
1263         
1264         #unmanaged pointers are not veriable types, all ops on unmanaged pointers are unverifiable
1265         ./make_bool_branch_test.sh boolean_branch_${I}_6 unverifiable ${OP} 'int32*'
1266         ./make_bool_branch_test.sh boolean_branch_${I}_8 unverifiable ${OP} 'method int32 *(int32)'
1267
1268         ./make_bool_branch_test.sh boolean_branch_${I}_7 valid ${OP} 'int32&'
1269         ./make_bool_branch_test.sh boolean_branch_${I}_9 valid ${OP} object
1270         ./make_bool_branch_test.sh boolean_branch_${I}_10 valid ${OP} string
1271         ./make_bool_branch_test.sh boolean_branch_${I}_11 valid ${OP} 'ClassA'
1272         ./make_bool_branch_test.sh boolean_branch_${I}_12 valid ${OP} 'int32[]'
1273         ./make_bool_branch_test.sh boolean_branch_${I}_13 valid ${OP} 'int32[,,]'
1274         ./make_bool_branch_test.sh boolean_branch_${I}_14 valid ${OP} 'class Template`1<object>'
1275         ./make_bool_branch_test.sh boolean_branch_${I}_15 valid ${OP} 'class Template`1<object>[]'
1276         ./make_bool_branch_test.sh boolean_branch_${I}_16 valid ${OP} 'class Template`1<object>[,,]'
1277         
1278         ./make_bool_branch_test.sh boolean_branch_${I}_17 unverifiable ${OP} float32
1279         ./make_bool_branch_test.sh boolean_branch_${I}_18 unverifiable ${OP} float64
1280         ./make_bool_branch_test.sh boolean_branch_${I}_19 unverifiable ${OP} 'class MyValueType'
1281         ./make_bool_branch_test.sh boolean_branch_${I}_20 unverifiable ${OP} 'class ValueTypeTemplate`1<object>'
1282         I=`expr $I + 1`
1283 done
1284
1285 #tests for field loading
1286 I=1
1287 for OP in 'ldfld' 'ldflda'
1288 do
1289         ./make_field_store_test.sh field_store_${I}_1 unverifiable "${OP} int32 ClassA::fld" int32 int32
1290         ./make_field_store_test.sh field_store_${I}_2 unverifiable "${OP} int32 ClassA::fld" int32 'class ClassB' yes
1291         ./make_field_store_test.sh field_store_${I}_3 unverifiable "${OP} int32 ClassA::fld" int32 object yes
1292         ./make_field_store_test.sh field_store_${I}_4 unverifiable "${OP} int32 ClassA::fld" int32 'class MyValueType'
1293         ./make_field_store_test.sh field_store_${I}_5 valid "${OP} int32 ClassA::fld" int32 'class ClassA' yes
1294         ./make_field_store_test.sh field_store_${I}_6 valid "${OP} int32 ClassA::fld" int32 'class SubClass' yes
1295         #ldfld and ldflda works diferent with value objects, you cannot take the address of a value-object on the stack
1296         #./make_field_store_test.sh field_store_${I}_7 valid "${OP} int32 MyValueType::fld" int32 'class MyValueType'
1297         #Not usefull as it throws NRE
1298         #./make_field_store_test.sh field_store_${I}_8 valid "${OP} int32 MyValueType::fld" int32 'class MyValueType \&'
1299         ./make_field_store_test.sh field_store_${I}_9 unverifiable "${OP} int32 MyValueType::fld" int32 'native int'
1300         ./make_field_store_test.sh field_store_${I}_10 unverifiable "${OP} int32 MyValueType::fld" int32 'class MyValueType *'
1301         ./make_field_store_test.sh field_store_${I}_11 unverifiable "${OP} int32 ClassA::fld" int32 'class ClassA *'
1302         ./make_field_store_test.sh field_store_${I}_12 valid "${OP} int32 Overlapped::field1" int32 'class Overlapped' yes
1303         ./make_field_store_test.sh field_store_${I}_13 unverifiable "${OP} ClassA Overlapped::field1" 'class ClassA' 'class Overlapped' yes
1304         ./make_field_store_test.sh field_store_${I}_14 valid "${OP} int32 Overlapped::field1" int32 'class SubOverlapped' yes
1305         ./make_field_store_test.sh field_store_${I}_15 unverifiable "${OP} ClassA Overlapped::field1" 'class ClassA' 'class SubOverlapped' yes
1306         ./make_field_store_test.sh field_store_${I}_16 valid "${OP} int32 SubOverlapped::field6" int32 'class SubOverlapped' yes
1307         ./make_field_store_test.sh field_store_${I}_17 unverifiable "${OP} ClassA SubOverlapped::field6" 'class ClassA' 'class SubOverlapped' yes
1308         ./make_field_store_test.sh field_store_${I}_18 valid "${OP} int32 Overlapped::field10" int32 'class Overlapped' yes
1309         ./make_field_store_test.sh field_store_${I}_20 unverifiable "${OP} int32 Overlapped::field10" 'class ClassA' 'class Overlapped' yes
1310
1311         ./make_field_store_test.sh field_store_${I}_22 invalid "${OP} int32 ClassA::unknown_field" 'class ClassA' 'class ClassA' yes
1312         ./make_field_store_test.sh field_store_${I}_23 unverifiable "${OP} int32 ClassA::const_field" int32 'int32 \&'
1313
1314         ./make_field_store_test.sh field_store_${I}_24 valid "${OP} int32 ClassA::sfld" int32 'class ClassA' yes
1315         I=`expr $I + 1`
1316 done
1317
1318 ./make_field_store_test.sh field_store_2_25 unverifiable 'ldflda int32 ClassA::const_field' int32 'class ClassA'
1319
1320 #tests form static field loading
1321 I=1
1322 for OP in 'ldsfld' 'ldsflda'
1323 do
1324         #unknown field
1325         ./make_field_store_test.sh static_field_store_${I}_1 invalid "${OP} int32 ClassA::unknown_field\n\tpop" 'class ClassA' 'class ClassA'
1326         #non static field
1327         ./make_field_store_test.sh static_field_store_${I}_2 invalid "${OP} int32 ClassA::fld\n\tpop" 'class ClassA' 'class ClassA'
1328         #valid
1329         ./make_field_store_test.sh static_field_store_${I}_3 valid "${OP} ClassA ClassA::sfld\n\tpop" 'class ClassA' 'class ClassA'
1330         I=`expr $I + 1`
1331 done
1332
1333 ./make_field_store_test.sh static_field_store_2_25 unverifiable 'ldsflda int32 ClassA::st_const_field\n\tpop' int32 'class ClassA'
1334
1335 ./make_field_valuetype_test.sh value_type_field_load_1 valid 'ldfld int32 MyValueType::fld' 'ldloc.0'
1336 ./make_field_valuetype_test.sh value_type_field_load_2 unverifiable 'ldflda int32 MyValueType::fld' 'ldloc.0'
1337 ./make_field_valuetype_test.sh value_type_field_load_3 valid 'ldfld int32 MyValueType::fld' 'ldloca.s 0'
1338 ./make_field_valuetype_test.sh value_type_field_load_4 valid 'ldflda int32 MyValueType::fld' 'ldloca.s 0'
1339
1340 ./make_field_valuetype_test.sh value_type_field_load_1 valid 'ldfld int32 MyValueType::fld' 'ldloc.1'
1341 ./make_field_valuetype_test.sh value_type_field_load_2 valid 'ldflda int32 MyValueType::fld' 'ldloc.1'
1342 ./make_field_valuetype_test.sh value_type_field_load_3 unverifiable 'ldfld int32 MyValueType::fld' 'ldloca.s 1'
1343 ./make_field_valuetype_test.sh value_type_field_load_4 unverifiable 'ldflda int32 MyValueType::fld' 'ldloca.s 1'
1344
1345
1346
1347 #Tests for access checks
1348 #TODO tests with static calls
1349 #TODO tests with multiple assemblies, involving friend assemblies, with and without matching public key
1350
1351 I=1
1352 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"
1353 do
1354         ./make_nested_access_test.sh nested_access_check_1_${I} valid "$OP" public public no
1355         ./make_nested_access_test.sh nested_access_check_2_${I} valid "$OP" public public yes
1356         ./make_nested_access_test.sh nested_access_check_3_${I} unverifiable "$OP" public private no
1357         ./make_nested_access_test.sh nested_access_check_4_${I} unverifiable "$OP" public private yes
1358         ./make_nested_access_test.sh nested_access_check_5_${I} unverifiable "$OP" public family no
1359         ./make_nested_access_test.sh nested_access_check_6_${I} unverifiable "$OP" public family yes
1360         ./make_nested_access_test.sh nested_access_check_7_${I} valid "$OP" public assembly no
1361         ./make_nested_access_test.sh nested_access_check_8_${I} valid "$OP" public assembly yes
1362         ./make_nested_access_test.sh nested_access_check_9_${I} unverifiable "$OP" public famandassem no
1363         ./make_nested_access_test.sh nested_access_check_a_${I} unverifiable "$OP" public famandassem yes
1364         ./make_nested_access_test.sh nested_access_check_b_${I} valid "$OP" public famorassem no
1365         ./make_nested_access_test.sh nested_access_check_c_${I} valid "$OP" public famorassem yes
1366
1367         ./make_nested_access_test.sh nested_access_check_11_${I} unverifiable "$OP" private public no
1368         ./make_nested_access_test.sh nested_access_check_12_${I} unverifiable "$OP" private public yes
1369         ./make_nested_access_test.sh nested_access_check_13_${I} unverifiable "$OP" private private no
1370         ./make_nested_access_test.sh nested_access_check_14_${I} unverifiable "$OP" private private yes
1371         ./make_nested_access_test.sh nested_access_check_15_${I} unverifiable "$OP" private family no
1372         ./make_nested_access_test.sh nested_access_check_16_${I} unverifiable "$OP" private family yes
1373         ./make_nested_access_test.sh nested_access_check_17_${I} unverifiable "$OP" private assembly no
1374         ./make_nested_access_test.sh nested_access_check_18_${I} unverifiable "$OP" private assembly yes
1375         ./make_nested_access_test.sh nested_access_check_19_${I} unverifiable "$OP" private famandassem no
1376         ./make_nested_access_test.sh nested_access_check_1a_${I} unverifiable "$OP" private famandassem yes
1377         ./make_nested_access_test.sh nested_access_check_1b_${I} unverifiable "$OP" private famorassem no
1378         ./make_nested_access_test.sh nested_access_check_1c_${I} unverifiable "$OP" private famorassem yes
1379
1380         ./make_nested_access_test.sh nested_access_check_21_${I} unverifiable "$OP" family public no
1381         ./make_nested_access_test.sh nested_access_check_22_${I} valid "$OP" family public yes
1382         ./make_nested_access_test.sh nested_access_check_23_${I} unverifiable "$OP" family private no
1383         ./make_nested_access_test.sh nested_access_check_24_${I} unverifiable "$OP" family private yes
1384         ./make_nested_access_test.sh nested_access_check_25_${I} unverifiable "$OP" family family no
1385         ./make_nested_access_test.sh nested_access_check_26_${I} unverifiable "$OP" family family yes
1386         ./make_nested_access_test.sh nested_access_check_27_${I} unverifiable "$OP" family assembly no
1387         ./make_nested_access_test.sh nested_access_check_28_${I} valid "$OP" family assembly yes
1388         ./make_nested_access_test.sh nested_access_check_29_${I} unverifiable "$OP" family famandassem no
1389         ./make_nested_access_test.sh nested_access_check_2a_${I} unverifiable "$OP" family famandassem yes
1390         ./make_nested_access_test.sh nested_access_check_2b_${I} unverifiable "$OP" family famorassem no
1391         ./make_nested_access_test.sh nested_access_check_2c_${I} valid "$OP" family famorassem yes
1392
1393         ./make_nested_access_test.sh nested_access_check_31_${I} valid "$OP" assembly public no
1394         ./make_nested_access_test.sh nested_access_check_32_${I} valid "$OP" assembly public yes
1395         ./make_nested_access_test.sh nested_access_check_33_${I} unverifiable "$OP" assembly private no
1396         ./make_nested_access_test.sh nested_access_check_34_${I} unverifiable "$OP" assembly private yes
1397         ./make_nested_access_test.sh nested_access_check_35_${I} unverifiable "$OP" assembly family no
1398         ./make_nested_access_test.sh nested_access_check_36_${I} unverifiable "$OP" assembly family yes
1399         ./make_nested_access_test.sh nested_access_check_37_${I} valid "$OP" assembly assembly no
1400         ./make_nested_access_test.sh nested_access_check_38_${I} valid "$OP" assembly assembly yes
1401         ./make_nested_access_test.sh nested_access_check_39_${I} unverifiable "$OP" assembly famandassem no
1402         ./make_nested_access_test.sh nested_access_check_3a_${I} unverifiable "$OP" assembly famandassem yes
1403         ./make_nested_access_test.sh nested_access_check_3b_${I} valid "$OP" assembly famorassem no
1404         ./make_nested_access_test.sh nested_access_check_3c_${I} valid "$OP" assembly famorassem yes
1405
1406         ./make_nested_access_test.sh nested_access_check_41_${I} unverifiable "$OP" famandassem public no
1407         ./make_nested_access_test.sh nested_access_check_42_${I} valid "$OP" famandassem public yes
1408         ./make_nested_access_test.sh nested_access_check_43_${I} unverifiable "$OP" famandassem private no
1409         ./make_nested_access_test.sh nested_access_check_44_${I} unverifiable "$OP" famandassem private yes
1410         ./make_nested_access_test.sh nested_access_check_45_${I} unverifiable "$OP" famandassem family no
1411         ./make_nested_access_test.sh nested_access_check_46_${I} unverifiable "$OP" famandassem family yes
1412         ./make_nested_access_test.sh nested_access_check_47_${I} unverifiable "$OP" famandassem assembly no
1413         ./make_nested_access_test.sh nested_access_check_48_${I} valid "$OP" famandassem assembly yes
1414         ./make_nested_access_test.sh nested_access_check_49_${I} unverifiable "$OP" famandassem famandassem no
1415         ./make_nested_access_test.sh nested_access_check_4a_${I} unverifiable "$OP" famandassem famandassem yes
1416         ./make_nested_access_test.sh nested_access_check_4b_${I} unverifiable "$OP" famandassem famorassem no
1417         ./make_nested_access_test.sh nested_access_check_4c_${I} valid "$OP" famandassem famorassem yes
1418
1419         ./make_nested_access_test.sh nested_access_check_51_${I} valid "$OP" famorassem public no
1420         ./make_nested_access_test.sh nested_access_check_52_${I} valid "$OP" famorassem public yes
1421         ./make_nested_access_test.sh nested_access_check_53_${I} unverifiable "$OP" famorassem private no
1422         ./make_nested_access_test.sh nested_access_check_54_${I} unverifiable "$OP" famorassem private yes
1423         ./make_nested_access_test.sh nested_access_check_55_${I} unverifiable "$OP" famorassem family no
1424         ./make_nested_access_test.sh nested_access_check_56_${I} unverifiable "$OP" famorassem family yes
1425         ./make_nested_access_test.sh nested_access_check_57_${I} valid "$OP" famorassem assembly no
1426         ./make_nested_access_test.sh nested_access_check_58_${I} valid "$OP" famorassem assembly yes
1427         ./make_nested_access_test.sh nested_access_check_59_${I} unverifiable "$OP" famorassem famandassem no
1428         ./make_nested_access_test.sh nested_access_check_5a_${I} unverifiable "$OP" famorassem famandassem yes
1429         ./make_nested_access_test.sh nested_access_check_5b_${I} valid "$OP" famorassem famorassem no
1430         ./make_nested_access_test.sh nested_access_check_5c_${I} valid "$OP" famorassem famorassem yes
1431         I=`expr $I + 1`
1432 done
1433
1434 #Tests for accessing an owned nested type
1435 I=1
1436 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"
1437 do
1438         ./make_self_nested_test.sh self_nested_access_check_1_${I} valid "$OP" public public
1439         ./make_self_nested_test.sh self_nested_access_check_2_${I} unverifiable "$OP" public private
1440         ./make_self_nested_test.sh self_nested_access_check_3_${I} unverifiable "$OP" public family
1441         ./make_self_nested_test.sh self_nested_access_check_4_${I} valid "$OP" public assembly
1442         ./make_self_nested_test.sh self_nested_access_check_5_${I} unverifiable "$OP" public famandassem
1443         ./make_self_nested_test.sh self_nested_access_check_6_${I} valid "$OP" public famorassem
1444
1445         ./make_self_nested_test.sh self_nested_access_check_7_${I} valid "$OP" private public
1446         ./make_self_nested_test.sh self_nested_access_check_8_${I} unverifiable "$OP" private private
1447         ./make_self_nested_test.sh self_nested_access_check_9_${I} unverifiable "$OP" private family
1448         ./make_self_nested_test.sh self_nested_access_check_10_${I} valid "$OP" private assembly
1449         ./make_self_nested_test.sh self_nested_access_check_11_${I} unverifiable "$OP" private famandassem
1450         ./make_self_nested_test.sh self_nested_access_check_12_${I} valid "$OP" private famorassem
1451
1452         ./make_self_nested_test.sh self_nested_access_check_13_${I} valid "$OP" family public
1453         ./make_self_nested_test.sh self_nested_access_check_14_${I} unverifiable "$OP" family private
1454         ./make_self_nested_test.sh self_nested_access_check_15_${I} unverifiable "$OP" family family
1455         ./make_self_nested_test.sh self_nested_access_check_16_${I} valid "$OP" family assembly
1456         ./make_self_nested_test.sh self_nested_access_check_17_${I} unverifiable "$OP" family famandassem
1457         ./make_self_nested_test.sh self_nested_access_check_18_${I} valid "$OP" family famorassem
1458
1459         ./make_self_nested_test.sh self_nested_access_check_19_${I} valid "$OP" assembly public
1460         ./make_self_nested_test.sh self_nested_access_check_20_${I} unverifiable "$OP" assembly private
1461         ./make_self_nested_test.sh self_nested_access_check_21_${I} unverifiable "$OP" assembly family
1462         ./make_self_nested_test.sh self_nested_access_check_22_${I} valid "$OP" assembly assembly
1463         ./make_self_nested_test.sh self_nested_access_check_23_${I} unverifiable "$OP" assembly famandassem
1464         ./make_self_nested_test.sh self_nested_access_check_24_${I} valid "$OP" assembly famorassem
1465
1466         ./make_self_nested_test.sh self_nested_access_check_25_${I} valid "$OP" famandassem public
1467         ./make_self_nested_test.sh self_nested_access_check_26_${I} unverifiable "$OP" famandassem private
1468         ./make_self_nested_test.sh self_nested_access_check_27_${I} unverifiable "$OP" famandassem family
1469         ./make_self_nested_test.sh self_nested_access_check_28_${I} valid "$OP" famandassem assembly
1470         ./make_self_nested_test.sh self_nested_access_check_29_${I} valid "$unverifiable" famandassem famandassem
1471         ./make_self_nested_test.sh self_nested_access_check_30_${I} valid "$OP" famandassem famorassem
1472
1473         ./make_self_nested_test.sh self_nested_access_check_31_${I} valid "$OP" famorassem public
1474         ./make_self_nested_test.sh self_nested_access_check_32_${I} unverifiable "$OP" famorassem private
1475         ./make_self_nested_test.sh self_nested_access_check_33_${I} unverifiable "$OP" famorassem family
1476         ./make_self_nested_test.sh self_nested_access_check_34_${I} valid "$OP" famorassem assembly
1477         ./make_self_nested_test.sh self_nested_access_check_35_${I} unverifiable "$OP" famorassem famandassem
1478         ./make_self_nested_test.sh self_nested_access_check_36_${I} valid "$OP" famorassem famorassem
1479         I=`expr $I + 1`
1480 done
1481
1482
1483 I=1
1484 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"
1485 do
1486         ./make_cross_nested_access_test.sh cross_nested_access_check_1_${I} valid "$OP" public public no
1487         ./make_cross_nested_access_test.sh cross_nested_access_check_2_${I} valid "$OP" public public yes
1488         ./make_cross_nested_access_test.sh cross_nested_access_check_3_${I} unverifiable "$OP" public private no
1489         ./make_cross_nested_access_test.sh cross_nested_access_check_4_${I} unverifiable "$OP" public private yes
1490         ./make_cross_nested_access_test.sh cross_nested_access_check_5_${I} unverifiable "$OP" public family no
1491         ./make_cross_nested_access_test.sh cross_nested_access_check_7_${I} valid "$OP" public assembly no
1492         ./make_cross_nested_access_test.sh cross_nested_access_check_8_${I} valid "$OP" public assembly yes
1493         ./make_cross_nested_access_test.sh cross_nested_access_check_9_${I} unverifiable "$OP" public famandassem no
1494         ./make_cross_nested_access_test.sh cross_nested_access_check_b_${I} valid "$OP" public famorassem no
1495         ./make_cross_nested_access_test.sh cross_nested_access_check_c_${I} valid "$OP" public famorassem yes
1496
1497         ./make_cross_nested_access_test.sh cross_nested_access_check_11_${I} valid "$OP" private public no
1498         ./make_cross_nested_access_test.sh cross_nested_access_check_12_${I} valid "$OP" private public yes
1499         ./make_cross_nested_access_test.sh cross_nested_access_check_13_${I} unverifiable "$OP" private private no
1500         ./make_cross_nested_access_test.sh cross_nested_access_check_14_${I} unverifiable "$OP" private private yes
1501         ./make_cross_nested_access_test.sh cross_nested_access_check_15_${I} unverifiable "$OP" private family no
1502         ./make_cross_nested_access_test.sh cross_nested_access_check_17_${I} valid "$OP" private assembly no
1503         ./make_cross_nested_access_test.sh cross_nested_access_check_18_${I} valid "$OP" private assembly yes
1504         ./make_cross_nested_access_test.sh cross_nested_access_check_19_${I} unverifiable "$OP" private famandassem no
1505         ./make_cross_nested_access_test.sh cross_nested_access_check_1b_${I} valid "$OP" private famorassem no
1506         ./make_cross_nested_access_test.sh cross_nested_access_check_1c_${I} valid "$OP" private famorassem yes
1507
1508         ./make_cross_nested_access_test.sh cross_nested_access_check_21_${I} valid "$OP" family public no
1509         ./make_cross_nested_access_test.sh cross_nested_access_check_22_${I} valid "$OP" family public yes
1510         ./make_cross_nested_access_test.sh cross_nested_access_check_23_${I} unverifiable "$OP" family private no
1511         ./make_cross_nested_access_test.sh cross_nested_access_check_24_${I} unverifiable "$OP" family private yes
1512         ./make_cross_nested_access_test.sh cross_nested_access_check_25_${I} unverifiable "$OP" family family no
1513         ./make_cross_nested_access_test.sh cross_nested_access_check_27_${I} valid "$OP" family assembly no
1514         ./make_cross_nested_access_test.sh cross_nested_access_check_28_${I} valid "$OP" family assembly yes
1515         ./make_cross_nested_access_test.sh cross_nested_access_check_29_${I} unverifiable "$OP" family famandassem no
1516         ./make_cross_nested_access_test.sh cross_nested_access_check_2b_${I} valid "$OP" family famorassem no
1517         ./make_cross_nested_access_test.sh cross_nested_access_check_2c_${I} valid "$OP" family famorassem yes
1518
1519         ./make_cross_nested_access_test.sh cross_nested_access_check_31_${I} valid "$OP" assembly public no
1520         ./make_cross_nested_access_test.sh cross_nested_access_check_32_${I} valid "$OP" assembly public yes
1521         ./make_cross_nested_access_test.sh cross_nested_access_check_33_${I} unverifiable "$OP" assembly private no
1522         ./make_cross_nested_access_test.sh cross_nested_access_check_34_${I} unverifiable "$OP" assembly private yes
1523         ./make_cross_nested_access_test.sh cross_nested_access_check_35_${I} unverifiable "$OP" assembly family no
1524         ./make_cross_nested_access_test.sh cross_nested_access_check_37_${I} valid "$OP" assembly assembly no
1525         ./make_cross_nested_access_test.sh cross_nested_access_check_38_${I} valid "$OP" assembly assembly yes
1526         ./make_cross_nested_access_test.sh cross_nested_access_check_39_${I} unverifiable "$OP" assembly famandassem no
1527         ./make_cross_nested_access_test.sh cross_nested_access_check_3b_${I} valid "$OP" assembly famorassem no
1528         ./make_cross_nested_access_test.sh cross_nested_access_check_3c_${I} valid "$OP" assembly famorassem yes
1529
1530         ./make_cross_nested_access_test.sh cross_nested_access_check_41_${I} valid "$OP" famandassem public no
1531         ./make_cross_nested_access_test.sh cross_nested_access_check_42_${I} valid "$OP" famandassem public yes
1532         ./make_cross_nested_access_test.sh cross_nested_access_check_43_${I} unverifiable "$OP" famandassem private no
1533         ./make_cross_nested_access_test.sh cross_nested_access_check_44_${I} unverifiable "$OP" famandassem private yes
1534         ./make_cross_nested_access_test.sh cross_nested_access_check_45_${I} unverifiable "$OP" famandassem family no
1535         ./make_cross_nested_access_test.sh cross_nested_access_check_47_${I} valid "$OP" famandassem assembly no
1536         ./make_cross_nested_access_test.sh cross_nested_access_check_48_${I} valid "$OP" famandassem assembly yes
1537         ./make_cross_nested_access_test.sh cross_nested_access_check_49_${I} unverifiable "$OP" famandassem famandassem no
1538         ./make_cross_nested_access_test.sh cross_nested_access_check_4b_${I} valid "$OP" famandassem famorassem no
1539         ./make_cross_nested_access_test.sh cross_nested_access_check_4c_${I} valid "$OP" famandassem famorassem yes
1540
1541         ./make_cross_nested_access_test.sh cross_nested_access_check_51_${I} valid "$OP" famorassem public no
1542         ./make_cross_nested_access_test.sh cross_nested_access_check_52_${I} valid "$OP" famorassem public yes
1543         ./make_cross_nested_access_test.sh cross_nested_access_check_53_${I} unverifiable "$OP" famorassem private no
1544         ./make_cross_nested_access_test.sh cross_nested_access_check_54_${I} unverifiable "$OP" famorassem private yes
1545         ./make_cross_nested_access_test.sh cross_nested_access_check_55_${I} unverifiable "$OP" famorassem family no
1546         ./make_cross_nested_access_test.sh cross_nested_access_check_57_${I} valid "$OP" famorassem assembly no
1547         ./make_cross_nested_access_test.sh cross_nested_access_check_58_${I} valid "$OP" famorassem assembly yes
1548         ./make_cross_nested_access_test.sh cross_nested_access_check_59_${I} unverifiable "$OP" famorassem famandassem no
1549         ./make_cross_nested_access_test.sh cross_nested_access_check_5b_${I} valid "$OP" famorassem famorassem no
1550         ./make_cross_nested_access_test.sh cross_nested_access_check_5c_${I} valid "$OP" famorassem famorassem yes
1551         I=`expr $I + 1`
1552 done
1553
1554
1555 I=1
1556 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"
1557 do
1558         ./make_cross_nested_access_test.sh cross_nested_access_check_2a_${I} valid "$OP" public public yes yes
1559         ./make_cross_nested_access_test.sh cross_nested_access_check_4a_${I} unverifiable "$OP" public private yes yes
1560         ./make_cross_nested_access_test.sh cross_nested_access_check_8a_${I} valid "$OP" public assembly yes yes
1561         ./make_cross_nested_access_test.sh cross_nested_access_check_ca_${I} valid "$OP" public famorassem yes yes
1562
1563         ./make_cross_nested_access_test.sh cross_nested_access_check_12a_${I} valid "$OP" private public yes yes
1564         ./make_cross_nested_access_test.sh cross_nested_access_check_14a_${I} unverifiable "$OP" private private yes yes
1565         ./make_cross_nested_access_test.sh cross_nested_access_check_18a_${I} valid "$OP" private assembly yes yes
1566         ./make_cross_nested_access_test.sh cross_nested_access_check_1ca_${I} valid "$OP" private famorassem yes yes
1567
1568         ./make_cross_nested_access_test.sh cross_nested_access_check_22a_${I} valid "$OP" family public yes yes
1569         ./make_cross_nested_access_test.sh cross_nested_access_check_24a_${I} unverifiable "$OP" family private yes yes
1570         ./make_cross_nested_access_test.sh cross_nested_access_check_28a_${I} valid "$OP" family assembly yes yes
1571         ./make_cross_nested_access_test.sh cross_nested_access_check_2ca_${I} valid "$OP" family famorassem yes yes
1572
1573         ./make_cross_nested_access_test.sh cross_nested_access_check_32a_${I} valid "$OP" assembly public yes yes
1574         ./make_cross_nested_access_test.sh cross_nested_access_check_34a_${I} unverifiable "$OP" assembly private yes yes
1575         ./make_cross_nested_access_test.sh cross_nested_access_check_38a_${I} valid "$OP" assembly assembly yes yes
1576         ./make_cross_nested_access_test.sh cross_nested_access_check_3ca_${I} valid "$OP" assembly famorassem yes yes
1577
1578         ./make_cross_nested_access_test.sh cross_nested_access_check_42a_${I} valid "$OP" famandassem public yes yes
1579         ./make_cross_nested_access_test.sh cross_nested_access_check_44a_${I} unverifiable "$OP" famandassem private yes yes
1580         ./make_cross_nested_access_test.sh cross_nested_access_check_48a_${I} valid "$OP" famandassem assembly yes yes
1581         ./make_cross_nested_access_test.sh cross_nested_access_check_4ca_${I} valid "$OP" famandassem famorassem yes yes
1582
1583         ./make_cross_nested_access_test.sh cross_nested_access_check_52a_${I} valid "$OP" famorassem public yes yes
1584         ./make_cross_nested_access_test.sh cross_nested_access_check_54a_${I} unverifiable "$OP" famorassem private yes yes
1585         ./make_cross_nested_access_test.sh cross_nested_access_check_58a_${I} valid "$OP" famorassem assembly yes yes
1586         ./make_cross_nested_access_test.sh cross_nested_access_check_5ca_${I} valid "$OP" famorassem famorassem yes yes
1587         I=`expr $I + 1`
1588 done
1589
1590
1591 I=1
1592 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"
1593 do
1594         ./make_cross_nested_access_test.sh cross_nested_access_check_6_${I} unverifiable "$OP" public family yes
1595         ./make_cross_nested_access_test.sh cross_nested_access_check_6a_${I} valid "$OP" public family yes yes
1596         ./make_cross_nested_access_test.sh cross_nested_access_check_a_${I} unverifiable "$OP" public famandassem yes
1597         ./make_cross_nested_access_test.sh cross_nested_access_check_aa_${I} valid "$OP" public famandassem yes yes
1598
1599         ./make_cross_nested_access_test.sh cross_nested_access_check_16_${I} unverifiable "$OP" private family yes
1600         ./make_cross_nested_access_test.sh cross_nested_access_check_16a_${I} valid "$OP" private family yes yes
1601         ./make_cross_nested_access_test.sh cross_nested_access_check_1a_${I} unverifiable "$OP" private famandassem yes
1602         ./make_cross_nested_access_test.sh cross_nested_access_check_1aa_${I} valid "$OP" private famandassem yes yes
1603
1604         ./make_cross_nested_access_test.sh cross_nested_access_check_26_${I} unverifiable "$OP" family family yes
1605         ./make_cross_nested_access_test.sh cross_nested_access_check_26a_${I} valid "$OP" family family yes yes
1606         ./make_cross_nested_access_test.sh cross_nested_access_check_2a_${I} unverifiable "$OP" family famandassem yes
1607         ./make_cross_nested_access_test.sh cross_nested_access_check_2aa_${I} valid "$OP" family famandassem yes yes
1608
1609         ./make_cross_nested_access_test.sh cross_nested_access_check_36_${I} unverifiable "$OP" assembly family yes
1610         ./make_cross_nested_access_test.sh cross_nested_access_check_36a_${I} valid "$OP" assembly family yes yes
1611         ./make_cross_nested_access_test.sh cross_nested_access_check_3a_${I} unverifiable "$OP" assembly famandassem yes
1612         ./make_cross_nested_access_test.sh cross_nested_access_check_3aa_${I} valid "$OP" assembly famandassem yes yes
1613
1614         ./make_cross_nested_access_test.sh cross_nested_access_check_46_${I} unverifiable "$OP" famandassem family yes
1615         ./make_cross_nested_access_test.sh cross_nested_access_check_46a_${I} valid "$OP" famandassem family yes yes
1616         ./make_cross_nested_access_test.sh cross_nested_access_check_4a_${I} unverifiable "$OP" famandassem famandassem yes
1617         ./make_cross_nested_access_test.sh cross_nested_access_check_4aa_${I} valid "$OP" famandassem famandassem yes yes
1618
1619         ./make_cross_nested_access_test.sh cross_nested_access_check_56_${I} unverifiable "$OP" famorassem family yes
1620         ./make_cross_nested_access_test.sh cross_nested_access_check_56a_${I} valid "$OP" famorassem family yes yes
1621         ./make_cross_nested_access_test.sh cross_nested_access_check_5a_${I} unverifiable "$OP" famorassem famandassem yes
1622         ./make_cross_nested_access_test.sh cross_nested_access_check_5aa_${I} valid "$OP" famorassem famandassem yes yes
1623
1624         I=`expr $I + 1`
1625 done
1626
1627 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"
1628 do
1629         ./make_cross_nested_access_test.sh cross_nested_access_check_6_${I} valid "$OP" public family yes
1630         ./make_cross_nested_access_test.sh cross_nested_access_check_6a_${I} valid "$OP" public family yes yes
1631         ./make_cross_nested_access_test.sh cross_nested_access_check_a_${I} valid "$OP" public famandassem yes
1632         ./make_cross_nested_access_test.sh cross_nested_access_check_aa_${I} valid "$OP" public famandassem yes yes
1633
1634         ./make_cross_nested_access_test.sh cross_nested_access_check_16_${I} valid "$OP" private family yes
1635         ./make_cross_nested_access_test.sh cross_nested_access_check_16a_${I} valid "$OP" private family yes yes
1636         ./make_cross_nested_access_test.sh cross_nested_access_check_1a_${I} valid "$OP" private famandassem yes
1637         ./make_cross_nested_access_test.sh cross_nested_access_check_1aa_${I} valid "$OP" private famandassem yes yes
1638
1639         ./make_cross_nested_access_test.sh cross_nested_access_check_26_${I} valid "$OP" family family yes
1640         ./make_cross_nested_access_test.sh cross_nested_access_check_26a_${I} valid "$OP" family family yes yes
1641         ./make_cross_nested_access_test.sh cross_nested_access_check_2a_${I} valid "$OP" family famandassem yes
1642         ./make_cross_nested_access_test.sh cross_nested_access_check_2aa_${I} valid "$OP" family famandassem yes yes
1643
1644         ./make_cross_nested_access_test.sh cross_nested_access_check_36_${I} valid "$OP" assembly family yes
1645         ./make_cross_nested_access_test.sh cross_nested_access_check_36a_${I} valid "$OP" assembly family yes yes
1646         ./make_cross_nested_access_test.sh cross_nested_access_check_3a_${I} valid "$OP" assembly famandassem yes
1647         ./make_cross_nested_access_test.sh cross_nested_access_check_3aa_${I} valid "$OP" assembly famandassem yes yes
1648
1649         ./make_cross_nested_access_test.sh cross_nested_access_check_46_${I} valid "$OP" famandassem family yes
1650         ./make_cross_nested_access_test.sh cross_nested_access_check_46a_${I} valid "$OP" famandassem family yes yes
1651         ./make_cross_nested_access_test.sh cross_nested_access_check_4a_${I} valid "$OP" famandassem famandassem yes
1652         ./make_cross_nested_access_test.sh cross_nested_access_check_4aa_${I} valid "$OP" famandassem famandassem yes yes
1653
1654         ./make_cross_nested_access_test.sh cross_nested_access_check_56_${I} valid "$OP" famorassem family yes
1655         ./make_cross_nested_access_test.sh cross_nested_access_check_56a_${I} valid "$OP" famorassem family yes yes
1656         ./make_cross_nested_access_test.sh cross_nested_access_check_5a_${I} valid "$OP" famorassem famandassem yes
1657         ./make_cross_nested_access_test.sh cross_nested_access_check_5aa_${I} valid "$OP" famorassem famandassem yes yes
1658
1659         I=`expr $I + 1`
1660 done
1661
1662
1663
1664 I=1
1665 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()"
1666 do
1667         ./make_access_test.sh access_check_1_${I} valid "$OP" public public no
1668         ./make_access_test.sh access_check_2_${I} valid "$OP" public public yes
1669         ./make_access_test.sh access_check_3_${I} unverifiable "$OP" public private no
1670         ./make_access_test.sh access_check_4_${I} unverifiable "$OP" public private yes
1671         ./make_access_test.sh access_check_5_${I} unverifiable "$OP" public family no
1672         ./make_access_test.sh access_check_7_${I} valid "$OP" public assembly no
1673         ./make_access_test.sh access_check_8_${I} valid "$OP" public assembly yes
1674         ./make_access_test.sh access_check_9_${I} unverifiable "$OP" public famandassem no
1675         ./make_access_test.sh access_check_b_${I} valid "$OP" public famorassem no
1676         ./make_access_test.sh access_check_c_${I} valid "$OP" public famorassem yes
1677
1678         ./make_access_test.sh access_check_11_${I} valid "$OP" private public no
1679         ./make_access_test.sh access_check_12_${I} valid "$OP" private public yes
1680         ./make_access_test.sh access_check_13_${I} unverifiable "$OP" private private no
1681         ./make_access_test.sh access_check_14_${I} unverifiable "$OP" private private yes
1682         ./make_access_test.sh access_check_15_${I} unverifiable "$OP" private family no
1683         ./make_access_test.sh access_check_17_${I} valid "$OP" private assembly no
1684         ./make_access_test.sh access_check_18_${I} valid "$OP" private assembly yes
1685         ./make_access_test.sh access_check_19_${I} unverifiable "$OP" private famandassem no
1686         ./make_access_test.sh access_check_1b_${I} valid "$OP" private famorassem no
1687         ./make_access_test.sh access_check_1c_${I} valid "$OP" private famorassem yes
1688
1689         ./make_access_test.sh access_check_31_${I} valid "$OP" " " public no
1690         ./make_access_test.sh access_check_32_${I} valid "$OP" " " public yes
1691         ./make_access_test.sh access_check_33_${I} unverifiable "$OP" " " private no
1692         ./make_access_test.sh access_check_34_${I} unverifiable "$OP" " " private yes
1693         ./make_access_test.sh access_check_35_${I} unverifiable "$OP" " " family no
1694         ./make_access_test.sh access_check_37_${I} valid "$OP" " " assembly no
1695         ./make_access_test.sh access_check_38_${I} valid "$OP" " " assembly yes
1696         ./make_access_test.sh access_check_39_${I} unverifiable "$OP" " " famandassem no
1697         ./make_access_test.sh access_check_3b_${I} valid "$OP" " " famorassem no
1698         ./make_access_test.sh access_check_3c_${I} valid "$OP" " " famorassem yes
1699
1700         I=`expr $I + 1`
1701 done
1702
1703 #static members are diferent from instance members
1704 I=1
1705 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" 
1706 do
1707         ./make_access_test.sh access_check_41_${I} valid "$OP" public family yes
1708         ./make_access_test.sh access_check_42_${I} valid "$OP" public famandassem yes
1709         ./make_access_test.sh access_check_43_${I} valid "$OP" private family yes
1710         ./make_access_test.sh access_check_44_${I} valid "$OP" private famandassem yes
1711         ./make_access_test.sh access_check_45_${I} valid "$OP" " " family yes
1712         ./make_access_test.sh access_check_46_${I} valid "$OP" " " famandassem yes
1713         I=`expr $I + 1`
1714 done
1715
1716 #try to access the base stuff directly
1717 I=1
1718 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()"
1719 do
1720         ./make_access_test.sh access_check_51_${I} unverifiable "$OP" public family yes
1721         ./make_access_test.sh access_check_52_${I} unverifiable "$OP" public famandassem yes
1722         ./make_access_test.sh access_check_53_${I} unverifiable "$OP" private family yes
1723         ./make_access_test.sh access_check_54_${I} unverifiable "$OP" private famandassem yes
1724         ./make_access_test.sh access_check_55_${I} unverifiable "$OP" " " family yes
1725         ./make_access_test.sh access_check_56_${I} unverifiable "$OP" " " famandassem yes
1726         I=`expr $I + 1`
1727 done
1728
1729 #try to access the subclass stuff
1730 I=1
1731 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()"
1732 do
1733         ./make_access_test.sh access_check_61_${I} valid "$OP" public family yes yes
1734         ./make_access_test.sh access_check_62_${I} valid "$OP" public famandassem yes yes
1735         ./make_access_test.sh access_check_63_${I} valid "$OP" private family yes yes
1736         ./make_access_test.sh access_check_64_${I} valid "$OP" private famandassem yes yes
1737         ./make_access_test.sh access_check_65_${I} valid "$OP" " " family yes yes
1738         ./make_access_test.sh access_check_66_${I} valid "$OP" " " famandassem yes yes
1739         I=`expr $I + 1`
1740 done
1741
1742
1743 function create_nesting_test_same_result () {
1744   K=$1
1745   for BASE in yes no
1746   do
1747     for NESTED in yes no
1748       do
1749         for LOAD in yes no
1750         do
1751           if ! ( [ "$NESTED" == "no" ] && [ "$LOAD" == "yes" ] ) ; then
1752             ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $2 "$OP" $3 $4 $5 "$BASE" "$NESTED" "$LOAD"
1753             K=`expr $K + 1`
1754           fi
1755       done
1756     done
1757   done
1758 }
1759
1760 function create_nesting_test_only_first_ok () {
1761   FIRST=$1
1762   K=$1
1763   for BASE in yes no
1764   do
1765     for NESTED in yes no
1766       do
1767         for LOAD in yes no
1768         do
1769           if ! ( [ "$NESTED" == "no" ] && [ "$LOAD" == "yes" ] ) ; then
1770            EXPECT=unverifiable
1771            if [ "$FIRST" == "$K" ]; then
1772               EXPECT=valid
1773            fi
1774            ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $EXPECT "$OP" $2 $3 $4 "$BASE" "$NESTED" "$LOAD"
1775            K=`expr $K + 1`
1776          fi
1777      done
1778     done
1779   done
1780 }
1781
1782 I=1
1783
1784 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"
1785 do
1786   create_nesting_test_same_result 1 valid public assembly assembly
1787
1788   ./make_double_nesting_test.sh double_nesting_access_check_7_$I valid "$OP" public assembly family yes yes yes
1789   ./make_double_nesting_test.sh double_nesting_access_check_8_$I unverifiable "$OP" public assembly family yes yes no
1790   ./make_double_nesting_test.sh double_nesting_access_check_9_$I unverifiable "$OP" public assembly family yes no no
1791   ./make_double_nesting_test.sh double_nesting_access_check_10_$I valid "$OP" public assembly family no yes yes
1792   ./make_double_nesting_test.sh double_nesting_access_check_11_$I unverifiable "$OP" public assembly family no yes no
1793   ./make_double_nesting_test.sh double_nesting_access_check_12_$I unverifiable "$OP" public assembly family no no no
1794
1795   ./make_double_nesting_test.sh double_nesting_access_check_13_$I valid "$OP" public assembly famandassem yes yes yes
1796   ./make_double_nesting_test.sh double_nesting_access_check_14_$I unverifiable "$OP" public assembly famandassem yes yes no
1797   ./make_double_nesting_test.sh double_nesting_access_check_15_$I unverifiable "$OP" public assembly famandassem yes no no
1798   ./make_double_nesting_test.sh double_nesting_access_check_16_$I valid "$OP" public assembly famandassem no yes yes
1799   ./make_double_nesting_test.sh double_nesting_access_check_17_$I unverifiable "$OP" public assembly famandassem no yes no
1800   ./make_double_nesting_test.sh double_nesting_access_check_18_$I unverifiable "$OP" public assembly famandassem no no no
1801
1802   create_nesting_test_same_result 19 valid public assembly famorassem
1803   create_nesting_test_same_result 25 unverifiable public assembly private
1804   create_nesting_test_same_result 31 valid public assembly public
1805
1806   ./make_double_nesting_test.sh double_nesting_access_check_37_$I valid "$OP" public family assembly yes yes yes
1807   ./make_double_nesting_test.sh double_nesting_access_check_38_$I valid "$OP" public family assembly yes yes no
1808   ./make_double_nesting_test.sh double_nesting_access_check_39_$I valid "$OP" public family assembly yes no no
1809   ./make_double_nesting_test.sh double_nesting_access_check_40_$I unverifiable "$OP" public family assembly no yes yes
1810   ./make_double_nesting_test.sh double_nesting_access_check_41_$I unverifiable "$OP" public family assembly no yes no
1811   ./make_double_nesting_test.sh double_nesting_access_check_42_$I unverifiable "$OP" public family assembly no no no
1812
1813   create_nesting_test_only_first_ok 43 public family family
1814   create_nesting_test_only_first_ok 49 public family famandassem
1815
1816   ./make_double_nesting_test.sh double_nesting_access_check_55_$I valid "$OP" public family famorassem yes yes yes
1817   ./make_double_nesting_test.sh double_nesting_access_check_56_$I valid "$OP" public family famorassem yes yes no
1818   ./make_double_nesting_test.sh double_nesting_access_check_57_$I valid "$OP" public family famorassem yes no no
1819   ./make_double_nesting_test.sh double_nesting_access_check_58_$I unverifiable "$OP" public family famorassem no yes yes
1820   ./make_double_nesting_test.sh double_nesting_access_check_59_$I unverifiable "$OP" public family famorassem no yes no
1821   ./make_double_nesting_test.sh double_nesting_access_check_60_$I unverifiable "$OP" public family famorassem no no no
1822
1823    create_nesting_test_same_result 61 unverifiable public family private
1824
1825   ./make_double_nesting_test.sh double_nesting_access_check_67_$I valid "$OP" public family public yes yes yes
1826   ./make_double_nesting_test.sh double_nesting_access_check_68_$I valid "$OP" public family public yes yes no
1827   ./make_double_nesting_test.sh double_nesting_access_check_69_$I valid "$OP" public family public yes no no
1828   ./make_double_nesting_test.sh double_nesting_access_check_70_$I unverifiable "$OP" public family public no yes yes
1829   ./make_double_nesting_test.sh double_nesting_access_check_71_$I unverifiable "$OP" public family public no yes no
1830   ./make_double_nesting_test.sh double_nesting_access_check_72_$I unverifiable "$OP" public family public no no no
1831
1832   ./make_double_nesting_test.sh double_nesting_access_check_73_$I valid "$OP" public famandassem assembly yes yes yes
1833   ./make_double_nesting_test.sh double_nesting_access_check_74_$I valid "$OP" public famandassem assembly yes yes no
1834   ./make_double_nesting_test.sh double_nesting_access_check_75_$I valid "$OP" public famandassem assembly yes no no
1835   ./make_double_nesting_test.sh double_nesting_access_check_76_$I unverifiable "$OP" public famandassem assembly no yes yes
1836   ./make_double_nesting_test.sh double_nesting_access_check_77_$I unverifiable "$OP" public famandassem assembly no yes no
1837   ./make_double_nesting_test.sh double_nesting_access_check_78_$I unverifiable "$OP" public famandassem assembly no no no
1838
1839   create_nesting_test_only_first_ok 79  public famandassem family
1840   create_nesting_test_only_first_ok 85  public famandassem famandassem
1841
1842   ./make_double_nesting_test.sh double_nesting_access_check_91_$I valid "$OP" public famandassem famorassem yes yes yes
1843   ./make_double_nesting_test.sh double_nesting_access_check_92_$I valid "$OP" public famandassem famorassem yes yes no
1844   ./make_double_nesting_test.sh double_nesting_access_check_93_$I valid "$OP" public famandassem famorassem yes no no
1845   ./make_double_nesting_test.sh double_nesting_access_check_94_$I unverifiable "$OP" public famandassem famorassem no yes yes
1846   ./make_double_nesting_test.sh double_nesting_access_check_95_$I unverifiable "$OP" public famandassem famorassem no yes no
1847   ./make_double_nesting_test.sh double_nesting_access_check_96_$I unverifiable "$OP" public famandassem famorassem no no no
1848
1849    create_nesting_test_same_result 97 unverifiable public famandassem private
1850
1851   ./make_double_nesting_test.sh double_nesting_access_check_103_$I valid "$OP" public famandassem public yes yes yes
1852   ./make_double_nesting_test.sh double_nesting_access_check_104_$I valid "$OP" public famandassem public yes yes no
1853   ./make_double_nesting_test.sh double_nesting_access_check_105_$I valid "$OP" public famandassem public yes no no
1854   ./make_double_nesting_test.sh double_nesting_access_check_106_$I unverifiable "$OP" public famandassem public no yes yes
1855   ./make_double_nesting_test.sh double_nesting_access_check_107_$I unverifiable "$OP" public famandassem public no yes no
1856   ./make_double_nesting_test.sh double_nesting_access_check_108_$I unverifiable "$OP" public famandassem public no no no
1857
1858   create_nesting_test_same_result 109 valid public famorassem assembly
1859
1860   ./make_double_nesting_test.sh double_nesting_access_check_115_$I valid "$OP" public famorassem family yes yes yes
1861   ./make_double_nesting_test.sh double_nesting_access_check_116_$I unverifiable "$OP" public famorassem family yes yes no
1862   ./make_double_nesting_test.sh double_nesting_access_check_117_$I unverifiable "$OP" public famorassem family yes no no
1863   ./make_double_nesting_test.sh double_nesting_access_check_118_$I valid "$OP" public famorassem family no yes yes
1864   ./make_double_nesting_test.sh double_nesting_access_check_119_$I unverifiable "$OP" public famorassem family no yes no
1865   ./make_double_nesting_test.sh double_nesting_access_check_120_$I unverifiable "$OP" public famorassem family no no no
1866
1867   ./make_double_nesting_test.sh double_nesting_access_check_121_$I valid "$OP" public famorassem famandassem yes yes yes
1868   ./make_double_nesting_test.sh double_nesting_access_check_122_$I unverifiable "$OP" public famorassem famandassem yes yes no
1869   ./make_double_nesting_test.sh double_nesting_access_check_123_$I unverifiable "$OP" public famorassem famandassem yes no no
1870   ./make_double_nesting_test.sh double_nesting_access_check_124_$I valid "$OP" public famorassem famandassem no yes yes
1871   ./make_double_nesting_test.sh double_nesting_access_check_125_$I unverifiable "$OP" public famorassem famandassem no yes no
1872   ./make_double_nesting_test.sh double_nesting_access_check_126_$I unverifiable "$OP" public famorassem famandassem no no no
1873
1874   create_nesting_test_same_result 127 valid public famorassem famorassem
1875   create_nesting_test_same_result 133 unverifiable public famorassem private
1876   create_nesting_test_same_result 139 valid public famorassem public
1877   create_nesting_test_same_result 145 unverifiable public private assembly
1878   create_nesting_test_same_result 151 unverifiable public private family
1879   create_nesting_test_same_result 157 unverifiable public private famandassem
1880   create_nesting_test_same_result 163 unverifiable public private famorassem
1881   create_nesting_test_same_result 169 unverifiable public private private
1882   create_nesting_test_same_result 175 unverifiable public private public
1883   create_nesting_test_same_result 181 valid public public assembly
1884
1885   ./make_double_nesting_test.sh double_nesting_access_check_187_$I valid "$OP" public public family yes yes yes
1886   ./make_double_nesting_test.sh double_nesting_access_check_188_$I unverifiable "$OP" public public family yes yes no
1887   ./make_double_nesting_test.sh double_nesting_access_check_189_$I unverifiable "$OP" public public family yes no no
1888   ./make_double_nesting_test.sh double_nesting_access_check_190_$I valid "$OP" public public family no yes yes
1889   ./make_double_nesting_test.sh double_nesting_access_check_191_$I unverifiable "$OP" public public family no yes no
1890   ./make_double_nesting_test.sh double_nesting_access_check_192_$I unverifiable "$OP" public public family no no no
1891
1892   ./make_double_nesting_test.sh double_nesting_access_check_193_$I valid "$OP" public public famandassem yes yes yes
1893   ./make_double_nesting_test.sh double_nesting_access_check_194_$I unverifiable "$OP" public public famandassem yes yes no
1894   ./make_double_nesting_test.sh double_nesting_access_check_195_$I unverifiable "$OP" public public famandassem yes no no
1895   ./make_double_nesting_test.sh double_nesting_access_check_196_$I valid "$OP" public public famandassem no yes yes
1896   ./make_double_nesting_test.sh double_nesting_access_check_197_$I unverifiable "$OP" public public famandassem no yes no
1897   ./make_double_nesting_test.sh double_nesting_access_check_198_$I unverifiable "$OP" public public famandassem no no no
1898
1899   create_nesting_test_same_result 199 valid public public famorassem
1900   create_nesting_test_same_result 205 unverifiable public public private
1901   create_nesting_test_same_result 211 valid public public public
1902   I=`expr $I + 1`
1903 done
1904
1905 function create_nesting_test_same_result_static () {
1906   K=$1
1907   for BASE in yes no
1908   do
1909     for NESTED in yes no
1910       do
1911         ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $2 "$OP" $3 $4 $5 "$BASE" "$NESTED" yes
1912         K=`expr $K + 1`
1913     done
1914   done
1915 }
1916
1917 function create_nesting_test_strips_result_static () {
1918   K=$1
1919   for BASE in yes no
1920   do
1921     for NESTED in yes no
1922       do
1923         EXPECT=unverifiable
1924         if [ "$NESTED" == "yes" ]; then
1925           EXPECT=valid
1926         fi
1927         ./make_double_nesting_test.sh double_nesting_access_check_${K}_$I $EXPECT "$OP" $2 $3 $4 "$BASE" "$NESTED" yes
1928         K=`expr $K + 1`
1929     done
1930   done
1931 }
1932
1933 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"
1934 do
1935    create_nesting_test_same_result 1 valid public assembly assembly
1936
1937   create_nesting_test_strips_result_static 5 public assembly family
1938   create_nesting_test_strips_result_static 9 public assembly family
1939
1940   create_nesting_test_same_result 13 valid public assembly famorassem
1941   create_nesting_test_same_result 17 unverifiable public assembly private
1942   create_nesting_test_same_result 21 valid public assembly public
1943
1944   ./make_double_nesting_test.sh double_nesting_access_check_25_$I valid "$OP" public family assembly yes yes yes
1945   ./make_double_nesting_test.sh double_nesting_access_check_26_$I valid "$OP" public family assembly yes no yes
1946   ./make_double_nesting_test.sh double_nesting_access_check_27_$I unverifiable "$OP" public family assembly no yes yes
1947   ./make_double_nesting_test.sh double_nesting_access_check_27_$I unverifiable "$OP" public family assembly no no yes
1948
1949   ./make_double_nesting_test.sh double_nesting_access_check_29_$I valid "$OP" public family family yes yes yes
1950   ./make_double_nesting_test.sh double_nesting_access_check_30_$I unverifiable "$OP" public family family yes no yes
1951   ./make_double_nesting_test.sh double_nesting_access_check_31_$I unverifiable "$OP" public family family no yes yes
1952   ./make_double_nesting_test.sh double_nesting_access_check_32_$I unverifiable "$OP" public family family no no yes
1953
1954   ./make_double_nesting_test.sh double_nesting_access_check_33_$I valid "$OP" public family famandassem yes yes yes
1955   ./make_double_nesting_test.sh double_nesting_access_check_34_$I unverifiable "$OP" public family famandassem yes no yes
1956   ./make_double_nesting_test.sh double_nesting_access_check_35_$I unverifiable "$OP" public family famandassem no yes yes
1957   ./make_double_nesting_test.sh double_nesting_access_check_36_$I unverifiable "$OP" public family famandassem no no yes
1958
1959   ./make_double_nesting_test.sh double_nesting_access_check_37_$I valid "$OP" public family famorassem yes yes yes
1960   ./make_double_nesting_test.sh double_nesting_access_check_38_$I valid "$OP" public family famorassem yes no yes
1961   ./make_double_nesting_test.sh double_nesting_access_check_39_$I unverifiable "$OP" public family famorassem no yes yes
1962   ./make_double_nesting_test.sh double_nesting_access_check_40_$I unverifiable "$OP" public family famorassem no no yes
1963
1964    create_nesting_test_same_result 41 unverifiable public family private
1965
1966   ./make_double_nesting_test.sh double_nesting_access_check_45_$I valid "$OP" public family public yes yes yes
1967   ./make_double_nesting_test.sh double_nesting_access_check_46_$I valid "$OP" public family public yes no yes
1968   ./make_double_nesting_test.sh double_nesting_access_check_47_$I unverifiable "$OP" public family public no yes yes
1969   ./make_double_nesting_test.sh double_nesting_access_check_48_$I unverifiable "$OP" public family public no no yes
1970
1971   ./make_double_nesting_test.sh double_nesting_access_check_49_$I valid "$OP" public famandassem assembly yes yes yes
1972   ./make_double_nesting_test.sh double_nesting_access_check_50_$I valid "$OP" public famandassem assembly yes no yes
1973   ./make_double_nesting_test.sh double_nesting_access_check_51_$I unverifiable "$OP" public famandassem assembly no yes yes
1974   ./make_double_nesting_test.sh double_nesting_access_check_52_$I unverifiable "$OP" public famandassem assembly no no yes
1975
1976   ./make_double_nesting_test.sh double_nesting_access_check_53_$I valid "$OP" public famandassem family yes yes yes
1977   ./make_double_nesting_test.sh double_nesting_access_check_54_$I unverifiable "$OP" public famandassem family yes no yes
1978   ./make_double_nesting_test.sh double_nesting_access_check_55_$I unverifiable "$OP" public famandassem family no yes yes
1979   ./make_double_nesting_test.sh double_nesting_access_check_56_$I unverifiable "$OP" public famandassem family no no yes
1980
1981   ./make_double_nesting_test.sh double_nesting_access_check_57_$I valid "$OP" public famandassem famandassem yes yes yes
1982   ./make_double_nesting_test.sh double_nesting_access_check_58_$I unverifiable "$OP" public famandassem famandassem yes no yes
1983   ./make_double_nesting_test.sh double_nesting_access_check_59_$I unverifiable "$OP" public famandassem famandassem no yes yes
1984   ./make_double_nesting_test.sh double_nesting_access_check_60_$I unverifiable "$OP" public famandassem famandassem no no yes
1985
1986   ./make_double_nesting_test.sh double_nesting_access_check_61_$I valid "$OP" public famandassem famorassem yes yes yes
1987   ./make_double_nesting_test.sh double_nesting_access_check_62_$I valid "$OP" public famandassem famorassem yes no yes
1988   ./make_double_nesting_test.sh double_nesting_access_check_63_$I unverifiable "$OP" public famandassem famorassem no yes yes
1989   ./make_double_nesting_test.sh double_nesting_access_check_64_$I unverifiable "$OP" public famandassem famorassem no no yes
1990
1991   create_nesting_test_same_result 65 unverifiable public famandassem private
1992
1993   ./make_double_nesting_test.sh double_nesting_access_check_69_$I valid "$OP" public famandassem public yes yes yes
1994   ./make_double_nesting_test.sh double_nesting_access_check_70_$I valid "$OP" public famandassem public yes no yes
1995   ./make_double_nesting_test.sh double_nesting_access_check_71_$I unverifiable "$OP" public famandassem public no yes yes
1996   ./make_double_nesting_test.sh double_nesting_access_check_72_$I unverifiable "$OP" public famandassem public no no yes
1997
1998   create_nesting_test_same_result 73 valid public famorassem assembly
1999   create_nesting_test_strips_result_static 77 public famorassem family
2000   create_nesting_test_strips_result_static 81 public famorassem famandassem
2001
2002   create_nesting_test_same_result 85 valid public famorassem famorassem
2003   create_nesting_test_same_result 89 unverifiable public famorassem private
2004   create_nesting_test_same_result 93 valid public famorassem public
2005   create_nesting_test_same_result 97 unverifiable public private assembly
2006   create_nesting_test_same_result 101 unverifiable public private family
2007   create_nesting_test_same_result 105 unverifiable public private famandassem
2008   create_nesting_test_same_result 109 unverifiable public private famorassem
2009   create_nesting_test_same_result 113 unverifiable public private private
2010   create_nesting_test_same_result 117 unverifiable public private public
2011   create_nesting_test_same_result 121 valid public public assembly
2012   create_nesting_test_strips_result_static 125 public public family
2013   create_nesting_test_strips_result_static 129 public public famandassem
2014   create_nesting_test_same_result 133 valid public public famorassem
2015   create_nesting_test_same_result 137 unverifiable public public private
2016   create_nesting_test_same_result 141 valid public public public
2017
2018   I=`expr $I + 1`
2019 done
2020
2021
2022 #ldtoken tests
2023
2024 ./make_ldtoken_test.sh ldtoken_class valid "ldtoken class Example" "call class [mscorlib]System.Type class [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)"
2025
2026 ./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)"
2027
2028 ./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)"
2029
2030 ./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)"
2031
2032 ./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)"
2033
2034 ./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)"
2035