05347428f77c8cda0bec6a97eb76fc3a36286c3a
[mono.git] / mono / tests / verifier / make_exception_overlap_test.sh
1 #! /bin/sh
2
3 TEST_NAME=$1
4 TEST_VALIDITY=$2
5 TEST_BLOCK_1=$3
6 TEST_BLOCK_2=$4
7 TEST_WITH_FILTER_BLOCK=$5
8 TEST_WITH_FINALLY_BLOCK=$6
9
10 if [ "$TEST_WITH_FILTER_BLOCK" == "yes" ]; then
11         FILTER_BLOCK="
12 FILTER_BLOCK_3:
13         nop
14
15         ldloca 1
16         volatile.
17 AFTER_PREFIX_3:
18         unaligned. 1
19         ldind.i4
20         pop
21
22 FILTER_BLOCK_3_A:
23         stloc.0 
24         nop
25         nop
26         ldc.i4.0
27         endfilter
28 FILTER_BLOCK_3_END:"
29 else
30         FILTER_BLOCK="";
31 fi
32
33 if [ "$TEST_WITH_FINALLY_BLOCK" == "yes" ]; then
34         FINALLY_BLOCK="
35 FINALLY_BLOCK_1:
36         nop
37
38         ldloca 1
39         volatile.
40 AFTER_PREFIX_6:
41         unaligned. 1
42         ldind.i4
43         pop
44
45 FINALLY_BLOCK_1_A:
46         stloc.0 
47         nop
48         nop
49         ldc.i4.0
50         endfinally
51 FINALLY_BLOCK_1_END:"
52 else
53         FINALLY_BLOCK="";
54 fi
55
56
57 TEST_FILE=${TEST_VALIDITY}_${TEST_NAME}_generated.il
58 echo $TEST_FILE
59
60 sed -e "s/EXCEPTION_BLOCK_1/${TEST_BLOCK_1}/g" -e "s/EXCEPTION_BLOCK_2/${TEST_BLOCK_2}/g" > $TEST_FILE <<//EOF
61 // VALIDITY CIL
62
63 .assembly '${TEST_VALIDITY}_${TEST_NAME}_generated'
64 {
65   .hash algorithm 0x00008004
66   .ver  0:0:0:0
67 }
68
69 .method public static int32 Main() cil managed
70 {
71         .entrypoint
72         .maxstack 8
73         .locals init (object _X0, int32 V0)
74  
75         ldloca 1
76         volatile.
77 AFTER_PREFIX_1:
78         unaligned. 1
79         ldind.i4
80         pop
81
82         
83 TRY_BLOCK_1:
84         nop
85 TRY_BLOCK_1_A:
86         nop
87         newobj instance void class [mscorlib]System.Exception::.ctor()
88         throw
89         nop
90         leave END
91 TRY_BLOCK_1_END:
92
93         ldloca 1
94         volatile.
95 AFTER_PREFIX_4:
96         unaligned. 1
97         ldind.i4
98         pop
99         leave END
100
101
102 ${FILTER_BLOCK}
103 ${FINALLY_BLOCK}
104
105
106 CATCH_BLOCK_1:
107         nop
108 CATCH_BLOCK_1_A:
109         stloc.0 
110         nop
111
112         ldloca 1
113         volatile.
114 AFTER_PREFIX_2:
115         unaligned. 1
116         ldind.i4
117         pop
118
119         nop
120         leave END
121 CATCH_BLOCK_1_END:
122
123         ldloca 1
124         volatile.
125 AFTER_PREFIX_5:
126         unaligned. 1
127         ldind.i4
128         pop
129         leave END
130
131 TRY_BLOCK_2:
132         nop
133 TRY_BLOCK_2_A:
134         nop
135         newobj instance void class [mscorlib]System.Exception::.ctor()
136         throw
137         nop
138         leave END
139 TRY_BLOCK_2_END:
140
141
142 CATCH_BLOCK_2:
143         nop
144 CATCH_BLOCK_2_A:
145         stloc.0 
146         nop
147         nop
148         leave END
149 CATCH_BLOCK_2_END:
150
151
152 END:
153         ldc.i4.0
154         ret
155
156         EXCEPTION_BLOCK_1
157         EXCEPTION_BLOCK_2
158 }
159 //EOF