Author: kumpera
Date: 2007-12-07 17:03:22 -0500 (Fri, 07 Dec 2007)
New Revision: 90965
Added:
trunk/mono/mono/tests/verifier/make_cast_test.sh
Modified:
trunk/mono/mono/tests/verifier/ChangeLog
trunk/mono/mono/tests/verifier/make_tests.sh
Log:
* make_test.sh: added tests for castclass and isinst
* make_cast_test.sh: new test generator
2007-12-07 Rodrigo Kumpera <[EMAIL PROTECTED]>
Modified: trunk/mono/mono/tests/verifier/ChangeLog
===================================================================
--- trunk/mono/mono/tests/verifier/ChangeLog 2007-12-07 21:57:19 UTC (rev
90964)
+++ trunk/mono/mono/tests/verifier/ChangeLog 2007-12-07 22:03:22 UTC (rev
90965)
@@ -1,5 +1,10 @@
2007-12-07 Rodrigo Kumpera <[EMAIL PROTECTED]>
+ * make_test.sh: added tests for castclass and isinst
+ * make_cast_test.sh: new test generator
+
+2007-12-07 Rodrigo Kumpera <[EMAIL PROTECTED]>
+
* make_test.sh: added tests for stelem.X
* make_stelem_test.sh: new test generator
Added: trunk/mono/mono/tests/verifier/make_cast_test.sh
===================================================================
--- trunk/mono/mono/tests/verifier/make_cast_test.sh 2007-12-07 21:57:19 UTC
(rev 90964)
+++ trunk/mono/mono/tests/verifier/make_cast_test.sh 2007-12-07 22:03:22 UTC
(rev 90965)
@@ -0,0 +1,83 @@
+#! /bin/sh
+
+TEST_NAME=$1
+TEST_VALIDITY=$2
+TEST_LOCAL=$3
+TEST_LOAD=$4
+TEST_OP=$5
+
+
+
+TEST_NAME=${TEST_VALIDITY}_${TEST_NAME}
+TEST_FILE=${TEST_NAME}_generated.il
+echo $TEST_FILE
+sed -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/LOCAL/${TEST_LOCAL}/g" -e
"s/LOAD/${TEST_LOAD}/g" -e "s/OP/${TEST_OP}/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 (LOCAL l_0 )
+ LOAD
+ OP // VALIDITY.
+ pop
+ ret
+}
+
+.method public static int32 Main() cil managed
+{
+ .maxstack 8
+ .entrypoint
+ .try {
+ call void foo ()
+ leave END
+ } catch [mscorlib]System.InvalidCastException {
+ 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_cast_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 21:57:19 UTC
(rev 90964)
+++ trunk/mono/mono/tests/verifier/make_tests.sh 2007-12-07 22:03:22 UTC
(rev 90965)
@@ -3083,9 +3083,55 @@
+#cast class and isins tests
+#empty stack
+./make_cast_test.sh cast_empty_stack invalid "int32" "nop" "castclass object"
+./make_cast_test.sh isinst_empty_stack invalid "int32" "nop" "isinst object"
+#type
+I=1
+for OBJ in int32 int64 float32 float64 "int32\&" "valuetype MyStruct" "int32*"
"typedref" "method int32 *(int32)"
+do
+ ./make_cast_test.sh cast_object_${I} unverifiable "$OBJ" "ldloc.0"
"castclass object"
+ ./make_cast_test.sh isinst_object_${I} unverifiable "$OBJ" "ldloc.0"
"isinst object"
+ I=`expr $I + 1`
+done
+for OBJ in "int32[]" "string"
+do
+ ./make_cast_test.sh cast_object_${I} valid "$OBJ" "ldloc.0" "castclass
object"
+ ./make_cast_test.sh isinst_object_${I} valid "$OBJ" "ldloc.0" "isinst
object"
+ I=`expr $I + 1`
+done
+#token
+I=1
+for TOKEN in int32 int64 float32 float64 "valuetype MyStruct" "int32*"
"typedref" "int32[]" "string" "method int32 *(int32)"
+do
+ ./make_cast_test.sh cast_token_${I} valid "object" "ldloc.0" "castclass
$TOKEN"
+ ./make_cast_test.sh isinst_token_${I} valid "object" "ldloc.0" "isinst
$TOKEN"
+ I=`expr $I + 1`
+done
+for TOKEN in "int32\&"
+do
+ ./make_cast_test.sh cast_token_${I} invalid "object" "ldloc.0"
"castclass $TOKEN"
+ ./make_cast_test.sh isinst_token_${I} invalid "object" "ldloc.0"
"isinst $TOKEN"
+ I=`expr $I + 1`
+done
+#object
+
+I=1
+for LOAD in "ldloc.0" "ldnull"
+do
+ ./make_cast_test.sh cast_good_obj_${I} valid "object" "$LOAD"
"castclass object"
+ ./make_cast_test.sh isinst_good_obj_${I} valid "object" "$LOAD" "isinst
object"
+ I=`expr $I + 1`
+done
+
+
+
+
+
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches