Merge branch 'sgen-disable-gc'
[mono.git] / mono / tests / verifier / make_branch_test.sh
1 #! /bin/sh
2
3 SED="sed"
4 if [ `which gsed 2> /dev/null` ] ; then 
5         SED="gsed"
6 fi
7
8 TEST_NAME=$1
9 TEST_VALIDITY=$2
10 TEST_POS=$3
11 TEST_OP=$4
12 TEST_FIN=$5
13
14 if [ "$TEST_FIN" == "" ]; then
15         TEST_FIN="finally";
16 fi
17
18 declare BRANCH_${TEST_POS}="$TEST_OP"
19
20 TEST_NAME=${TEST_VALIDITY}_${TEST_NAME}
21 TEST_FILE=${TEST_NAME}_generated.il
22 echo $TEST_FILE
23
24 $SED -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/OPCODE/${TEST_OP}/g" -e "s/FINALLY/${TEST_FIN}/g" > $TEST_FILE <<//EOF
25
26 // VALIDITY CIL which breaks the ECMA-335 rules. 
27 // this CIL should fail verification by a conforming CLI verifier.
28
29 .assembly '${TEST_NAME}_generated'
30 {
31   .hash algorithm 0x00008004
32   .ver  0:0:0:0
33 }
34
35 .class ClassA
36         extends [mscorlib]System.Object
37 {
38 }
39
40 .class sealed MyValueType
41         extends [mscorlib]System.ValueType
42 {
43         .field private int32 v
44 }
45
46 .class public Template\`1<T>
47         extends [mscorlib]System.Object
48 {
49 }
50
51 .class sealed public ValueTypeTemplate\`1<T>
52         extends [mscorlib]System.ValueType
53 {
54         .field private int32 v
55 }
56
57 .method public static int32 Main() cil managed
58 {
59         .entrypoint
60         .maxstack 8
61         .locals init ( int32 BLA)
62  
63         ${BRANCH_1}
64         ldc.i4 0x7FFFFFFF
65         pop
66
67         ldloca 0
68         unaligned. 1
69 AFTER_FIRST_PREFIX:
70         volatile.
71 AFTER_SECOND_PREFIX:
72         ldind.i4
73         pop
74
75
76 BLOCK_1:
77         nop
78         .try {
79                 nop
80                 ${BRANCH_2}
81                 nop
82 IN_TRY:
83 BLOCK_2:
84                 leave END
85         } catch [mscorlib]System.Exception {
86                 pop
87                 ${BRANCH_3}
88                 nop
89 IN_CATCH:
90 BLOCK_3:
91                 nop
92                 leave END
93         }
94
95         .try {
96                 leave END
97         } FINALLY {
98                 nop
99                 ${BRANCH_4}
100                 nop
101 IN_FINALLY:
102 BLOCK_4:
103                 nop
104                 endfinally
105         }
106
107         .try {
108                 leave END
109         } filter {
110                 pop
111                 nop
112                 ${BRANCH_5}
113                 nop
114 IN_FILTER:
115 BLOCK_5:
116                 nop
117                 ldc.i4.0
118                 endfilter
119         }
120         {
121                 pop
122                 nop
123                 ${BRANCH_6}
124                 nop
125 IN_HANDLER:
126 BLOCK_6:
127                 nop
128                 leave END
129         }
130
131 END:
132         ldc.i4.0
133         ret
134 }
135 //EOF