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

Reply via email to