2007-08-10 Rodrigo Kumpera <rkumpera@novell.com>
authorRodrigo Kumpera <kumpera@gmail.com>
Fri, 10 Aug 2007 13:40:27 +0000 (13:40 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Fri, 10 Aug 2007 13:40:27 +0000 (13:40 -0000)
* make_test.sh: Added new visibility tests and not/neg tests
* make_cross_nested_access_test.sh: new test script for visibility
between two classes nested in the same class
* unverifiable_ldsfld_no_fld.il: added main method
* make_unary_test.sh: added some types to make room for more tests
* make_exception_branch_test.sh: fix the test to trigger the right error

svn path=/trunk/mono/; revision=83816

mono/tests/verifier/ChangeLog
mono/tests/verifier/make_cross_nested_access_test.sh [new file with mode: 0755]
mono/tests/verifier/make_exception_branch_test.sh
mono/tests/verifier/make_tests.sh
mono/tests/verifier/make_unary_test.sh
mono/tests/verifier/unverifiable_ldsfld_no_fld.il

index e82ff25ae2f17c7a6754bc4ec79e9a411653e94b..0a538081a88c0bd18cf013d0bffe481237cb7143 100644 (file)
@@ -1,3 +1,13 @@
+2007-08-10 Rodrigo Kumpera <rkumpera@novell.com>
+
+       * make_test.sh: Added new visibility tests and not/neg tests
+       * make_cross_nested_access_test.sh: new test script for visibility
+       between two classes nested in the same class
+       * unverifiable_ldsfld_no_fld.il: added main method
+       * make_unary_test.sh: added some types to make room for more tests
+       * make_exception_branch_test.sh: fix the test to trigger the right error
+
+
 2007-08-02 Rodrigo Kumpera <rkumpera@novell.com>
 
        * make_exception_branch_test.sh: Fix the generation of the tests, so only
diff --git a/mono/tests/verifier/make_cross_nested_access_test.sh b/mono/tests/verifier/make_cross_nested_access_test.sh
new file mode 100755 (executable)
index 0000000..9d32def
--- /dev/null
@@ -0,0 +1,114 @@
+#! /bin/sh
+
+TEST_NAME=$1
+TEST_VALIDITY=$2
+TEST_OP=$3
+TEST_CLASS_ACCESS=$4
+TEST_MEMBER_ACCESS=$5
+TEST_EXTENDS=$6
+TEST_LOAD_BASE=$7
+
+
+if [ "$TEST_EXTENDS" == "yes" ]; then
+       TEST_EXTENDS="extends Owner\/Nested"
+       TEST_CONSTRUCTOR="call instance void Owner\/Nested::.ctor()"
+else
+       TEST_EXTENDS="extends [mscorlib]System.Object"
+       TEST_CONSTRUCTOR="call instance void object::.ctor()"
+fi
+
+if [ "$TEST_LOAD_BASE" == "yes" ]; then
+       TEST_LOAD_REF="ldarg.0"
+else
+       TEST_LOAD_REF="call class Owner\/Nested Owner::Create ()"
+fi
+
+TEST_NAME=${TEST_VALIDITY}_${TEST_NAME}
+TEST_FILE=${TEST_NAME}_generated.il
+echo $TEST_FILE
+sed -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/OPCODE/${TEST_OP}/g" -e "s/CONSTRUCTOR/${TEST_CONSTRUCTOR}/g" -e "s/CLASS_ACCESS/${TEST_CLASS_ACCESS}/g" -e "s/MEMBER_ACCESS/${TEST_MEMBER_ACCESS}/g" -e "s/EXTENDS/${TEST_EXTENDS}/g"  -e "s/LOAD_REF/${TEST_LOAD_REF}/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 public Owner extends [mscorlib]System.Object
+{
+       .method public static Owner/Nested Create ()
+       {
+               .maxstack 8
+               newobj instance void class Owner/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 CLASS_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 int32 Target ()
+               {
+                       .maxstack 8
+                       ldc.i4.0
+                       ret 
+               }               
+       }
+
+       .class nested public Test EXTENDS
+       {
+               .method public hidebysig specialname rtspecialname instance default void .ctor () cil managed
+               {
+                       .maxstack 8
+                       ldarg.0 
+                       CONSTRUCTOR
+                       ret
+               }
+
+               .method public void Method ()
+               {
+                       .maxstack 8
+                       LOAD_REF
+                       OPCODE // VALIDITY.
+                       pop
+                       ret
+               }       
+       }
+}
+
+.method public static int32 Main() cil managed
+{
+       .entrypoint
+       .maxstack 8
+       newobj instance void class Owner/Test::.ctor()
+       call instance void class  Owner/Test::Method()
+       ldc.i4.0
+       ret
+}
+//EOF
index ac8a0afd500dc2c11d393167b9a114ecdf9961d8..8eef7e097577fce77295740c9e15487f4a2bab0a 100755 (executable)
@@ -36,7 +36,7 @@ branch_target1:
         }
         catch [mscorlib]System.Exception 
        {
-               nop
+               pop
 branch_target2:
                OPCODE3
                leave branch_target5
index 99241f50647ff5f8bab93f3ca61ea8533ff42173..8fe7c20542f1615800771cd62ad71a967967bd79 100755 (executable)
@@ -224,13 +224,33 @@ do
   I=`expr $I + 1`
 done
 
-for OP in "not\n\tpop"
+I=1
+for TYPE in bool int8 int16 char int32 int64 'native int' 'class Int8Enum'
+do
+  ./make_unary_test.sh not_${I} valid "not\n\tpop" "$TYPE"
+  I=`expr $I + 1`
+done
+
+for TYPE in 'int32&' object "class MyStruct" typedref "method int32 *(int32)" 'class Template\`1<int32>' float32 float64
+do
+  ./make_unary_test.sh not_${I} unverifiable "not\n\tpop" "$TYPE"
+  I=`expr $I + 1`
+done
+
+I=1
+for TYPE in bool int8 int16 char int32 int64 'native int' 'class Int8Enum' float32 float64
+do
+  ./make_unary_test.sh neg_${I} valid "neg\n\tpop" "$TYPE"
+  I=`expr $I + 1`
+done
+
+for TYPE in 'int32&' object "class MyStruct" typedref "method int32 *(int32)" 'class Template\`1<int32>'
 do
-  ./make_unary_test.sh not_1 unverifiable "$OP" float64
-  ./make_unary_test.sh not_2 unverifiable "$OP" 'int32&'
-  ./make_unary_test.sh not_3 unverifiable "$OP" object
+  ./make_unary_test.sh neg_${I} unverifiable "neg\n\tpop" "$TYPE"
+  I=`expr $I + 1`
 done
 
+
 # Table 6: Shift Operators
 I=1
 for OP in shl shr
@@ -803,7 +823,7 @@ done
 # Box byref-like type.
 ./make_unary_test.sh box_byref_like unverifiable "box [mscorlib]System.TypedReference\n\tpop" typedref
 
-#This is is illegal since you cannot have a Void local variable, it should go into the structural tests part
+#This is illegal since you cannot have a Void local variable, it should go into the structural tests part
 # Box void type.
 #./make_unary_test.sh box_void unverifiable "box [mscorlib]System.Void\n\tpop" "class [mscorlib]System.Void"
 
@@ -1448,6 +1468,188 @@ do
        I=`expr $I + 1`
 done
 
+
+I=1
+for OP in "ldc.i4.0\n\t\tstsfld int32 Owner\/Nested::sfld" "ldsfld int32 Owner\/Nested::sfld\n\n\tpop" "ldsflda int32 Owner\/Nested::sfld\n\n\tpop" "callvirt instance int32 class Owner\/Nested::Target()" "call instance int32 class Owner\/Nested::Target()" "ldc.i4.0\n\t\tstfld int32 Owner\/Nested::fld\n\t\tldc.i4.0" "ldfld int32 Owner\/Nested::fld" "ldflda int32 Owner\/Nested::fld"
+do
+       ./make_cross_nested_access_test.sh cross_nested_access_check_1_${I} valid "$OP" public public no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_2_${I} valid "$OP" public public yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_3_${I} unverifiable "$OP" public private no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_4_${I} unverifiable "$OP" public private yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_5_${I} unverifiable "$OP" public family no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_7_${I} valid "$OP" public assembly no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_8_${I} valid "$OP" public assembly yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_9_${I} unverifiable "$OP" public famandassem no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_b_${I} valid "$OP" public famorassem no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_c_${I} valid "$OP" public famorassem yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_11_${I} valid "$OP" private public no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_12_${I} valid "$OP" private public yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_13_${I} unverifiable "$OP" private private no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_14_${I} unverifiable "$OP" private private yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_15_${I} unverifiable "$OP" private family no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_17_${I} valid "$OP" private assembly no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_18_${I} valid "$OP" private assembly yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_19_${I} unverifiable "$OP" private famandassem no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_1b_${I} valid "$OP" private famorassem no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_1c_${I} valid "$OP" private famorassem yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_21_${I} valid "$OP" family public no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_22_${I} valid "$OP" family public yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_23_${I} unverifiable "$OP" family private no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_24_${I} unverifiable "$OP" family private yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_25_${I} unverifiable "$OP" family family no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_27_${I} valid "$OP" family assembly no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_28_${I} valid "$OP" family assembly yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_29_${I} unverifiable "$OP" family famandassem no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_2b_${I} valid "$OP" family famorassem no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_2c_${I} valid "$OP" family famorassem yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_31_${I} valid "$OP" assembly public no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_32_${I} valid "$OP" assembly public yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_33_${I} unverifiable "$OP" assembly private no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_34_${I} unverifiable "$OP" assembly private yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_35_${I} unverifiable "$OP" assembly family no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_37_${I} valid "$OP" assembly assembly no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_38_${I} valid "$OP" assembly assembly yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_39_${I} unverifiable "$OP" assembly famandassem no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_3b_${I} valid "$OP" assembly famorassem no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_3c_${I} valid "$OP" assembly famorassem yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_41_${I} valid "$OP" famandassem public no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_42_${I} valid "$OP" famandassem public yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_43_${I} unverifiable "$OP" famandassem private no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_44_${I} unverifiable "$OP" famandassem private yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_45_${I} unverifiable "$OP" famandassem family no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_47_${I} valid "$OP" famandassem assembly no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_48_${I} valid "$OP" famandassem assembly yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_49_${I} unverifiable "$OP" famandassem famandassem no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_4b_${I} valid "$OP" famandassem famorassem no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_4c_${I} valid "$OP" famandassem famorassem yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_51_${I} valid "$OP" famorassem public no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_52_${I} valid "$OP" famorassem public yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_53_${I} unverifiable "$OP" famorassem private no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_54_${I} unverifiable "$OP" famorassem private yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_55_${I} unverifiable "$OP" famorassem family no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_57_${I} valid "$OP" famorassem assembly no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_58_${I} valid "$OP" famorassem assembly yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_59_${I} unverifiable "$OP" famorassem famandassem no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_5b_${I} valid "$OP" famorassem famorassem no
+       ./make_cross_nested_access_test.sh cross_nested_access_check_5c_${I} valid "$OP" famorassem famorassem yes
+       I=`expr $I + 1`
+done
+
+
+I=1
+for OP in "callvirt instance int32 class Owner\/Nested::Target()" "call instance int32 class Owner\/Nested::Target()" "ldc.i4.0\n\t\tstfld int32 Owner\/Nested::fld\n\t\tldc.i4.0" "ldc.i4.0\n\t\tstsfld int32 Owner\/Nested::sfld" "ldsfld int32 Owner\/Nested::sfld\n\n\tpop" "ldfld int32 Owner\/Nested::fld" "ldsflda int32 Owner\/Nested::sfld\n\n\tpop" "ldflda int32 Owner\/Nested::fld"
+do
+       ./make_cross_nested_access_test.sh cross_nested_access_check_2a_${I} valid "$OP" public public yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_4a_${I} unverifiable "$OP" public private yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_8a_${I} valid "$OP" public assembly yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_ca_${I} valid "$OP" public famorassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_12a_${I} valid "$OP" private public yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_14a_${I} unverifiable "$OP" private private yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_18a_${I} valid "$OP" private assembly yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_1ca_${I} valid "$OP" private famorassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_22a_${I} valid "$OP" family public yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_24a_${I} unverifiable "$OP" family private yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_28a_${I} valid "$OP" family assembly yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_2ca_${I} valid "$OP" family famorassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_32a_${I} valid "$OP" assembly public yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_34a_${I} unverifiable "$OP" assembly private yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_38a_${I} valid "$OP" assembly assembly yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_3ca_${I} valid "$OP" assembly famorassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_42a_${I} valid "$OP" famandassem public yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_44a_${I} unverifiable "$OP" famandassem private yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_48a_${I} valid "$OP" famandassem assembly yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_4ca_${I} valid "$OP" famandassem famorassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_52a_${I} valid "$OP" famorassem public yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_54a_${I} unverifiable "$OP" famorassem private yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_58a_${I} valid "$OP" famorassem assembly yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_5ca_${I} valid "$OP" famorassem famorassem yes yes
+       I=`expr $I + 1`
+done
+
+
+I=1
+for OP in "callvirt instance int32 class Owner\/Nested::Target()" "call instance int32 class Owner\/Nested::Target()" "ldc.i4.0\n\t\tstfld int32 Owner\/Nested::fld\n\t\tldc.i4.0" "ldfld int32 Owner\/Nested::fld" "ldflda int32 Owner\/Nested::fld"
+do
+       ./make_cross_nested_access_test.sh cross_nested_access_check_6_${I} unverifiable "$OP" public family yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_6a_${I} valid "$OP" public family yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_a_${I} unverifiable "$OP" public famandassem yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_aa_${I} valid "$OP" public famandassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_16_${I} unverifiable "$OP" private family yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_16a_${I} valid "$OP" private family yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_1a_${I} unverifiable "$OP" private famandassem yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_1aa_${I} valid "$OP" private famandassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_26_${I} unverifiable "$OP" family family yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_26a_${I} valid "$OP" family family yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_2a_${I} unverifiable "$OP" family famandassem yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_2aa_${I} valid "$OP" family famandassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_36_${I} unverifiable "$OP" assembly family yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_36a_${I} valid "$OP" assembly family yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_3a_${I} unverifiable "$OP" assembly famandassem yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_3aa_${I} valid "$OP" assembly famandassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_46_${I} unverifiable "$OP" famandassem family yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_46a_${I} valid "$OP" famandassem family yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_4a_${I} unverifiable "$OP" famandassem famandassem yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_4aa_${I} valid "$OP" famandassem famandassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_56_${I} unverifiable "$OP" famorassem family yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_56a_${I} valid "$OP" famorassem family yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_5a_${I} unverifiable "$OP" famorassem famandassem yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_5aa_${I} valid "$OP" famorassem famandassem yes yes
+
+       I=`expr $I + 1`
+done
+
+for OP in "ldc.i4.0\n\t\tstsfld int32 Owner\/Nested::sfld" "ldsfld int32 Owner\/Nested::sfld\n\n\tpop" "ldsflda int32 Owner\/Nested::sfld\n\n\tpop"
+do
+       ./make_cross_nested_access_test.sh cross_nested_access_check_6_${I} valid "$OP" public family yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_6a_${I} valid "$OP" public family yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_a_${I} valid "$OP" public famandassem yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_aa_${I} valid "$OP" public famandassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_16_${I} valid "$OP" private family yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_16a_${I} valid "$OP" private family yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_1a_${I} valid "$OP" private famandassem yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_1aa_${I} valid "$OP" private famandassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_26_${I} valid "$OP" family family yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_26a_${I} valid "$OP" family family yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_2a_${I} valid "$OP" family famandassem yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_2aa_${I} valid "$OP" family famandassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_36_${I} valid "$OP" assembly family yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_36a_${I} valid "$OP" assembly family yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_3a_${I} valid "$OP" assembly famandassem yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_3aa_${I} valid "$OP" assembly famandassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_46_${I} valid "$OP" famandassem family yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_46a_${I} valid "$OP" famandassem family yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_4a_${I} valid "$OP" famandassem famandassem yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_4aa_${I} valid "$OP" famandassem famandassem yes yes
+
+       ./make_cross_nested_access_test.sh cross_nested_access_check_56_${I} valid "$OP" famorassem family yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_56a_${I} valid "$OP" famorassem family yes yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_5a_${I} valid "$OP" famorassem famandassem yes
+       ./make_cross_nested_access_test.sh cross_nested_access_check_5aa_${I} valid "$OP" famorassem famandassem yes yes
+
+       I=`expr $I + 1`
+done
+
+
+
 I=1
 for OP in "ldc.i4.0\n\t\tstfld int32 Class::fld\n\t\tldc.i4.0" "ldc.i4.0\n\t\tstsfld int32 Class::sfld" "ldsfld int32 Class::sfld\n\n\tpop" "ldfld int32 Class::fld" "ldsflda int32 Class::sfld\n\n\tpop" "ldflda int32 Class::fld" "call instance int32 Class::Method()" "callvirt int32 Class::Method()"
 do
index cb19242d9327eb2e4ac79b6f79f19d9ae656c618..cd6d93506b2c1593e844487fd988c3c06b01807b 100755 (executable)
@@ -24,7 +24,24 @@ sed -e "s/OPCODE/${TEST_OP}/g" -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/TYPE1/${
     .field public int32 valid
 }
 
-.class explicit Overlapped extends [mscorlib]System.ValueType
+.class public Template\`1<T>
+       extends [mscorlib]System.Object
+{
+}
+
+.class public auto ansi sealed MyStruct
+       extends [mscorlib]System.ValueType
+{
+}
+
+.class public auto ansi sealed Int8Enum
+       extends [mscorlib]System.Enum
+{
+       .field public specialname rtspecialname int8 value__
+       .field public static literal valuetype Int8Enum A = int8(0x00000000)
+}
+
+.class explicit sealed Overlapped extends [mscorlib]System.ValueType
 {
     .field [0] private int32 privateIntVal
     .field [0] public int32 publicIntVal
@@ -44,4 +61,4 @@ sed -e "s/OPCODE/${TEST_OP}/g" -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/TYPE1/${
        ldc.i4.0
        ret
 }
-//EOF
\ No newline at end of file
+//EOF
index 6ed7ba751d31532a40055c1c8791878160e4bef8..e89ede2104f7c06f897caae4ac59ed1a60beafe5 100644 (file)
@@ -8,6 +8,34 @@
 }
 
 
+.class public auto ansi beforefieldinit c
+       extends [mscorlib]System.Object
+{
+}
+
+.method public static int32 Main() cil managed
+{
+       .entrypoint
+       .maxstack 2
+       .locals init (
+               class c V_0
+       )
+       ldloc.0
+       ldsfld int32 c::invalid // Invalid, no field invalid in class c.
+       pop
+       ldc.i4.0
+       ret
+}
+// Invalid CIL which breaks the ECMA-335,III,4.14 rules. 
+// This CIL should fail verification by a conforming CLI verifier.
+
+.assembly 'test_generated'
+{
+  .hash algorithm 0x00008004
+  .ver  0:0:0:0
+}
+
+
 .class public auto ansi beforefieldinit c
        extends [mscorlib]System.Object
 {