2007-10-04 Rodrigo Kumpera <rkumpera@novell.com>
authorRodrigo Kumpera <kumpera@gmail.com>
Thu, 4 Oct 2007 21:22:18 +0000 (21:22 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Thu, 4 Oct 2007 21:22:18 +0000 (21:22 -0000)
* make_store_indirect_test.sh: added, generate tests for stind.X.
* make_tests.sh: added the new tests for ldind.X.

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

mono/tests/verifier/ChangeLog
mono/tests/verifier/make_store_indirect_test.sh [new file with mode: 0755]
mono/tests/verifier/make_tests.sh

index 4b904c2c2ec641b077c718d5f329dcc991a66c35..be4d7d35ff27c53ca6f46b00ebcca35c674ce76b 100644 (file)
@@ -1,3 +1,8 @@
+2007-10-04 Rodrigo Kumpera <rkumpera@novell.com>
+
+       * make_store_indirect_test.sh: added, generate tests for stind.X.
+       * make_tests.sh: added the new tests for ldind.X.
+
 2007-10-02 Rodrigo Kumpera <rkumpera@novell.com>
 
        * make_tests.sh: added the new tests for ops mixing Int32 and IntPtr, disabled
diff --git a/mono/tests/verifier/make_store_indirect_test.sh b/mono/tests/verifier/make_store_indirect_test.sh
new file mode 100755 (executable)
index 0000000..1eafce9
--- /dev/null
@@ -0,0 +1,61 @@
+#! /bin/sh
+
+TEST_NAME=$1
+TEST_VALIDITY=$2
+TEST_OP=$3
+TEST_TYPE1=$4
+TEST_TYPE2=$5
+
+T1_VAL=`echo $TEST_TYPE1 | sed -s 's/\\\&//g'`
+
+TEST_FILE=`echo ${TEST_VALIDITY}_${TEST_NAME}_generated.il`
+echo $TEST_FILE
+
+sed -e "s/TYPE1/${TEST_TYPE1}/g" -e "s/T1_VAL/${T1_VAL}/g" -e "s/TYPE2/${TEST_TYPE2}/g"  -e "s/OP/${TEST_OP}/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 'load_indirect_test'
+{
+  .hash algorithm 0x00008004
+  .ver  0:0:0:0
+}
+
+.module load_indirect_test.exe
+
+.class Class extends [mscorlib]System.Object
+{
+    .field public int32 valid
+}
+
+.class public Template\`1<T>
+       extends [mscorlib]System.Object
+{
+}
+
+.class public auto ansi sealed MyStruct
+       extends [mscorlib]System.ValueType
+{
+       .field public int32 foo
+}
+
+
+.method public static int32 Main ()
+{
+       .entrypoint
+       .maxstack 8
+       .locals init (TYPE1 V_0, TYPE2 V_1, T1_VAL V_2)
+       ldloca 2
+       stloc.0
+       ldloc.0
+       ldloc.1
+       OP
+       ldc.i4.0
+       ret 
+}
+
+//EOF
index 5997308c8008a0b4937ee85770351eab4934e513..181f13608b71a9b60e3b61aa0679342416215e47 100755 (executable)
@@ -2351,3 +2351,159 @@ do
 done
 
 
+#valid stores
+./make_store_indirect_test.sh indirect_store_i1_1 valid "stind.i1" "int8\&" "int8"
+./make_store_indirect_test.sh indirect_store_i1_2 valid "stind.i1" "bool\&" "int8"
+./make_store_indirect_test.sh indirect_store_i1_3 valid "stind.i1" "int8\&" "bool"
+./make_store_indirect_test.sh indirect_store_i1_4 valid "stind.i1" "bool\&" "bool"
+
+./make_store_indirect_test.sh indirect_store_i2_1 valid "stind.i2" "int16\&" "int16"
+./make_store_indirect_test.sh indirect_store_i2_2 valid "stind.i2" "char\&" "int16"
+./make_store_indirect_test.sh indirect_store_i2_3 valid "stind.i2" "int16\&" "char"
+./make_store_indirect_test.sh indirect_store_i2_4 valid "stind.i2" "char\&" "char"
+
+./make_store_indirect_test.sh indirect_store_i4_1 valid "stind.i4" "int32\&" "int32"
+./make_store_indirect_test.sh indirect_store_i4_2 valid "stind.i4" "native int\&" "int32"
+./make_store_indirect_test.sh indirect_store_i4_3 valid "stind.i4" "int32\&" "native int"
+./make_store_indirect_test.sh indirect_store_i4_4 valid "stind.i4" "native int\&" "native int"
+
+
+./make_store_indirect_test.sh indirect_store_i8_1 valid "stind.i8" "int64\&" "int64"
+
+./make_store_indirect_test.sh indirect_store_r4_1 valid "stind.r4" "float32\&" "float32"
+
+./make_store_indirect_test.sh indirect_store_r8_1 valid "stind.r8" "float64\&" "float64"
+
+./make_store_indirect_test.sh indirect_store_i_1 valid "stind.i" "native int\&" "int32"
+./make_store_indirect_test.sh indirect_store_i_2 valid "stind.i" "int32\&" "int32"
+./make_store_indirect_test.sh indirect_store_i_3 valid "stind.i" "native int\&" "native int"
+./make_store_indirect_test.sh indirect_store_i_4 valid "stind.i" "int32\&" "native int"
+
+./make_store_indirect_test.sh indirect_store_r_1 valid "stind.ref" "object\&" "object"
+./make_store_indirect_test.sh indirect_store_r_2 valid "stind.ref" "object\&" "string"
+./make_store_indirect_test.sh indirect_store_r_3 valid "stind.ref" "string\&" "string"
+./make_store_indirect_test.sh indirect_store_r_4 unverifiable "stind.ref" "valuetype MyStruct\&" "MyStruct"
+
+
+
+
+#stdind tests
+#unverifiable due to unmanaged pointers
+./make_store_indirect_test.sh indirect_store_unmanaged_pointer_1 unverifiable "stind.i1" "int8*" "int8"
+./make_store_indirect_test.sh indirect_store_unmanaged_pointer_2 unverifiable "stind.i1" "native int" "int8"
+
+#invalid due to unrelated types on stack
+./make_store_indirect_test.sh indirect_store_bad_type_1 unverifiable "stind.i1" "int8" "int8"
+./make_store_indirect_test.sh indirect_store_bad_type_2 unverifiable "stind.i1" "int8" "int8"
+
+#invalid stind.ref with valuetypes
+./make_store_indirect_test.sh indirect_store_bad_type_r_3 valid "stind.ref" "int32[]\&" "int32[]"
+
+#invalid operands
+I=1
+for TYPE1 in "int16" "char" "int32" "native int"
+do
+       ./make_store_indirect_test.sh indirect_store_bad_addr_i1_${I} unverifiable "stind.i1" "${TYPE1}\&" "int8"
+       ./make_store_indirect_test.sh indirect_store_good_val_i1_${I} valid "stind.i1" "int8\&" "${TYPE1}"
+       I=`expr $I + 1`
+done
+
+for TYPE1 in  "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
+do
+       ./make_store_indirect_test.sh indirect_store_bad_addr_i1_${I} unverifiable "stind.i1" "${TYPE1}\&" "int8"
+       ./make_store_indirect_test.sh indirect_store_bad_val_i1_${I} unverifiable "stind.i1" "int8\&" "${TYPE1}"
+       I=`expr $I + 1`
+done
+
+
+I=1
+for TYPE1 in "int8" "bool" "int32" "native int"
+do
+       ./make_store_indirect_test.sh indirect_store_bad_addr_i2_${I} unverifiable "stind.i2" "${TYPE1}\&" "int16"
+       ./make_store_indirect_test.sh indirect_store_good_val_i2_${I} valid "stind.i2" "int16\&" "${TYPE1}" 
+       I=`expr $I + 1`
+done
+
+for TYPE1 in "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
+do
+       ./make_store_indirect_test.sh indirect_store_bad_addr_i2_${I} unverifiable "stind.i2" "${TYPE1}\&" "int16"
+       ./make_store_indirect_test.sh indirect_store_bad_val_i2_${I} unverifiable "stind.i2" "int16\&" "${TYPE1}" 
+       I=`expr $I + 1`
+done
+
+
+I=1
+for TYPE1 in "int8" "bool" "int16" "char"
+do
+       ./make_store_indirect_test.sh indirect_store_bad_addr_i4_${I} unverifiable "stind.i4" "${TYPE1}\&" "int32"
+       ./make_store_indirect_test.sh indirect_store_good_val_i4_${I} valid "stind.i4" "int32\&" "${TYPE1}"
+       I=`expr $I + 1`
+done
+
+for TYPE1 in  "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
+do
+       ./make_store_indirect_test.sh indirect_store_bad_addr_i4_${I} unverifiable "stind.i4" "${TYPE1}\&" "int32"
+       ./make_store_indirect_test.sh indirect_store_bad_val_i4_${I} unverifiable "stind.i4" "int32\&" "${TYPE1}"
+       I=`expr $I + 1`
+done
+
+
+I=1
+for TYPE1 in "int8" "bool" "int16" "char" "int32" "float32" "float64" "native int" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
+do
+       ./make_store_indirect_test.sh indirect_store_bad_addr_i8_${I} unverifiable "stind.i8" "${TYPE1}\&" "int64"
+       ./make_store_indirect_test.sh indirect_store_bad_val_i8_${I} unverifiable "stind.i8" "int64\&" "${TYPE1}"
+       I=`expr $I + 1`
+done
+
+
+I=1
+for TYPE1 in "int8" "bool" "int16" "char" "int32" "int64" "float64" "native int" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
+do
+       ./make_store_indirect_test.sh indirect_store_bad_addr_r4_${I} unverifiable "stind.r4" "${TYPE1}\&" "float32"
+       if [ "$TYPE1" == "float64" ]; then
+               ./make_store_indirect_test.sh indirect_store_good_val_r4_${I} valid "stind.r4" "float32\&" "${TYPE1}"
+       else
+               ./make_store_indirect_test.sh indirect_store_bad_val_r4_${I} unverifiable "stind.r4" "float32\&" "${TYPE1}"
+       fi
+       I=`expr $I + 1`
+done
+
+
+I=1
+for TYPE1 in "int8" "bool" "int16" "char" "int32" "int64" "float32" "native int" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
+do
+       ./make_store_indirect_test.sh indirect_store_bad_addr_r8_${I} unverifiable "stind.r8" "${TYPE1}\&" "float64"
+       if [ "$TYPE1" == "float32" ]; then
+               ./make_store_indirect_test.sh indirect_store_good_val_r8_${I} valid "stind.r8" "float64\&" "${TYPE1}";
+       else
+               ./make_store_indirect_test.sh indirect_store_bad_val_r8_${I} unverifiable "stind.r8" "float64\&" "${TYPE1}";
+       fi
+       I=`expr $I + 1`
+done
+
+
+I=1
+for TYPE1 in "int8" "bool" "int16" "char"
+do
+       ./make_store_indirect_test.sh indirect_store_bad_addr_i_${I} unverifiable "stind.i" "${TYPE1}\&" "native int" 
+       ./make_store_indirect_test.sh indirect_store_good_val_i_${I} valid "stind.i" "native int\&" "${TYPE1}"
+       I=`expr $I + 1`
+done
+
+for TYPE1 in "int64" "float32" "float64" "object" "string" "class Class" "valuetype MyStruct"  "int32[]" "int32[,]" "int32*" "method int32 *(int32)"  "class Template\`1<object>"
+do
+       ./make_store_indirect_test.sh indirect_store_bad_addr_i_${I} unverifiable "stind.i" "${TYPE1}\&" "native int" 
+       ./make_store_indirect_test.sh indirect_store_bad_val_i_${I} unverifiable "stind.i" "native int\&" "${TYPE1}"
+       I=`expr $I + 1`
+done
+
+
+I=1
+for TYPE1 in "int8" "bool" "int16" "char" "int32" "int64" "float32" "float64" "native int"
+do
+       ./make_store_indirect_test.sh indirect_store_bad_addr_ref_${I} unverifiable "stind.ref" "${TYPE1}\&" "object"
+       ./make_store_indirect_test.sh indirect_store_bad_val_ref_${I} unverifiable "stind.ref" "object&" "${TYPE1}"
+       I=`expr $I + 1`
+done
+