Merge pull request #2810 from kumpera/fix_hazard_free
[mono.git] / mono / tests / verifier / make_exception_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
11 # Only 1 TEST_OP variable should be set.
12 TEST_OP1=$3
13 TEST_OP2=$4
14 TEST_OP3=$5
15 TEST_OP4=$6
16 TEST_OP5=$7
17
18 TEST_FILE=${TEST_VALIDITY}_exception_branch_${TEST_NAME}_generated.il
19 echo $TEST_FILE
20 $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
21 // ${TEST_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 .method public static int32 Main() cil managed
31 {
32         .entrypoint
33         .maxstack 8
34         .locals init (int32 V0,
35                 int32 V1)
36
37         OPCODE1
38         .try
39         {
40                 nop
41 branch_target1:
42                 OPCODE2
43                 leave branch_target5
44         }
45         catch [mscorlib]System.Exception 
46         {
47                 pop
48 branch_target2:
49                 OPCODE3
50                 leave branch_target5
51         }
52         .try
53         {
54                 nop
55                 leave branch_target5
56         }
57         finally
58         {
59                 nop
60 branch_target3:
61                 OPCODE4
62                 endfinally
63         }
64         .try 
65         {
66                 nop
67                 leave branch_target5
68         }
69         filter
70         {
71                 pop
72                 ldc.i4.1
73                 endfilter
74         }
75
76         {
77                 pop
78                 nop
79 branch_target4:
80                 OPCODE5
81                 nop
82                 leave branch_target5
83         }
84         nop
85         branch_target5:
86         ldc.i4.0
87         ret
88 }
89 //EOF