+2007-12-07 Rodrigo Kumpera <rkumpera@novell.com>
+
+ * make_test.sh: added tests for castclass and isinst
+ * make_cast_test.sh: new test generator
+
2007-12-07 Rodrigo Kumpera <rkumpera@novell.com>
* make_test.sh: added tests for stelem.X
--- /dev/null
+#! /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
+#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