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

Reply via email to