Author: kumpera
Date: 2008-01-03 17:33:45 -0500 (Thu, 03 Jan 2008)
New Revision: 92212
Added:
trunk/mono/mono/tests/verifier/invalid_ldvirtftn_invalid_token_out_of_bounds.il
trunk/mono/mono/tests/verifier/invalid_ldvirtftn_invalid_token_type.il
trunk/mono/mono/tests/verifier/make_ldvirtftn_test.sh
Modified:
trunk/mono/mono/tests/verifier/ChangeLog
trunk/mono/mono/tests/verifier/make_ldftn_test.sh
trunk/mono/mono/tests/verifier/make_tests.sh
Log:
2008-01-03 Rodrigo Kumpera <[EMAIL PROTECTED]>
* invalid_ldvirtftn_invalid_token_type.il: added.
* make_ldvirtftn_test.sh: added.
* invalid_ldvirtftn_invalid_token_out_of_bounds.il: added.
* make_ldftn_test.sh: changed to allow more tests.
* make_tests.sh: added new tests for ldvirtftn and
a buch more for ldftn.
Modified: trunk/mono/mono/tests/verifier/ChangeLog
===================================================================
--- trunk/mono/mono/tests/verifier/ChangeLog 2008-01-03 22:32:06 UTC (rev
92211)
+++ trunk/mono/mono/tests/verifier/ChangeLog 2008-01-03 22:33:45 UTC (rev
92212)
@@ -1,3 +1,16 @@
+2008-01-03 Rodrigo Kumpera <[EMAIL PROTECTED]>
+
+ * invalid_ldvirtftn_invalid_token_type.il: added.
+
+ * make_ldvirtftn_test.sh: added.
+
+ * invalid_ldvirtftn_invalid_token_out_of_bounds.il: added.
+
+ * make_ldftn_test.sh: changed to allow more tests.
+
+ * make_tests.sh: added new tests for ldvirtftn and
+ a buch more for ldftn.
+
2007-12-31 Rodrigo Kumpera <[EMAIL PROTECTED]>
* invalid_ldftn_invalid_token_out_of_bounds.il: added.
Added:
trunk/mono/mono/tests/verifier/invalid_ldvirtftn_invalid_token_out_of_bounds.il
===================================================================
---
trunk/mono/mono/tests/verifier/invalid_ldvirtftn_invalid_token_out_of_bounds.il
2008-01-03 22:32:06 UTC (rev 92211)
+++
trunk/mono/mono/tests/verifier/invalid_ldvirtftn_invalid_token_out_of_bounds.il
2008-01-03 22:33:45 UTC (rev 92212)
@@ -0,0 +1,48 @@
+/*
+This test using a token that overflows the methoddef table
+*/
+.assembly extern mscorlib
+{
+ .ver 2:0:0:0
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
+}
+.assembly 'bla'
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module ld_type.exe
+
+.class public auto ansi beforefieldinit Driver
+ extends [mscorlib]System.Object
+{
+ .method public static void Method ()
+ {
+ ret
+ }
+
+ .method public virtual void VirtMethod ()
+ {
+ ret
+ }
+
+ .method public static int32 Main ()
+ {
+ .entrypoint
+ .maxstack 2
+ .locals init (int32 bla)
+ nop
+ newobj void object::.ctor()
+ .emitbyte 0xFE
+ .emitbyte 0x07
+ .emitbyte 0xAA
+ .emitbyte 0xAA
+ .emitbyte 0x00
+ .emitbyte 0x06
+ pop
+ ret
+
+ }
+}
+
+
Added: trunk/mono/mono/tests/verifier/invalid_ldvirtftn_invalid_token_type.il
===================================================================
--- trunk/mono/mono/tests/verifier/invalid_ldvirtftn_invalid_token_type.il
2008-01-03 22:32:06 UTC (rev 92211)
+++ trunk/mono/mono/tests/verifier/invalid_ldvirtftn_invalid_token_type.il
2008-01-03 22:33:45 UTC (rev 92212)
@@ -0,0 +1,48 @@
+/*
+This test using a token for the typedef table
+*/
+.assembly extern mscorlib
+{
+ .ver 2:0:0:0
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
+}
+.assembly 'bla'
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module ld_type.exe
+
+.class public auto ansi beforefieldinit Driver
+ extends [mscorlib]System.Object
+{
+ .method public static void Method ()
+ {
+ ret
+ }
+
+ .method public virtual void VirtMethod ()
+ {
+ ret
+ }
+
+ .method public static int32 Main ()
+ {
+ .entrypoint
+ .maxstack 2
+ .locals init (int32 bla)
+ nop
+ newobj void object::.ctor()
+ .emitbyte 0xFE
+ .emitbyte 0x07
+ .emitbyte 0x02
+ .emitbyte 0x00
+ .emitbyte 0x00
+ .emitbyte 0x02
+ pop
+ ret
+
+ }
+}
+
+
Modified: trunk/mono/mono/tests/verifier/make_ldftn_test.sh
===================================================================
--- trunk/mono/mono/tests/verifier/make_ldftn_test.sh 2008-01-03 22:32:06 UTC
(rev 92211)
+++ trunk/mono/mono/tests/verifier/make_ldftn_test.sh 2008-01-03 22:33:45 UTC
(rev 92212)
@@ -25,17 +25,25 @@
.class public Test
extends [mscorlib]System.Object
{
- .method public void Test ()
+ .method public hidebysig specialname rtspecialname instance default
void .ctor () cil managed
{
+ .maxstack 8
+ ldarg.0
+ call instance void object::.ctor()
+ ret
+ }
+
+ .method public virtual void VirtMethod ()
+ {
ret
}
-}
+ .method public void Method ()
+ {
+ ret
+ }
-.class public Template<T>
- extends [mscorlib]System.Object
-{
- .method public void Test ()
+ .method public static void StaticMethod ()
{
ret
}
Added: trunk/mono/mono/tests/verifier/make_ldvirtftn_test.sh
===================================================================
--- trunk/mono/mono/tests/verifier/make_ldvirtftn_test.sh 2008-01-03
22:32:06 UTC (rev 92211)
+++ trunk/mono/mono/tests/verifier/make_ldvirtftn_test.sh 2008-01-03
22:33:45 UTC (rev 92212)
@@ -0,0 +1,90 @@
+#! /bin/sh
+
+TEST_NAME=$1
+TEST_VALIDITY=$2
+TEST_LDFTN_OP=$3
+TEST_OP=$4
+
+TEST_FILE=`echo ${TEST_VALIDITY}_${TEST_NAME} | sed -e 's/ /_/g' -e 's/\./_/g'
-e 's/&/mp/g' -e 's/\[/_/g' -e 's/\]/_/g'`_generated.il
+echo $TEST_FILE
+TEST_TYPE1=`echo $TEST_TYPE1 | sed -s 's/&/\\\&/'`
+sed -e "s/OPCODE/${TEST_OP}/g" -e "s/VALIDITY/${TEST_VALIDITY}/g" -e
"s/LDFTN_OP/${TEST_LDFTN_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 'ldftn_test'
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module ldftn_test.exe
+
+.class public Test
+ 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
+ }
+
+ .method public virtual void VirtMethod ()
+ {
+ ret
+ }
+
+ .method public void Method ()
+ {
+ ret
+ }
+
+ .method public static void StaticMethod ()
+ {
+ ret
+ }
+}
+
+.class sealed MyValueType extends [mscorlib]System.ValueType
+{
+ .field private int32 v
+}
+
+.class public auto ansi beforefieldinit Driver
+ extends [mscorlib]System.Object
+{
+ .method public static void Method ()
+ {
+ ret
+ }
+
+ .method public virtual void VirtMethod ()
+ {
+ ret
+ }
+
+ .method public static void Foo (native int bla) {
+ ret
+ }
+
+ .method public static int32 Main ()
+ {
+ .entrypoint
+ .maxstack 2
+ .locals init (Test V0, MyValueType V1)
+ newobj void class Test::.ctor()
+ stloc.0
+
+ OPCODE // VALIDITY
+ LDFTN_OP
+ pop
+
+ ldc.i4.0
+ ret
+ }
+}
+//EOF
Property changes on: trunk/mono/mono/tests/verifier/make_ldvirtftn_test.sh
___________________________________________________________________
Name: svn:executable
+ *
Modified: trunk/mono/mono/tests/verifier/make_tests.sh
===================================================================
--- trunk/mono/mono/tests/verifier/make_tests.sh 2008-01-03 22:32:06 UTC
(rev 92211)
+++ trunk/mono/mono/tests/verifier/make_tests.sh 2008-01-03 22:33:45 UTC
(rev 92212)
@@ -3394,12 +3394,45 @@
#ldftn
./make_ldftn_test.sh ldftn_static_method valid "ldftn void class
Driver::Method()"
-./make_ldftn_test.sh ldftn_virtual_method valid "ldftn void class
Driver::VirtMethod()"
+./make_ldftn_test.sh ldftn_virtual_method valid "ldftn instance void class
Driver::VirtMethod()"
./make_ldftn_test.sh ldftn_corlib_method valid "ldftn instance string
string::ToUpper()"
#this is encoded as a memberref
./make_ldftn_test.sh ldftn_bad_function invalid "ldftn void class
Test::NonPresent()"
-./make_ldftn_test.sh ldftn_overflow invalid "ldftn void class
Driver::Method()" "ldc.i4.0\n\tldc.i4.0"
+./make_ldftn_test.sh ldftn_overflow invalid "ldftn instance void class
Driver::Method()" "ldc.i4.0\n\tldc.i4.0"
+./make_ldftn_test.sh ldftn_ctor unverifiable "ldftn void class Test::.ctor()"
+./make_ldftn_test.sh ldftn_static_method valid "ldftn void class
Test::StaticMethod()"
+./make_ldftn_test.sh ldftn_non_virtual_method valid "ldftn instance void class
Test::Method()"
+./make_ldftn_test.sh ldftn_virtual_method valid "ldftn instance void class
Test::VirtMethod()"
+
+#ldvirtftn
+#TODO test visibility for ldftn and ldvirtftn
+#TODO test that the pushed value is not a native int, but a propert function
pointer
+
+./make_ldvirtftn_test.sh ldvirtftn_virt_method valid "ldvirtftn instance void
class Test::VirtMethod()" "newobj void class Test::.ctor()"
+./make_ldvirtftn_test.sh ldvirtftn_virt_underflow invalid "ldvirtftn instance
void class Test::VirtMethod()" "nop"
+./make_ldvirtftn_test.sh ldvirtftn_valid_obj_on_stack valid "ldvirtftn
instance string object::ToString()" "newobj void object::.ctor()"
+
+I=1
+for TYPE in "ldc.i4.0" "ldc.i8 0" "ldc.r4 2" "ldc.i4.1\n\tconv.i" "ldloca 0"
"ldloc.1"
+do
+ ./make_ldvirtftn_test.sh ldvirtftn_invalid_type_on_stack_${I}
unverifiable "ldvirtftn instance string object::ToString()" "$TYPE"
+ I=`expr $I + 1`
+done
+
+./make_ldvirtftn_test.sh ldvirtftn_non_virtual_method valid "ldvirtftn
instance void class Test::Method()" "newobj void class Test::.ctor()"
+
+./make_ldvirtftn_test.sh ldvirtftn_ctor unverifiable "ldvirtftn void class
Test::.ctor()" "newobj void class Test::.ctor()"
+./make_ldvirtftn_test.sh ldvirtftn_static_method unverifiable "ldvirtftn void
class Test::StaticMethod()" "newobj void class Test::.ctor()"
+./make_ldvirtftn_test.sh ldvirtftn_method_not_present invalid "ldvirtftn void
class Test::NonExistant()" "newobj void Test::.ctor()"
+
+
+./make_ldvirtftn_test.sh ldvirtftn_method_stack_type_obj_compatible_1 valid
"ldvirtftn instance string object::ToString()" "newobj void Test::.ctor()"
+./make_ldvirtftn_test.sh ldvirtftn_method_stack_type_obj_compatible_2 valid
"ldvirtftn void class Test::VirtMethod()" "newobj void Test::.ctor()"
+./make_ldvirtftn_test.sh ldvirtftn_method_stack_type_obj_compatible_3
unverifiable "ldvirtftn void class Test::VirtMethod()" "newobj void
object::.ctor()"
+
+
+
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches