2007-10-26 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mono / tests / verifier / make_exception_branch_test.sh
1 #! /bin/sh
2
3 TEST_NAME=$1
4
5 # Only 1 TEST_OP variable should be set.
6
7 TEST_OP1=$2
8 TEST_OP2=$3
9 TEST_OP3=$4
10 TEST_OP4=$5
11 TEST_OP5=$6
12
13 TEST_FILE=invalid_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 // invalid 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 2
29         OPCODE1
30         .try
31         {
32                 nop
33 branch_target1:
34                 OPCODE2
35                 leave branch_target5
36         }
37         catch [mscorlib]System.Exception 
38         {
39                 pop
40 branch_target2:
41                 OPCODE3
42                 leave branch_target5
43         }
44         .try
45         {
46                 nop
47                 leave branch_target5
48         }
49         finally
50         {
51                 nop
52 branch_target3:
53                 OPCODE4
54                 endfinally
55         }
56         .try 
57         {
58                 nop
59                 leave branch_target5
60         }
61         filter
62         {
63                 pop
64                 ldc.i4.1
65                 endfilter
66         }
67
68         {
69                 nop
70 branch_target4:
71                 OPCODE5
72                 nop
73                 leave branch_target5
74         }
75         nop
76         branch_target5:
77         ldc.i4.0
78         ret
79 }
80 //EOF