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