2008-01-17 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mono / tests / verifier / make_exception_branch_test.sh
1 #! /bin/sh
2
3 TEST_NAME=$1
4 TEST_VALIDITY=$2
5
6 # Only 1 TEST_OP variable should be set.
7 TEST_OP1=$3
8 TEST_OP2=$4
9 TEST_OP3=$5
10 TEST_OP4=$6
11 TEST_OP5=$7
12
13 TEST_FILE=${TEST_VALIDITY}_exception_branch_${TEST_NAME}_generated.il
14 echo $TEST_FILE
15 sed -e "s/OPCODE1/${TEST_OP1}/g" -e "s/OPCODE2/${TEST_OP2}/g" -e "s/OPCODE3/${TEST_OP3}/g" -e "s/OPCODE4/${TEST_OP4}/g" -e "s/OPCODE5/${TEST_OP5}/g" > $TEST_FILE <<//EOF
16 // ${TEST_VALIDITY} CIL which breaks the ECMA-335 rules. 
17 // This CIL should fail verification by a conforming CLI verifier.
18
19 .assembly '${TEST_NAME}_generated'
20 {
21   .hash algorithm 0x00008004
22   .ver  0:0:0:0
23 }
24
25 .method public static int32 Main() cil managed
26 {
27         .entrypoint
28         .maxstack 8
29         .locals init (int32 V0,
30                 int32 V1)
31
32         OPCODE1
33         .try
34         {
35                 nop
36 branch_target1:
37                 OPCODE2
38                 leave branch_target5
39         }
40         catch [mscorlib]System.Exception 
41         {
42                 pop
43 branch_target2:
44                 OPCODE3
45                 leave branch_target5
46         }
47         .try
48         {
49                 nop
50                 leave branch_target5
51         }
52         finally
53         {
54                 nop
55 branch_target3:
56                 OPCODE4
57                 endfinally
58         }
59         .try 
60         {
61                 nop
62                 leave branch_target5
63         }
64         filter
65         {
66                 pop
67                 ldc.i4.1
68                 endfilter
69         }
70
71         {
72                 pop
73                 nop
74 branch_target4:
75                 OPCODE5
76                 nop
77                 leave branch_target5
78         }
79         nop
80         branch_target5:
81         ldc.i4.0
82         ret
83 }
84 //EOF