* 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
+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.
* 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
--- /dev/null
+/*
+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
+ }
+}
+
+
--- /dev/null
+/*
+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
+
+ }
+}
+
+
--- /dev/null
+#! /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
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"
+
+