2008-01-17 Rodrigo Kumpera <rkumpera@novell.com>
authorRodrigo Kumpera <kumpera@gmail.com>
Thu, 17 Jan 2008 16:36:24 +0000 (16:36 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Thu, 17 Jan 2008 16:36:24 +0000 (16:36 -0000)
* invalid_initobj_invalid_token_out_of_bounds.il: tests for initobj.

* invalid_initobj_invalid_token_type.il: same.

* make_initobj_test.sh: test generator for initobj.

* make_tests.sh: added tests for initobj.

svn path=/trunk/mono/; revision=93170

mono/tests/verifier/ChangeLog
mono/tests/verifier/invalid_initobj_invalid_token_out_of_bounds.il [new file with mode: 0755]
mono/tests/verifier/invalid_initobj_invalid_token_type.il [new file with mode: 0755]
mono/tests/verifier/make_initobj_test.sh [new file with mode: 0755]
mono/tests/verifier/make_tests.sh

index 6027803bd7528dc2adae1a642aad065b0309664e..3c412c40b3b3eadedba6e97ae19dfc5bb5a2068e 100644 (file)
@@ -1,3 +1,13 @@
+2008-01-17 Rodrigo Kumpera <rkumpera@novell.com>
+
+       * invalid_initobj_invalid_token_out_of_bounds.il: tests for initobj.
+
+       * invalid_initobj_invalid_token_type.il: same.
+
+       * make_initobj_test.sh: test generator for initobj.
+
+       * make_tests.sh: added tests for initobj.
+
 2008-01-11 Rodrigo Kumpera <rkumpera@novell.com>
 
        * unverifiable_ldfld_reference_type_by_ref.il: new test for ldfld.
@@ -9,7 +19,7 @@
        * make_stobj_test.sh: new test generator.
 
        * make_test.sh: added new tests for stobj.
-
+       
 2008-01-10 Rodrigo Kumpera <rkumpera@novell.com>
 
        * valid_ldftn_method_spec_token.il: new test
diff --git a/mono/tests/verifier/invalid_initobj_invalid_token_out_of_bounds.il b/mono/tests/verifier/invalid_initobj_invalid_token_out_of_bounds.il
new file mode 100755 (executable)
index 0000000..1dbed2d
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+This test using a token that overflows the typedef table
+*/
+.assembly extern mscorlib
+{
+  .ver 2:0:0:0
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
+}
+.assembly 'initobj_token_out_of_range'
+{
+  .hash algorithm 0x00008004
+  .ver  0:0:0:0
+}
+.module ld_type.exe
+
+.class public auto ansi beforefieldinit Driver
+        extends [mscorlib]System.Object
+{
+        .method public static void Method ()
+        {
+                ret
+        }
+
+        .method public virtual void VirtMethod ()
+        {
+                ret
+        }
+
+        .method public static int32 Main ()
+        {
+                .entrypoint
+                .maxstack 2
+                .locals init (int32& v0, int32 v1)
+               ldloca 1
+               stloc.0
+               ldloc.0
+               nop
+               .emitbyte 0xFE
+               .emitbyte 0x15
+               .emitbyte 0xAA
+               .emitbyte 0xAA
+               .emitbyte 0x00
+               .emitbyte 0x02
+               ldc.i4.0
+               ret
+        }
+}
+
+
diff --git a/mono/tests/verifier/invalid_initobj_invalid_token_type.il b/mono/tests/verifier/invalid_initobj_invalid_token_type.il
new file mode 100755 (executable)
index 0000000..aaadade
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+This test using a token for the methoddef table
+*/
+.assembly extern mscorlib
+{
+  .ver 2:0:0:0
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
+}
+.assembly 'initobj_bad_token'
+{
+  .hash algorithm 0x00008004
+  .ver  0:0:0:0
+}
+.module ld_type.exe
+
+.class public auto ansi beforefieldinit Driver
+        extends [mscorlib]System.Object
+{
+        .method public static void Method ()
+        {
+                ret
+        }
+
+        .method public virtual void VirtMethod ()
+        {
+                ret
+        }
+
+        .method public static int32 Main ()
+        {
+                .entrypoint
+                .maxstack 2
+                .locals init (int32& v0, int32 v1)
+               ldloca 1
+               stloc.0
+               ldloc.0
+               nop
+               .emitbyte 0xFE
+               .emitbyte 0x15
+               .emitbyte 0x01
+               .emitbyte 0x00
+               .emitbyte 0x00
+               .emitbyte 0x06
+               ldc.i4.0
+               ret
+
+        }
+}
+
+
diff --git a/mono/tests/verifier/make_initobj_test.sh b/mono/tests/verifier/make_initobj_test.sh
new file mode 100755 (executable)
index 0000000..08c57c2
--- /dev/null
@@ -0,0 +1,87 @@
+#! /bin/sh
+
+TEST_NAME=$1
+TEST_VALIDITY=$2
+TEST_TYPE1=$3
+TEST_TYPE2=$4
+TEST_EXTRA=$5
+ZZ=`echo $TEST_TYPE1 | grep "\&"`
+T1_REF=$?
+
+LOCAL_INIT="";
+if [ "$T1_REF" == "0" ]; then
+       T1_NO_REF=`echo $TEST_TYPE1 | cut -d '\' -f 1`
+       INIT_LOCS=", $T1_NO_REF V_0"
+       INIT_IL="ldloca.s 1\n\tstloc.0"
+fi
+
+TEST_FILE=`echo ${TEST_VALIDITY}_${TEST_NAME} | sed -e 's/ /_/g' -e 's/\./_/g' -e 's/&/mp/g' -e 's/\[/_/g' -e 's/\]/_/g'`_generated.il
+echo $TEST_FILE
+sed -e "s/TYPE1/${TEST_TYPE1}/g" -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/TYPE2/${TEST_TYPE2}/g" -e "s/INIT_LOCS/${INIT_LOCS}/g" -e "s/INIT_IL/${INIT_IL}/g" -e "s/EXTRA/${TEST_EXTRA}/g"> $TEST_FILE <<//EOF
+
+.assembly extern mscorlib
+{
+  .ver 2:0:0:0
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+}
+
+.assembly 'initobj_test'
+{
+  .hash algorithm 0x00008004
+  .ver  0:0:0:0
+}
+
+.module ldobj.exe
+
+
+.class Class extends [mscorlib]System.Object
+{
+    .field public int32 valid
+}
+
+.class public Template\`1<T>
+       extends [mscorlib]System.Object
+{
+}
+
+.class sealed public StructTemplate\`1<T>
+       extends [mscorlib]System.ValueType
+{
+       .field public !0 t
+}
+
+.class sealed public StructTemplate2\`1<T>
+       extends [mscorlib]System.ValueType
+{
+       .field public !0 t
+}
+
+
+.class public auto ansi sealed MyStruct
+       extends [mscorlib]System.ValueType
+{
+       .field public int32 foo
+}
+
+
+.class public auto ansi sealed MyStruct2
+       extends [mscorlib]System.ValueType
+{
+       .field public int32 foo
+}
+
+.method public static int32 Main ()
+{
+       .entrypoint
+       .maxstack 8
+       .locals init (TYPE1 V_0 INIT_LOCS)
+       INIT_IL
+       ldloc.0
+       EXTRA
+       initobj TYPE2 // VALIDITY
+
+       ldc.i4.0
+       ret 
+}
+
+//EOF
index 06ea052078e033bf433efdd2c4b1325705748966..6a7d5d767c5e33b8d760487e0fcfdd6279ad4b48 100755 (executable)
@@ -3699,3 +3699,57 @@ do
 done
 
 
+
+
+#initobj
+I=1
+for TYPE in int32 int64 float32 float64 object string MyStruct Class "valuetype StructTemplate\`1<object>" "native int"
+do
+       ./make_initobj_test.sh initobj_good_types_${I} valid "${TYPE}\&" "${TYPE}"
+       I=`expr $I + 1`
+done
+
+#pointers
+I=1
+for TYPE in "native int" "int32*"
+do
+       ./make_initobj_test.sh initobj_pointer_like_types_${I} unverifiable "${TYPE}" "${TYPE}"
+       I=`expr $I + 1`
+done
+
+#bad dest
+I=1
+for TYPE in int32 int64 float32 float64 string MyStruct typedref
+do
+       ./make_initobj_test.sh initobj_wrong_on_stack_types_${I} unverifiable "${TYPE}" "${TYPE}"
+       I=`expr $I + 1`
+done
+
+
+#invalid token
+I=1
+for TYPE in "int32\&" void
+do
+       ./make_initobj_test.sh initobj_bad_token_type_${I} invalid "int32\&" "${TYPE}"
+       I=`expr $I + 1`
+done
+
+#bad token
+I=1
+for TYPE in int64 float32 float64 object string MyStruct Class "valuetype StructTemplate\`1<object>"
+do
+       ./make_initobj_test.sh initobj_wrong_type_on_stack_${I} unverifiable "int32\&" "${TYPE}"
+       I=`expr $I + 1`
+done
+
+#type and token are compatible
+./make_initobj_test.sh initobj_compatible_type_on_stack_1 valid "int32\&" "native int"
+./make_initobj_test.sh initobj_compatible_type_on_stack_2 strict "object\&" "string"
+./make_initobj_test.sh initobj_compatible_type_on_stack_3 unverifiable "string\&" "object"
+
+./make_initobj_test.sh initobj_stack_underflow invalid "int32\&" "int32" "pop"
+
+./make_initobj_test.sh initobj_null_literal unverifiable "int32\&" "int32" "pop\n\tldnull"
+./make_initobj_test.sh initobj_boxed_value unverifiable "int32\&" "int32" "pop\n\tldc.i4.0\n\tbox int32"
+
+