Author: kumpera
Date: 2007-12-07 10:40:36 -0500 (Fri, 07 Dec 2007)
New Revision: 90942
Added:
trunk/mono/mono/tests/verifier/make_stelem_test.sh
Modified:
trunk/mono/mono/tests/verifier/ChangeLog
trunk/mono/mono/tests/verifier/make_tests.sh
Log:
2007-12-07 Rodrigo Kumpera <[EMAIL PROTECTED]>
* make_test.sh: added tests for stelem.X
* make_stelem_test.sh: new test generator
Modified: trunk/mono/mono/tests/verifier/ChangeLog
===================================================================
--- trunk/mono/mono/tests/verifier/ChangeLog 2007-12-07 15:29:51 UTC (rev
90941)
+++ trunk/mono/mono/tests/verifier/ChangeLog 2007-12-07 15:40:36 UTC (rev
90942)
@@ -1,3 +1,8 @@
+2007-12-07 Rodrigo Kumpera <[EMAIL PROTECTED]>
+
+ * make_test.sh: added tests for stelem.X
+ * make_stelem_test.sh: new test generator
+
2007-12-06 Rodrigo Kumpera <[EMAIL PROTECTED]>
* make_test.sh: added tests for ldelem
Added: trunk/mono/mono/tests/verifier/make_stelem_test.sh
===================================================================
--- trunk/mono/mono/tests/verifier/make_stelem_test.sh 2007-12-07 15:29:51 UTC
(rev 90941)
+++ trunk/mono/mono/tests/verifier/make_stelem_test.sh 2007-12-07 15:40:36 UTC
(rev 90942)
@@ -0,0 +1,86 @@
+#! /bin/sh
+
+TEST_NAME=$1
+TEST_VALIDITY=$2
+TEST_ARR=$3
+TEST_IDX=$4
+TEST_VAL=$5
+TEST_LD=$6
+
+
+TEST_NAME=${TEST_VALIDITY}_${TEST_NAME}
+TEST_FILE=${TEST_NAME}_generated.il
+echo $TEST_FILE
+sed -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/ARR/${TEST_ARR}/g" -e
"s/IDX/${TEST_IDX}/g" -e "s/VAL/${TEST_VAL}/g" -e "s/LD/${TEST_LD}/g" >
$TEST_FILE <<//EOF
+
+// VALIDITY CIL which breaks the ECMA-335 rules.
+// this CIL should fail verification by a conforming CLI verifier.
+
+.assembly '${TEST_NAME}_generated'
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+
+.class ClassA extends [mscorlib]System.Object
+{
+ .method public hidebysig specialname rtspecialname
+ instance default void .ctor () cil managed
+ {
+ .maxstack 8
+ ldarg.0
+ call instance void object::.ctor()
+ ret
+ }
+}
+
+.class ClassSubA extends ClassA
+{
+ .method public hidebysig specialname rtspecialname
+ instance default void .ctor () cil managed
+ {
+ .maxstack 8
+ ldarg.0
+ call instance void ClassA::.ctor()
+ ret
+ }
+}
+
+.class public auto ansi sealed MyStruct
+ extends [mscorlib]System.ValueType
+{
+ .field public int32 foo
+}
+
+.method public static void foo() cil managed
+{
+ .maxstack 8
+ .locals init (
+ MyStruct l_0 )
+ ldc.i4.1
+ ARR
+ IDX
+ VAL
+ LD // VALIDITY.
+ ret
+}
+
+.method public static int32 Main() cil managed
+{
+ .maxstack 8
+ .entrypoint
+ .try {
+ call void foo ()
+ leave END
+ } catch [mscorlib]System.ArrayTypeMismatchException {
+ pop
+ leave END
+ } catch [mscorlib]System.NullReferenceException {
+ pop
+ leave END
+
+ }
+END: ldc.i4.0
+ ret
+}
+//EOF
Property changes on: trunk/mono/mono/tests/verifier/make_stelem_test.sh
___________________________________________________________________
Name: svn:executable
+ *
Modified: trunk/mono/mono/tests/verifier/make_tests.sh
===================================================================
--- trunk/mono/mono/tests/verifier/make_tests.sh 2007-12-07 15:29:51 UTC
(rev 90941)
+++ trunk/mono/mono/tests/verifier/make_tests.sh 2007-12-07 15:40:36 UTC
(rev 90942)
@@ -2874,3 +2874,218 @@
done
+#stdelem.X
+#TODO add tests for arrays that are not zero-based
+
+I=1
+for ARR in "int8" "bool" "unsigned int8"
+do
+ ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}"
"ldc.i4.0" "ldc.i4.0" "stelem.i1"
+ I=`expr $I + 1`
+done
+
+for ARR in "int16" "char" "unsigned int16" "int32" "unsigned int32" "native
int" "native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
+do
+ ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr
${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i1"
+ I=`expr $I + 1`
+done
+
+
+for ARR in "int16" "char" "unsigned int16"
+do
+ ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}"
"ldc.i4.0" "ldc.i4.0" "stelem.i2"
+ I=`expr $I + 1`
+done
+
+for ARR in "int8" "bool" "unsigned int8" "int32" "unsigned int32" "native int"
"native unsigned int" "int64" "unsigned int64" "float32" "float64" "object"
+do
+ ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr
${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i2"
+ I=`expr $I + 1`
+done
+
+
+for ARR in "int32" "unsigned int32" "native int" "native unsigned int"
+do
+ ./make_stelem_test.sh stelem_base_types_i_${I} valid "newarr ${ARR}"
"ldc.i4.0" "ldc.i4.0\n\tconv.i" "stelem.i4"
+ ./make_stelem_test.sh stelem_base_types_i4_${I} valid "newarr ${ARR}"
"ldc.i4.0" "ldc.i4.0" "stelem.i4"
+ I=`expr $I + 1`
+done
+
+for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16"
"int64" "unsigned int64" "float32" "float64" "object"
+do
+ ./make_stelem_test.sh stelem_base_types_i_${I} unverifiable "newarr
${ARR}" "ldc.i4.0" "ldc.i4.0\n\tconv.i" "stelem.i4"
+ ./make_stelem_test.sh stelem_base_types_i4_${I} unverifiable "newarr
${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i4"
+ I=`expr $I + 1`
+done
+
+
+for ARR in "int64" "unsigned int64"
+do
+ ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}"
"ldc.i4.0" "ldc.i8 0" "stelem.i8"
+ I=`expr $I + 1`
+done
+
+for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16"
"int32" "unsigned int32" "native int" "native unsigned int" "float32" "float64"
"object"
+do
+ ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr
${ARR}" "ldc.i4.0" "ldc.i8 0" "stelem.i8"
+ I=`expr $I + 1`
+done
+
+
+for ARR in "float32"
+do
+ ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}"
"ldc.i4.0" "ldc.r4 0" "stelem.r4"
+ I=`expr $I + 1`
+done
+
+for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16"
"int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned
int64" "float64" "object"
+do
+ ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr
${ARR}" "ldc.i4.0" "ldc.r4 0" "stelem.r4"
+ I=`expr $I + 1`
+done
+
+
+for ARR in "float64"
+do
+ ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}"
"ldc.i4.0" "ldc.r8 0" "stelem.r8"
+ I=`expr $I + 1`
+done
+
+for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16"
"int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned
int64" "float32" "object"
+do
+ ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr
${ARR}" "ldc.i4.0" "ldc.r8 0" "stelem.r8"
+ I=`expr $I + 1`
+done
+
+
+for ARR in "int32" "unsigned int32" "native int" "native unsigned int"
+do
+ ./make_stelem_test.sh stelem_base_types_i_${I} valid "newarr ${ARR}"
"ldc.i4.0" "ldc.i4.0\n\tconv.i" "stelem.i"
+ ./make_stelem_test.sh stelem_base_types_i4_${I} valid "newarr ${ARR}"
"ldc.i4.0" "ldc.i4.0" "stelem.i"
+ I=`expr $I + 1`
+done
+
+for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16"
"int64" "unsigned int64" "float32" "float64" "object"
+do
+ ./make_stelem_test.sh stelem_base_types_i_${I} unverifiable "newarr
${ARR}" "ldc.i4.0" "ldc.i4.0\n\tconv.i" "stelem.i"
+ ./make_stelem_test.sh stelem_base_types_i4_${I} unverifiable "newarr
${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i"
+ I=`expr $I + 1`
+done
+
+
+for ARR in object ClassA ClassSubA
+do
+ ./make_stelem_test.sh stelem_base_types_${I} valid "newarr ${ARR}"
"ldc.i4.0" "newobj instance void ${ARR}::.ctor()" "stelem.ref"
+ I=`expr $I + 1`
+done
+
+for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16"
"int32" "unsigned int32" "native int" "native unsigned int" "int64" "unsigned
int64" "float32" "float64"
+do
+ ./make_stelem_test.sh stelem_base_types_${I} unverifiable "newarr
${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.ref"
+ I=`expr $I + 1`
+done
+
+
+
+./make_stelem_test.sh stelem_native_int_index valid "newarr int32"
"ldc.i4.0\n\tconv.i" "ldc.i4.0" "stelem.i4"
+
+
+#tests with null arrays and values (for ref types)
+
+I=1
+for OP in i1 i2 i4 i
+do
+ ./make_stelem_test.sh stelem_null_array_index_i_${I} valid
"pop\n\tldnull" "ldc.i4.0" "ldc.i4.0" "stelem.${OP}"
+ I=`expr $I + 1`
+done
+
+./make_stelem_test.sh stelem_null_array_index_i8 valid "pop\n\tldnull"
"ldc.i4.0" "ldc.i8 0" "stelem.i8"
+./make_stelem_test.sh stelem_null_array_index_r4 valid "pop\n\tldnull"
"ldc.i4.0" "ldc.r4 0" "stelem.r4"
+./make_stelem_test.sh stelem_null_array_index_r8 valid "pop\n\tldnull"
"ldc.i4.0" "ldc.r8 0" "stelem.r4"
+./make_stelem_test.sh stelem_null_array_index_ref valid "pop\n\tldnull"
"ldc.i4.0" "newobj instance void object::.ctor()" "stelem.ref"
+
+./make_stelem_test.sh stelem_null_value_1 valid "newarr object" "ldc.i4.0"
"ldnull" "stelem.ref"
+./make_stelem_test.sh stelem_null_value_2 valid "newarr string" "ldc.i4.0"
"ldnull" "stelem.ref"
+
+#both need to be reference types
+./make_stelem_test.sh stelem_variance_1 valid "newarr object" "ldc.i4.0"
"newobj instance void ClassA::.ctor()" "stelem.ref"
+./make_stelem_test.sh stelem_variance_2 valid "newarr object" "ldc.i4.0"
"newobj instance void ClassSubA::.ctor()" "stelem.ref"
+./make_stelem_test.sh stelem_variance_3 valid "newarr ClassA" "ldc.i4.0"
"newobj instance void ClassSubA::.ctor()" "stelem.ref"
+./make_stelem_test.sh stelem_variance_4 valid "newarr ClassSubA" "ldc.i4.0"
"newobj instance void ClassA::.ctor()" "stelem.ref"
+./make_stelem_test.sh stelem_variance_5 valid "newarr ClassSubA" "ldc.i4.0"
"newobj instance void object::.ctor()" "stelem.ref"
+./make_stelem_test.sh stelem_variance_6 valid "newarr string" "ldc.i4.0"
"newobj instance void object::.ctor()" "stelem.ref"
+
+./make_stelem_test.sh stelem_value_type_1 unverifiable "newarr object"
"ldc.i4.0" "ldloc.0" "stelem.ref"
+./make_stelem_test.sh stelem_value_type_2 unverifiable "newarr object"
"ldc.i4.0" "ldloca.s 0" "stelem.ref"
+./make_stelem_test.sh stelem_value_type_3 unverifiable "newarr MyStruct"
"ldc.i4.0" "newobj instance void object::.ctor()" "stelem.ref"
+./make_stelem_test.sh stelem_value_type_4 unverifiable "newarr MyStruct"
"ldc.i4.0" "ldloc.0" "stelem.ref"
+./make_stelem_test.sh stelem_value_type_5 unverifiable "newarr MyStruct"
"ldc.i4.0" "ldloca.s 0" "stelem.ref"
+
+
+#bad index values
+I=1
+for IDX in "ldc.i8 0" "ldc.r4 0" "ldc.r8 0" "newobj instance void
ClassA::.ctor()"
+do
+ ./make_stelem_test.sh stelem_bad_index_${I} unverifiable "newarr int32"
"${IDX}" "ldc.i4.0" "stelem.i4"
+ I=`expr $I + 1`
+done
+
+#bad array values
+I=1
+for ARR in "ldc.i4.0" "ldc.i8 0" "ldc.r4 0" "ldc.r8 0" "newobj instance void
ClassA::.ctor()"
+do
+ ./make_stelem_test.sh stelem_bad_index_${I} unverifiable
"pop\n\t${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem.i4"
+ I=`expr $I + 1`
+done
+
+
+#empty stack
+./make_stelem_test.sh stelem_empty_stack_1 invalid "newarr object" "ldc.i4.0"
"pop" "stelem.ref"
+./make_stelem_test.sh stelem_empty_stack_2 invalid "newarr object" "nop"
"ldnull" "stelem.ref"
+./make_stelem_test.sh stelem_empty_stack_3 invalid "newarr object" "nop" "nop"
"stelem.ref"
+./make_stelem_test.sh stelem_empty_stack_4 invalid "pop" "nop" "nop"
"stelem.ref"
+
+
+#test with multi-dim array
+./make_stelem_test.sh stelem_multi_dim_array unverifiable "ldc.i4.0\n\tnewobj
instance void string[,]::.ctor(int32, int32)" "ldc.i4.0" "ldc.i4.0" "stelem.i4"
+
+
+
+
+#adicional tests for stelem
+I=1
+for ARR in "int8" "bool" "unsigned int8" "int16" "char" "unsigned int16"
"int32" "unsigned int32" "native int" "native unsigned int"
+do
+ ./make_stelem_test.sh stelem_token_basic_types_${I} valid "newarr
${ARR}" "ldc.i4.0" "ldc.i4.0" "stelem ${ARR}"
+ I=`expr $I + 1`
+done
+
+./make_stelem_test.sh stelem_token_basic_types_i8 valid "newarr int64"
"ldc.i4.0" "ldc.i8 0" "stelem int64"
+./make_stelem_test.sh stelem_token_basic_types_r4 valid "newarr float32"
"ldc.i4.0" "ldc.r4 0" "stelem float32"
+./make_stelem_test.sh stelem_token_basic_types_r8 valid "newarr float64"
"ldc.i4.0" "ldc.r8 0" "stelem float64"
+
+I=1
+for TYPE in "object" "ClassA" "ClassSubA"
+do
+ ./make_stelem_test.sh stelem_token_simple_ref_${I} valid "newarr
object" "ldc.i4.0" "newobj instance void ${TYPE}::.ctor()" "stelem object"
+ I=`expr $I + 1`
+done
+
+#the array elem type must be a super type of the stelem token
+./make_stelem_test.sh stelem_token_ref_1 valid "newarr object" "ldc.i4.0"
"newobj instance void ClassA::.ctor()" "stelem ClassA"
+./make_stelem_test.sh stelem_token_ref_2 valid "newarr ClassA" "ldc.i4.0"
"newobj instance void ClassA::.ctor()" "stelem ClassA"
+./make_stelem_test.sh stelem_token_ref_3 unverifiable "newarr ClassSubA"
"ldc.i4.0" "newobj instance void ClassA::.ctor()" "stelem ClassA"
+
+#the value type must be assignment compatible with token
+./make_stelem_test.sh stelem_token_ref_4 valid "newarr object" "ldc.i4.0"
"newobj instance void ClassA::.ctor()" "stelem ClassA"
+./make_stelem_test.sh stelem_token_ref_5 valid "newarr object" "ldc.i4.0"
"newobj instance void ClassSubA::.ctor()" "stelem ClassA"
+./make_stelem_test.sh stelem_token_ref_6 unverifiable "newarr object"
"ldc.i4.0" "newobj instance void object::.ctor()" "stelem ClassA"
+
+
+
+
+
+
+
+
+
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches