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