Author: kumpera
Date: 2007-09-25 18:43:14 -0400 (Tue, 25 Sep 2007)
New Revision: 86368
Added:
trunk/mono/mono/tests/verifier/make_double_nesting_test.sh
trunk/mono/mono/tests/verifier/valid_load_addr.il
Modified:
trunk/mono/mono/tests/verifier/ChangeLog
trunk/mono/mono/tests/verifier/make_tests.sh
Log:
2007-09-25 Rodrigo Kumpera <[EMAIL PROTECTED]>
* valid_load_addr.il: Tests for valid uses of ldarga and ldloca
* make_double_nesting_test.sh: Generate tests for calling nested
classes from a diferent outer class
Modified: trunk/mono/mono/tests/verifier/ChangeLog
===================================================================
--- trunk/mono/mono/tests/verifier/ChangeLog 2007-09-25 22:22:08 UTC (rev
86367)
+++ trunk/mono/mono/tests/verifier/ChangeLog 2007-09-25 22:43:14 UTC (rev
86368)
@@ -1,5 +1,10 @@
2007-09-25 Rodrigo Kumpera <[EMAIL PROTECTED]>
+ * valid_load_addr.il: Tests for valid uses of ldarga and ldloca
+ * make_double_nesting_test.sh: Generate tests for calling nested
classes from a diferent outer class
+
+2007-09-25 Rodrigo Kumpera <[EMAIL PROTECTED]>
+
* valid_generic_params.cs (added): Tests for valid use of generic types.
* Makedfile: added valid_generic_params.cs
Added: trunk/mono/mono/tests/verifier/make_double_nesting_test.sh
===================================================================
--- trunk/mono/mono/tests/verifier/make_double_nesting_test.sh 2007-09-25
22:22:08 UTC (rev 86367)
+++ trunk/mono/mono/tests/verifier/make_double_nesting_test.sh 2007-09-25
22:43:14 UTC (rev 86368)
@@ -0,0 +1,152 @@
+#! /bin/sh
+
+TEST_NAME=$1
+TEST_VALIDITY=$2
+TEST_OP=$3
+TEST_CLASS_ACCESS=$4
+TEST_NESTED_ACCESS=$5
+TEST_MEMBER_ACCESS=$6
+TEST_BASE_EXTENDS=$7
+TEST_NESTED_EXTENDS=$8
+TEST_LOAD_BASE=$9
+
+
+if [ "$TEST_BASE_EXTENDS" == "yes" ]; then
+ TEST_BASE_EXTENDS="extends Root"
+ TEST_BASE_CONSTRUCTOR="call instance void Root::.ctor()"
+else
+ TEST_BASE_EXTENDS="extends [mscorlib]System.Object"
+ TEST_BASE_CONSTRUCTOR="call instance void object::.ctor()"
+fi
+
+if [ "$TEST_NESTED_EXTENDS" == "yes" ]; then
+ TEST_NESTED_EXTENDS="extends Root\/Nested"
+ TEST_NESTED_CONSTRUCTOR="call instance void Root\/Nested::.ctor()"
+else
+ TEST_NESTED_EXTENDS="extends [mscorlib]System.Object"
+ TEST_NESTED_CONSTRUCTOR="call instance void object::.ctor()"
+fi
+
+if [ "$TEST_LOAD_BASE" == "yes" ]; then
+ TEST_LOAD_REF="ldarg.0"
+else
+ TEST_LOAD_REF="call class Root\/Nested Root::Create ()"
+fi
+
+TEST_NAME=${TEST_VALIDITY}_${TEST_NAME}
+TEST_FILE=${TEST_NAME}_generated.il
+echo $TEST_FILE
+
+sed -e "s/CLASS_ACCESS/${TEST_CLASS_ACCESS}/g" -e
"s/NESTED_ACCESS/${TEST_NESTED_ACCESS}/g" -e
"s/MEMBER_ACCESS/${TEST_MEMBER_ACCESS}/g" -e
"s/ROOT_EXTENDS/${TEST_BASE_EXTENDS}/g" -e
"s/ROOT_CONSTRUCTOR/${TEST_BASE_CONSTRUCTOR}/g" -e
"s/NESTED_EXTENDS/${TEST_NESTED_EXTENDS}/g" -e
"s/NESTED_CONSTRUCTOR/${TEST_NESTED_CONSTRUCTOR}/g" -e
"s/LOAD_REF/${TEST_LOAD_REF}/g" -e "s/OPCODE/${TEST_OP}/g" -e
"s/VALIDITY/${TEST_VALIDITY}/g" > $TEST_FILE <<//EOF
+
+.assembly '${TEST_NAME}_generated'
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+
+// VALIDITY CIL which breaks the ECMA-335 rules.
+// this CIL should fail verification by a conforming CLI verifier.
+
+.assembly extern mscorlib
+{
+ .ver 1:0:5000:0
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+}
+
+.class CLASS_ACCESS Root extends [mscorlib]System.Object
+{
+ .method public static class Root/Nested Create ()
+ {
+ .maxstack 8
+ newobj instance void class Root/Nested::.ctor()
+ ret
+ }
+
+ .method public hidebysig specialname rtspecialname instance default
void .ctor () cil managed
+ {
+ .maxstack 8
+ ldarg.0
+ call instance void object::.ctor()
+ ret
+ }
+
+ .class nested NESTED_ACCESS Nested extends [mscorlib]System.Object
+ {
+ .field MEMBER_ACCESS int32 fld
+ .field MEMBER_ACCESS static int32 sfld
+
+ .method public hidebysig specialname rtspecialname instance
default void .ctor () cil managed
+ {
+ .maxstack 8
+ ldarg.0
+ call instance void object::.ctor()
+ ret
+ }
+
+ .method MEMBER_ACCESS virtual hidebysig newslot instance int32
Target ()
+ {
+ .maxstack 8
+ ldc.i4.0
+ ret
+ }
+ }
+}
+
+
+.class public Extension ROOT_EXTENDS
+{
+ .method public static void Execute ()
+ {
+ .maxstack 8
+ newobj instance void class Extension/MyNested::.ctor()
+ call instance void class Extension/MyNested::Method()
+ ret
+ }
+
+ .method public hidebysig specialname rtspecialname instance default
void .ctor () cil managed
+ {
+ .maxstack 8
+ ldarg.0
+ ROOT_CONSTRUCTOR
+ ret
+ }
+
+ .class nested MEMBER_ACCESS MyNested NESTED_EXTENDS
+ {
+ .method MEMBER_ACCESS virtual hidebysig instance int32 Target ()
+ {
+ .maxstack 8
+ ldc.i4.0
+ ret
+ }
+
+ .method public hidebysig specialname rtspecialname instance
default void .ctor () cil managed
+ {
+ .maxstack 8
+ ldarg.0
+ NESTED_CONSTRUCTOR
+ ret
+ }
+
+ .method public void Method ()
+ {
+ .maxstack 8
+ LOAD_REF
+ OPCODE // VALIDITY.
+ pop
+ ret
+ }
+ }
+}
+
+.method public static int32 Main() cil managed
+{
+ .entrypoint
+ .maxstack 8
+ call void class Extension::Execute ()
+ ldc.i4.0
+ ret
+}
+
+//EOF
Property changes on: trunk/mono/mono/tests/verifier/make_double_nesting_test.sh
___________________________________________________________________
Name: svn:executable
+ *
Modified: trunk/mono/mono/tests/verifier/make_tests.sh
===================================================================
--- trunk/mono/mono/tests/verifier/make_tests.sh 2007-09-25 22:22:08 UTC
(rev 86367)
+++ trunk/mono/mono/tests/verifier/make_tests.sh 2007-09-25 22:43:14 UTC
(rev 86368)
@@ -1767,7 +1767,7 @@
for LOAD in yes no
do
if ! ( [ "$NESTED" == "no" ] && [ "$LOAD" == "yes" ] ) ; then
- EXPECT=unverifiable
+ EXPECT=unverifiable
if [ "$FIRST" == "$K" ]; then
EXPECT=valid
fi
Added: trunk/mono/mono/tests/verifier/valid_load_addr.il
===================================================================
--- trunk/mono/mono/tests/verifier/valid_load_addr.il 2007-09-25 22:22:08 UTC
(rev 86367)
+++ trunk/mono/mono/tests/verifier/valid_load_addr.il 2007-09-25 22:43:14 UTC
(rev 86368)
@@ -0,0 +1,75 @@
+.assembly extern mscorlib
+{
+ .ver 2:0:0:0
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+}
+.assembly 'bla'
+{
+ .custom instance void class
[mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor()
= (
+ 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 //
....T..WrapNonEx
+ 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) //
ceptionThrows.
+
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module bla.exe // GUID = {8936712E-615B-4184-B427-9B50704538E2}
+
+.method static public void ByRefParam (int32&)
+{
+ .maxstack 8
+ .locals init (int32 &V_0)
+ ret
+}
+
+.method static public void Blue (int32)
+{
+ .maxstack 8
+ .locals init (int32& V_0)
+
+ ldarga 0
+ call void ByRefParam(int32&)
+ ret
+}
+
+
+.method static public void ZZZ ()
+{
+ .maxstack 8
+ .locals init (int32 V_0)
+
+ ldloc.0
+ call void Blue(int32)
+ ldloca 0
+ call void ByRefParam(int32&)
+ ret
+}
+
+ .class public auto ansi beforefieldinit Example
+ extends [mscorlib]System.Object
+ {
+
+ // method line 1
+ .method public hidebysig specialname rtspecialname
+ instance default void .ctor () cil managed
+ {
+ // Method begins at RVA 0x20ec
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void object::.ctor()
+ IL_0006: ret
+ } // end of method Example::.ctor
+
+ // method line 2
+ .method public static hidebysig
+ default int32 Main () cil managed
+ {
+ .entrypoint
+ .maxstack 2
+ call void ZZZ ()
+ ldc.i4.0
+ ret
+ }
+
+ } // end of class Example
+
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches