Author: kumpera
Date: 2008-01-11 09:30:05 -0500 (Fri, 11 Jan 2008)
New Revision: 92668
Added:
trunk/mono/mono/tests/verifier/invalid_stojb_bad_token.il
trunk/mono/mono/tests/verifier/invalid_stojb_token_out_of_bounds.il
trunk/mono/mono/tests/verifier/make_stobj_test.sh
trunk/mono/mono/tests/verifier/unverifiable_ldfld_reference_type_by_ref.il
Modified:
trunk/mono/mono/tests/verifier/ChangeLog
trunk/mono/mono/tests/verifier/make_tests.sh
Log:
2008-01-11 Rodrigo Kumpera <[EMAIL PROTECTED]>
* unverifiable_ldfld_reference_type_by_ref.il: new test for ldfld.
* invalid_stojb_bad_token.il: test for bad ldobj token.
* invalid_stojb_token_out_of_bounds.il: same.
* make_stobj_test.sh: new test generator.
* make_test.sh: added new tests for stobj.
Modified: trunk/mono/mono/tests/verifier/ChangeLog
===================================================================
--- trunk/mono/mono/tests/verifier/ChangeLog 2008-01-11 13:04:31 UTC (rev
92667)
+++ trunk/mono/mono/tests/verifier/ChangeLog 2008-01-11 14:30:05 UTC (rev
92668)
@@ -1,3 +1,15 @@
+2008-01-11 Rodrigo Kumpera <[EMAIL PROTECTED]>
+
+ * unverifiable_ldfld_reference_type_by_ref.il: new test for ldfld.
+
+ * invalid_stojb_bad_token.il: test for bad ldobj token.
+
+ * invalid_stojb_token_out_of_bounds.il: same.
+
+ * make_stobj_test.sh: new test generator.
+
+ * make_test.sh: added new tests for stobj.
+
2008-01-10 Rodrigo Kumpera <[EMAIL PROTECTED]>
* valid_ldftn_method_spec_token.il: new test
Added: trunk/mono/mono/tests/verifier/invalid_stojb_bad_token.il
===================================================================
--- trunk/mono/mono/tests/verifier/invalid_stojb_bad_token.il 2008-01-11
13:04:31 UTC (rev 92667)
+++ trunk/mono/mono/tests/verifier/invalid_stojb_bad_token.il 2008-01-11
14:30:05 UTC (rev 92668)
@@ -0,0 +1,76 @@
+
+.assembly extern mscorlib
+{
+ .ver 2:0:0:0
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+}
+
+.assembly 'ldobj_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 (int32 V_0, int32& V_1 , int32 V_2)
+
+ ldloca.s 2
+ stloc.1
+
+ ldloc.1
+ ldloc.0
+
+ .emitbyte 0x81
+ .emitbyte 0x01
+ .emitbyte 0x00
+ .emitbyte 0x00
+ .emitbyte 0x06
+
+
+
+ ldc.i4.0
+ ret
+}
+
Added: trunk/mono/mono/tests/verifier/invalid_stojb_token_out_of_bounds.il
===================================================================
--- trunk/mono/mono/tests/verifier/invalid_stojb_token_out_of_bounds.il
2008-01-11 13:04:31 UTC (rev 92667)
+++ trunk/mono/mono/tests/verifier/invalid_stojb_token_out_of_bounds.il
2008-01-11 14:30:05 UTC (rev 92668)
@@ -0,0 +1,76 @@
+
+.assembly extern mscorlib
+{
+ .ver 2:0:0:0
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+}
+
+.assembly 'ldobj_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 (int32 V_0, int32& V_1 , int32 V_2)
+
+ ldloca.s 2
+ stloc.1
+
+ ldloc.1
+ ldloc.0
+
+ .emitbyte 0x81
+ .emitbyte 0xAA
+ .emitbyte 0xAA
+ .emitbyte 0x00
+ .emitbyte 0x02
+
+
+
+ ldc.i4.0
+ ret
+}
+
Added: trunk/mono/mono/tests/verifier/make_stobj_test.sh
===================================================================
--- trunk/mono/mono/tests/verifier/make_stobj_test.sh 2008-01-11 13:04:31 UTC
(rev 92667)
+++ trunk/mono/mono/tests/verifier/make_stobj_test.sh 2008-01-11 14:30:05 UTC
(rev 92668)
@@ -0,0 +1,95 @@
+#! /bin/sh
+
+TEST_NAME=$1
+TEST_VALIDITY=$2
+TEST_TYPE1=$3
+TEST_TYPE2=$4
+TEST_TYPE3=$5
+TEST_EXTRA_OPS=$6
+
+ZZ=`echo $TEST_TYPE2 | grep "\&"`
+T2_REF=$?
+
+LOCAL_INIT="";
+if [ "$T2_REF" == "0" ]; then
+ T2_NO_REF=`echo $TEST_TYPE2 | cut -d '\' -f 1`
+ INIT_LOCS=", $T2_NO_REF V_2"
+ INIT_IL="ldloca.s 2\n\tstloc.1"
+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/EXTRA_OPS/${TEST_EXTRA_OPS}/g" -e "s/TYPE1/${TEST_TYPE1}/g" -e
"s/VALIDITY/${TEST_VALIDITY}/g" -e "s/TYPE2/${TEST_TYPE2}/g" -e
"s/TYPE3/${TEST_TYPE3}/g" -e "s/INIT_LOCS/${INIT_LOCS}/g" -e
"s/INIT_IL/${INIT_IL}/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 'stobj_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, TYPE2 V_1 INIT_LOCS)
+
+ INIT_IL
+
+ ldloc.1
+ ldloc.0
+
+ EXTRA_OPS
+
+ stobj TYPE3 // VALIDITY
+
+
+ ldc.i4.0
+ ret
+}
+
+//EOF
Property changes on: trunk/mono/mono/tests/verifier/make_stobj_test.sh
___________________________________________________________________
Name: svn:executable
+ *
Modified: trunk/mono/mono/tests/verifier/make_tests.sh
===================================================================
--- trunk/mono/mono/tests/verifier/make_tests.sh 2008-01-11 13:04:31 UTC
(rev 92667)
+++ trunk/mono/mono/tests/verifier/make_tests.sh 2008-01-11 14:30:05 UTC
(rev 92668)
@@ -3629,3 +3629,73 @@
+#stobj
+#bad src
+I=1
+for TYPE in "int32" "int64" "float32" "float64" Class MyStruct string object
"int32[]" "int32[,]" "native int"
+do
+ ./make_stobj_test.sh stobj_simple_${I} valid "$TYPE" "$TYPE\&" "$TYPE"
+ I=`expr $I + 1`
+done
+
+
+for TYPE in "int32*" "typedref" "method int32 *(int32)"
+do
+ ./make_stobj_test.sh stobj_simple_${I} unverifiable "$TYPE" "$TYPE\&"
"$TYPE"
+ I=`expr $I + 1`
+done
+
+for TYPE in "int32\&" "void"
+do
+ ./make_stobj_test.sh stobj_simple_${I} invalid "$TYPE" "$TYPE\&"
"$TYPE"
+ I=`expr $I + 1`
+done
+
+#src should not be ptr or byref
+I=1
+for TYPE in "int32\&" "int32*" "typedref"
+do
+ ./make_stobj_test.sh stobj_bad_src_${I} unverifiable "$TYPE" "int32\&"
"int32"
+ I=`expr $I + 1`
+done
+
+#dest type is not a managed pointer
+I=1
+for TYPE in "int32" "int64" "float32" "float64" Class MyStruct string object
"int32[]" "int32[,]" "native int"
+do
+ ./make_stobj_test.sh stobj_dest_not_managed_pointer_${I} unverifiable
"$TYPE" "$TYPE" "$TYPE"
+ I=`expr $I + 1`
+done
+
+#src is compat to dest
+I=1
+for TYPE in "int8" "unsigned int8" "bool" "int16" "unsigned int16" "char"
"int32" "unsigned int32" "native int" "native unsigned int"
+do
+ ./make_stobj_test.sh stobj_src_compat_to_token_${I} valid "$TYPE"
"int32\&" "int32"
+ I=`expr $I + 1`
+done
+
+for TYPE in "int64" "unsigned int64" "float32" "float64" string object
+do
+ ./make_stobj_test.sh stobj_src_compat_to_token_${I} unverifiable
"$TYPE" "int32\&" "int32"
+ I=`expr $I + 1`
+done
+
+for TYPE in string object Class
+do
+ ./make_stobj_test.sh stobj_src_compat_to_token_${I} valid "$TYPE"
"object\&" "object"
+ I=`expr $I + 1`
+done
+
+./make_stobj_test.sh stobj_src_compat_to_token_boxed_vt valid "int32"
"object\&" "object" "box int32"
+./make_stobj_test.sh stobj_src_compat_to_token_null_literal valid "object"
"object\&" "object" "pop\n\tldnull"
+
+
+#token type subtype of dest_type
+for TYPE in string object Class "int32[]" "int32[,]"
+do
+ ./make_stobj_test.sh stobj_token_subtype_of_dest_${I} valid "$TYPE"
"object\&" "$TYPE"
+ I=`expr $I + 1`
+done
+
+
Added:
trunk/mono/mono/tests/verifier/unverifiable_ldfld_reference_type_by_ref.il
===================================================================
--- trunk/mono/mono/tests/verifier/unverifiable_ldfld_reference_type_by_ref.il
2008-01-11 13:04:31 UTC (rev 92667)
+++ trunk/mono/mono/tests/verifier/unverifiable_ldfld_reference_type_by_ref.il
2008-01-11 14:30:05 UTC (rev 92668)
@@ -0,0 +1,31 @@
+
+// valid CIL which breaks the ECMA-335 rules.
+// this CIL should fail verification by a conforming CLI verifier.
+
+.assembly 'valid_bin_cgt_un_null_value_generated'
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+
+.class private sequential ansi sealed beforefieldinit MyVT
+ extends [mscorlib]System.Object
+{
+ .field public [mscorlib]System.Decimal Value
+}
+
+
+.method public static int32 Main() cil managed
+{
+ .entrypoint
+ .maxstack 8
+ .locals init (MyVT V_0)
+
+ ldloca 0
+
+ ldfld valuetype [mscorlib]System.Decimal MyVT::Value
+ pop
+
+ ldc.i4.0
+ ret
+}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches