Merge branch 'bugfix-main-thread-root'
[mono.git] / mono / tests / verifier / make_obj_store_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_TYPE1=$4
12 TEST_TYPE2=$5
13 TEST_CREATE_FIELD=$6
14
15 TEST_NAME=${TEST_VALIDITY}_${TEST_NAME}
16 TEST_FILE=${TEST_NAME}_generated.il
17 echo $TEST_FILE
18 TEST_TYPE1=`echo $TEST_TYPE1 | $SED -s 's/&/\\\&/'`
19 TEST_TYPE2=`echo $TEST_TYPE2 | $SED -s 's/&/\\\&/'`
20
21 if [ "$TEST_CREATE_FIELD" == "no" ]; then
22         CLASS_FIELDS="";
23 else
24         CLASS_FIELDS=".field public ${TEST_TYPE1} fld\n .field public static ${TEST_TYPE1} sfld";
25 fi
26
27 $SED -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/CLASS_FIELDS/${CLASS_FIELDS}/g" -e "s/OPCODE/${TEST_OP}/g" -e "s/TYPE1/${TEST_TYPE1}/g" -e "s/TYPE2/${TEST_TYPE2}/g" > $TEST_FILE <<//EOF
28
29 .assembly '${TEST_NAME}_generated'
30 {
31   .hash algorithm 0x00008004
32   .ver  0:0:0:0
33 }
34
35 // VALIDITY CIL which breaks the ECMA-335 rules. 
36 // this CIL should fail verification by a conforming CLI verifier.
37
38 .assembly extern mscorlib
39 {
40   .ver 1:0:5000:0
41   .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
42 }
43
44 .class ClassA extends [mscorlib]System.Object
45 {
46 }
47
48 .class ClassB extends [mscorlib]System.Object
49 {
50 }
51
52 .class interface abstract InterfaceA
53 {
54 }
55
56 .class interface abstract InterfaceB
57 {
58 }
59
60 .class sealed ValueType extends [mscorlib]System.ValueType
61 {
62         .field private int32 v
63 }
64
65 .class Class extends [mscorlib]System.Object
66 {
67         CLASS_FIELDS
68
69         .method public hidebysig specialname rtspecialname instance default void .ctor () cil managed
70         {
71                 .maxstack 8
72                 ldarg.0 
73                 call instance void object::.ctor()
74                 ret
75         }
76
77     .method public void Method(TYPE1) cil managed
78     {
79         ret
80     }
81 }
82
83 .method public static int32 Main() cil managed
84 {
85         .entrypoint
86         .maxstack 2
87         .locals init (
88                 class Class V_0,
89                 TYPE2 V_1
90         )
91         newobj instance void class Class::.ctor()
92         ldloc.1
93         OPCODE // VALIDITY, TYPE2 cannot be stored in TYPE1.
94         ldc.i4.0
95         ret
96 }
97 //EOF