Merge pull request #2869 from BrzVlad/feature-mod-union-opt
[mono.git] / mono / tests / verifier / make_call_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 TEST_OP=$3
11 TEST_LOAD_ARGS=$4
12 TEST_INSTANCE_METHOD=$5
13 TEST_EXTRA_STUFF=$6
14
15 if [ "$TEST_INSTANCE_METHOD" = "instance" ]; then
16         MEMBER_TEST_OP=$TEST_OP
17         MEMBER_TEST_LOAD_ARGS=$TEST_LOAD_ARGS
18         MEMBER_TEST_EXTRA_STUFF=$6
19
20         TEST_LOAD_ARGS="newobj instance void Driver::.ctor()"
21         TEST_OP="call instance void Driver::MemberMain()"
22         TEST_EXTRA_STUFF=""
23 fi
24
25
26
27 TEST_NAME=${TEST_VALIDITY}_${TEST_NAME}
28 TEST_FILE=${TEST_NAME}_generated.il
29 echo $TEST_FILE
30 $SED -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/OPCODE/${TEST_OP}/g" -e "s/LOAD_ARGS/${TEST_LOAD_ARGS}/g" -e "s/MEMBER_OP/${MEMBER_TEST_OP}/g" -e "s/MEMBER_LD_ARGS/${MEMBER_TEST_LOAD_ARGS}/g" -e "s/EXTRA_STUFF/${TEST_EXTRA_STUFF}/g" -e "s/EXTRA/${MEMBER_TEST_EXTRA_STUFF}/g" > $TEST_FILE <<//EOF
31
32 // VALIDITY CIL which breaks the ECMA-335 rules. 
33 // this CIL should fail verification by a conforming CLI verifier.
34
35 .assembly '${TEST_NAME}_generated'
36 {
37   .hash algorithm 0x00008004
38   .ver  0:0:0:0
39 }
40
41 .assembly extern mscorlib
42 {
43   .ver 1:0:5000:0
44   .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
45 }
46
47 .method public static void GlobalMethod1() cil managed
48 {
49         ret
50 }
51
52 .method public static void GlobalMethod2(int32 a) cil managed
53 {
54         ret
55 }
56
57 .class ClassA extends [mscorlib]System.Object
58 {
59         .method public hidebysig  specialname rtspecialname instance default void .ctor () cil managed 
60         {
61                 .maxstack 8
62                 ldarg.0 
63                 call instance void object::.ctor()
64                 ret 
65         }
66
67         .method public  void Method1() cil managed
68         {
69                 ret
70         }
71
72         .method public  void Method2(int32 a) cil managed
73         {
74                 ret
75         }
76
77         .method public virtual void VirtMethod() cil managed
78         {
79                 ret
80         }
81 }
82
83 .class ClassB extends [mscorlib]System.Object
84 {
85         .method public hidebysig  specialname rtspecialname instance default void .ctor () cil managed 
86         {
87                 .maxstack 8
88                 ldarg.0 
89                 call instance void object::.ctor()
90                 ret 
91         }
92
93 }
94
95 .class ClassC extends ClassA
96 {
97         .method public hidebysig  specialname rtspecialname instance default void .ctor () cil managed 
98         {
99                 .maxstack 8
100                 ldarg.0 
101                 call instance void ClassA::.ctor()
102                 ret 
103         }
104
105         .method public virtual final void VirtMethod() cil managed
106         {
107                 ret
108         }
109 }
110
111 .class interface abstract InterfaceA
112 {
113         .method public abstract virtual instance void AbsMethod () cil managed 
114         {
115         }
116 }
117
118 .class ImplIfaceA extends [mscorlib]System.Object implements InterfaceA
119 {
120         .method public hidebysig  specialname rtspecialname instance default void .ctor () cil managed 
121         {
122                 .maxstack 8
123                 ldarg.0 
124                 call instance void object::.ctor()
125                 ret 
126         }
127
128         .method public virtual instance void AbsMethod () cil managed 
129         {
130                 ret
131         }
132 }
133
134 .class sealed MyValueType extends [mscorlib]System.ValueType
135 {
136         .field private int32 v
137
138         .method public instance void Method ()
139         {
140                 ret
141         }
142
143         .method public virtual instance int32 GetHashCode()
144         {
145                 ldc.i4.0
146                 ret
147         }
148 }
149
150
151 .class BaseClass extends [mscorlib]System.Object
152 {
153         .method public hidebysig  specialname rtspecialname instance default void .ctor () cil managed 
154         {
155                 .maxstack 8
156                 ldarg.0 
157                 call instance void object::.ctor()
158                 ret 
159         }
160
161
162         .method public virtual void VirtMethod ()
163         {
164                 ret
165         }
166 }
167
168
169 .class Driver extends BaseClass
170 {
171
172         .method public virtual void VirtMethod ()
173         {
174                 ret
175         }
176
177         .method public hidebysig  specialname rtspecialname instance default void .ctor () cil managed 
178         {
179                 .maxstack 8
180                 ldarg.0 
181                 call instance void BaseClass::.ctor()
182                 ret 
183         }
184
185         .method public void MemberMain() cil managed
186         {
187                 .maxstack 8
188                 .locals init (MyValueType V_0)
189
190                 MEMBER_LD_ARGS
191                 MEMBER_OP
192                 EXTRA
193
194                 ret
195         }
196
197         .method public static void Main() cil managed
198         {
199                 .entrypoint
200                 .maxstack 8
201                 .locals init (MyValueType V_0)
202
203                 .try {
204                         LOAD_ARGS
205                         OPCODE
206                         EXTRA_STUFF
207                         leave END
208                 } catch [mscorlib]System.NullReferenceException {
209                         leave END
210                 }
211
212 END:
213                 ret
214         }
215
216 }
217 //EOF