2010-01-28 Rodrigo Kumpera <rkumpera@novell.com>
authorRodrigo Kumpera <kumpera@gmail.com>
Wed, 27 Jan 2010 18:31:38 +0000 (18:31 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Wed, 27 Jan 2010 18:31:38 +0000 (18:31 -0000)
* Makefile, *.sh, *.il: Change status of a bunch of a tests to reflect the metadata
verifier. First pass into making the test suite works under OSX.

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

mono/tests/verifier/ChangeLog
mono/tests/verifier/Makefile
mono/tests/verifier/invalid_funptr_double_free_regression.il [new file with mode: 0644]
mono/tests/verifier/make_cpobj_test.sh
mono/tests/verifier/make_stobj_test.sh
mono/tests/verifier/make_store_test.sh
mono/tests/verifier/make_tests.sh
mono/tests/verifier/make_unary_test.sh
mono/tests/verifier/unverifiable_funptr_double_free_regression.il [deleted file]

index 64723da199fa7e7d2e4c993b467586b311d89daa..57036c31e32d3d43133a872a63f873fbbe7a9952 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-28 Rodrigo Kumpera  <rkumpera@novell.com>
+
+       * Makefile, *.sh, *.il: Change status of a bunch of a tests to reflect the metadata
+       verifier. First pass into making the test suite works under OSX.
+
 2010-01-08 Rodrigo Kumpera  <rkumpera@novell.com>
 
        * valid_iface_with_variant_constraint.cs: Constraints can be variant.
index dd0dfaa1c159f687238b2557cc811d9d2b8618a2..3b5f79f0b22d18f23ca8cfccfbb647d322ea536a 100644 (file)
@@ -57,9 +57,9 @@ run-test: compile-stamp
                if [ "$$FIRST" == "strict" ]; \
                then \
                        #in strict more it must fail under strict check and pass under non-strict check \
-                       ../../metadata/pedump --verify error,warn,cls,code $$TEST.exe >/dev/null 2>/dev/null; \
+                       ../../metadata/pedump --verify partial-md,error,warn,cls,code $$TEST.exe >/dev/null 2>/dev/null; \
                        R1=$$?; \
-                       ../../metadata/pedump --verify error,warn,cls,code,non-strict $$TEST.exe >/dev/null 2>/dev/null; \
+                       ../../metadata/pedump --verify partial-md,error,warn,cls,code,non-strict $$TEST.exe >/dev/null 2>/dev/null; \
                        R2=$$?; \
                        if [ $$R1 != 2 ] && [ $$R1 != 3 ]; then \
                                echo "$$TEST is strict but did not fail under strict check, got $${R1} but expected 2 or 3"; \
@@ -70,9 +70,9 @@ run-test: compile-stamp
                        fi \
                elif [ "$$FIRST" == "typeunverifiable" ]; then \
                        #in type unverifiable more it must fail under verifiable mode but it's ok under valid mode \
-                       ../../metadata/pedump --verify error,warn,cls,code $$TEST.exe  >/dev/null 2>/dev/null; \
+                       ../../metadata/pedump --verify partial-md,error,warn,cls,code $$TEST.exe  >/dev/null 2>/dev/null; \
                        R1=$$?; \
-                       ../../metadata/pedump --verify error,warn,cls,code,valid-only $$TEST.exe  >/dev/null 2>/dev/null; \
+                       ../../metadata/pedump --verify partial-md,error,warn,cls,code,valid-only $$TEST.exe  >/dev/null 2>/dev/null; \
                        R2=$$?; \
                        if [ $$R1 != 3 ]; then \
                                echo "$$TEST is type unverifiable but did not fail under verifiable check, got $${R1} but expected 3"; \
@@ -82,7 +82,7 @@ run-test: compile-stamp
                                echo "$$TEST is type unverifiable but did not pass under non-strict check, got $${R2} but expected 0"; \
                        fi \
                elif [ $$RES != 99 ]; then \
-                       ../../metadata/pedump --verify error,warn,cls,code $$TEST.exe >/dev/null 2>/dev/null; \
+                       ../../metadata/pedump --verify partial-md,error,warn,cls,code $$TEST.exe >/dev/null 2>/dev/null; \
                        R=$$?; \
                        if [ $$R != $$RES ]; then \
                                echo "$$TEST failed expected $$RES but got $$R"; \
diff --git a/mono/tests/verifier/invalid_funptr_double_free_regression.il b/mono/tests/verifier/invalid_funptr_double_free_regression.il
new file mode 100644 (file)
index 0000000..2e5a1db
--- /dev/null
@@ -0,0 +1,125 @@
+.assembly extern mscorlib
+{
+  .ver 2:0:0:0
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+}
+.assembly extern System.Core
+{
+  .ver 3:5:0:0
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+}
+.assembly 'test-anon-01'
+{
+  .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 'test-anon-01.exe' // GUID = {38A511CD-E5D7-4DA2-88C0-A137887BAFBC}
+
+
+  .class public auto ansi beforefieldinit Test
+       extends [mscorlib]System.Object
+  {
+    .field  private static  class [System.Core]System.Func`1<!!0> '<>f__am$cache0'
+    .custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::'.ctor'() =  (01 00 00 00 ) // ....
+
+
+    // 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 Test::.ctor
+
+    // method line 2
+    .method private static  hidebysig 
+           default class [System.Core]System.Func`1<!!T> XX<T> ()  cil managed 
+    {
+        // Method begins at RVA 0x20f4
+       // Code size 32 (0x20)
+       .maxstack 4
+       .locals init (
+               class [System.Core]System.Func`1<!!T>   V_0)
+       IL_0000:  ldsfld class [System.Core]System.Func`1<!!0> Test::'<>f__am$cache0'
+       IL_0005:  brtrue.s IL_0018
+
+       IL_0007:  ldnull 
+       IL_0008:  ldftn !!0 class Test::'<XX>m__0'<!!0> ()
+       IL_000e:  newobj instance void class [System.Core]System.Func`1<!!T>::'.ctor'(object, native int)
+       IL_0013:  stsfld class [System.Core]System.Func`1<!!0> Test::'<>f__am$cache0'
+       IL_0018:  ldsfld class [System.Core]System.Func`1<!!0> Test::'<>f__am$cache0'
+       IL_001d:  stloc.0 
+       IL_001e:  ldloc.0 
+       IL_001f:  ret 
+    } // end of method Test::XX
+
+    // method line 3
+    .method public static  hidebysig 
+           default int32 Main ()  cil managed 
+    {
+        // Method begins at RVA 0x2120
+       .entrypoint
+       // Code size 103 (0x67)
+       .maxstack 20
+       IL_0000:  call class [System.Core]System.Func`1<!!0> class Test::XX<bool> ()
+       IL_0005:  callvirt instance !0 class [System.Core]System.Func`1<bool>::Invoke()
+       IL_000a:  box [mscorlib]System.Boolean
+       IL_000f:  call instance class [mscorlib]System.Type object::GetType()
+       IL_0014:  ldtoken [mscorlib]System.Boolean
+       IL_0019:  call class [mscorlib]System.Type class [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+       IL_001e:  beq IL_0025
+
+       IL_0023:  ldc.i4.1 
+       IL_0024:  ret 
+       IL_0025:  call class [System.Core]System.Func`1<!!0> class Test::XX<int32> ()
+       IL_002a:  callvirt instance !0 class [System.Core]System.Func`1<int32>::Invoke()
+       IL_002f:  box [mscorlib]System.Int32
+       IL_0034:  call instance class [mscorlib]System.Type object::GetType()
+       IL_0039:  ldtoken [mscorlib]System.Int32
+       IL_003e:  call class [mscorlib]System.Type class [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+       IL_0043:  beq IL_004a
+
+       IL_0048:  ldc.i4.1 
+       IL_0049:  ret 
+       IL_004a:  call class [System.Core]System.Func`1<!!0> class Test::XX<object> ()
+       IL_004f:  callvirt instance !0 class [System.Core]System.Func`1<object>::Invoke()
+       IL_0054:  brfalse IL_005b
+
+       IL_0059:  ldc.i4.2 
+       IL_005a:  ret 
+       IL_005b:  ldstr "OK"
+       IL_0060:  call void class [mscorlib]System.Console::WriteLine(string)
+       IL_0065:  ldc.i4.0 
+       IL_0066:  ret 
+    } // end of method Test::Main
+
+    // method line 4
+    .method private static  hidebysig 
+           default !!T '<XX>m__0'<T> ()  cil managed 
+    {
+        .custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::'.ctor'() =  (01 00 00 00 ) // ....
+
+        // Method begins at RVA 0x2194
+       // Code size 12 (0xc)
+       .maxstack 2
+       .locals init (
+               !!T     V_0,
+               !!T     V_1)
+       IL_0000:  ldloca.s 0
+       IL_0002:  initobj !!0
+       IL_0008:  ldloc.0 
+       IL_0009:  ret 
+       IL_000a:  ldloc.1 
+       IL_000b:  ret 
+    } // end of method Test::<XX>m__0
+
+  } // end of class Test
+
index 8d2c1863c5e13ae60aeeba18faa275c2ce47e269..1585014571ae8e1d7463b7cfa9214a172efe22c6 100755 (executable)
@@ -1,5 +1,10 @@
 #! /bin/sh
 
+SED="sed"
+if [ `which gsed` ] ; then 
+       SED="gsed"
+fi
+
 TEST_NAME=$1
 TEST_VALIDITY=$2
 TEST_TYPE1=$3
@@ -30,9 +35,9 @@ if [ "$T2_REF" == "0" ]; then
        fi
 fi
 
-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
+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
-sed -e "s/EXTRA_OPS/${TEST_EXTRA_OPS}/g" -e "s/TYPE1/${TEST_TYPE1}/g" -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/TYPE2/${TEST_TYPE2}/g"  -e "s/TYPE3/${TEST_TYPE3}/g"  -e "s/INIT_LOCS/${INIT_LOCS}/g"  -e "s/INIT_IL/${INIT_IL}/g"> $TEST_FILE <<//EOF
+$SED -e "s/EXTRA_OPS/${TEST_EXTRA_OPS}/g" -e "s/TYPE1/${TEST_TYPE1}/g" -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/TYPE2/${TEST_TYPE2}/g"  -e "s/TYPE3/${TEST_TYPE3}/g"  -e "s/INIT_LOCS/${INIT_LOCS}/g"  -e "s/INIT_IL/${INIT_IL}/g"> $TEST_FILE <<//EOF
 
 .assembly extern mscorlib
 {
index 928c6c67ac20857dc4e73722594dc6a031447d83..4d15bfd486ea77a7d682415b82544d6a330c6bd9 100755 (executable)
@@ -1,5 +1,10 @@
 #! /bin/sh
 
+SED="sed"
+if [ `which gsed` ] ; then 
+       SED="gsed"
+fi
+
 TEST_NAME=$1
 TEST_VALIDITY=$2
 TEST_TYPE1=$3
@@ -17,9 +22,9 @@ if [ "$T2_REF" == "0" ]; then
        INIT_IL="ldloca.s 2\n\tstloc.1"
 fi
 
-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
+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
-sed -e "s/EXTRA_OPS/${TEST_EXTRA_OPS}/g" -e "s/TYPE1/${TEST_TYPE1}/g" -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/TYPE2/${TEST_TYPE2}/g"  -e "s/TYPE3/${TEST_TYPE3}/g"  -e "s/INIT_LOCS/${INIT_LOCS}/g"  -e "s/INIT_IL/${INIT_IL}/g"> $TEST_FILE <<//EOF
+$SED -e "s/EXTRA_OPS/${TEST_EXTRA_OPS}/g" -e "s/TYPE1/${TEST_TYPE1}/g" -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/TYPE2/${TEST_TYPE2}/g"  -e "s/TYPE3/${TEST_TYPE3}/g"  -e "s/INIT_LOCS/${INIT_LOCS}/g"  -e "s/INIT_IL/${INIT_IL}/g"> $TEST_FILE <<//EOF
 
 .assembly extern mscorlib
 {
index 96df2082e00d60d2a124aeff042a5e925f8f1ea5..ac0c82530f7870c4ee1f2601c2aa03734a104e81 100755 (executable)
@@ -1,5 +1,10 @@
 #! /bin/sh
 
+SED="sed"
+if [ `which gsed` ] ; then 
+       SED="gsed"
+fi
+
 TEST_NAME=$1
 TEST_VALIDITY=$2
 TEST_OP=$3
@@ -9,9 +14,9 @@ TEST_TYPE2=$5
 TEST_NAME=${TEST_VALIDITY}_${TEST_NAME}
 TEST_FILE=${TEST_NAME}_generated.il
 echo $TEST_FILE
-TEST_TYPE1=`echo $TEST_TYPE1 | sed -s 's/&/\\\&/'`
-TEST_TYPE2=`echo $TEST_TYPE2 | sed -s 's/&/\\\&/'`
-sed -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/TYPE1/${TEST_TYPE1}/g" -e "s/TYPE2/${TEST_TYPE2}/g" -e "s/OPCODE/${TEST_OP}/g" > $TEST_FILE <<//EOF
+TEST_TYPE1=`echo $TEST_TYPE1 | $SED -s 's/&/\\\&/'`
+TEST_TYPE2=`echo $TEST_TYPE2 | $SED -s 's/&/\\\&/'`
+$SED -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/TYPE1/${TEST_TYPE1}/g" -e "s/TYPE2/${TEST_TYPE2}/g" -e "s/OPCODE/${TEST_OP}/g" > $TEST_FILE <<//EOF
 
 // VALIDITY CIL which breaks the ECMA-335 rules. 
 // this CIL should fail verification by a conforming CLI verifier.
index 3b0365cb2ac50a80d5b98e59d8c1475eecd2ae49..412c9c36ddcfa95c8a737cd6fec2fb22d55bb108 100755 (executable)
@@ -327,7 +327,7 @@ do
     I=`expr $I + 1`
   done
 
-  ./make_unary_test.sh conv_op_${J}_${I} badmd $OP "$TYPE" "typedref&"
+  ./make_unary_test.sh conv_op_${J}_${I} invalid $OP "typedref&"
   J=`expr $J + 1`
   I=1
 done
@@ -435,7 +435,7 @@ do
   ./make_store_test.sh coercion_78_${I} unverifiable "$OP" typedref 'native int'
   ./make_store_test.sh coercion_89_${I} unverifiable "$OP" typedref int64
   ./make_store_test.sh coercion_80_${I} unverifiable "$OP" typedref float64
-  ./make_store_test.sh coercion_81_${I} badmd "$OP" typedref 'typedref&'
+  ./make_store_test.sh coercion_81_${I} invalid "$OP" typedref 'typedref&'
   ./make_store_test.sh coercion_82_${I} unverifiable "$OP" typedref object
   I=`expr $I + 1`
 done
@@ -2222,13 +2222,18 @@ done
 #for T1 in "int8" "int64" "float64" "object" "string" "class Class" "int32[]" "int32[,]" "valuetype MyStruct" "valuetype MyStruct2" "int32 *" "valuetype MyStruct *" "method int32 *(int32)"
 for T1 in "native int" "int8*" "typedref" 
 do
-       for T2 in "int8" "int64" "float64" "object" "string" "class Class" "int32[]" "int32[,]" "valuetype MyStruct" "valuetype MyStruct2"   "int32 *" "valuetype MyStruct *" "method int32 *(int32)" "native int"  "typedref" "typedref\&" "class Template\`1<object>" "valuetype StructTemplate\`1<object>" "valuetype StructTemplate2\`1<object>"
+       for T2 in "int8" "int64" "float64" "object" "string" "class Class" "int32[]" "int32[,]" "valuetype MyStruct" "valuetype MyStruct2"   "int32 *" "valuetype MyStruct *" "method int32 *(int32)" "native int"  "typedref" "class Template\`1<object>" "valuetype StructTemplate\`1<object>" "valuetype StructTemplate2\`1<object>"
        do 
                ./make_ldobj_test.sh ldobj_${I} unverifiable "${T1}" "${T2}"
                I=`expr $I + 1`
        done
 done
 
+for T1 in "native int" "int8*" "typedref" 
+do
+       ./make_ldobj_test.sh ldobj_${I} invalid "${T1}" "typedref\&"
+       I=`expr $I + 1`
+done
 
 
 
@@ -3665,15 +3670,15 @@ do
 done
 
 
-for TYPE in "int32*" "typedref" "method int32 *(int32)"
+for TYPE in "int32*" "method int32 *(int32)"
 do
        ./make_stobj_test.sh stobj_simple_${I} unverifiable "$TYPE" "$TYPE\&" "$TYPE" 
        I=`expr $I + 1`
 done
 
-for TYPE in "int32\&" "void"
+for TYPE in "int32\&" "void" "typedref"
 do
-       ./make_stobj_test.sh stobj_simple_${I} badmd "$TYPE" "$TYPE\&" "$TYPE" 
+       ./make_stobj_test.sh stobj_simple_${I} invalid "$TYPE" "$TYPE\&" "$TYPE" 
        I=`expr $I + 1`
 done
 
@@ -3789,16 +3794,16 @@ do
 done
 
 #should be able to use unmanaged types
-for TYPE in "int32*" "typedref" "method int32 *(int32)"
+for TYPE in "int32*" "method int32 *(int32)"
 do
        ./make_cpobj_test.sh cpobj_simple_${I} unverifiable "${TYPE}\&" "${TYPE}\&" "${TYPE}"
        I=`expr $I + 1`
 done
 
 #should be able to use invalid types
-for TYPE in "int32\&" "void"
+for TYPE in "int32\&" "void" "typedref"
 do
-       ./make_cpobj_test.sh cpobj_simple_${I} badmd "${TYPE}\&" "${TYPE}\&" "${TYPE}"
+       ./make_cpobj_test.sh cpobj_simple_${I} invalid "${TYPE}\&" "${TYPE}\&" "${TYPE}"
        I=`expr $I + 1`
 done
 
@@ -4142,7 +4147,8 @@ done
 
 #call conv
 ./make_delegate_compat_test.sh delegate_bad_cconv_1 unverifiable int32 int32 int32 int32 "default" "vararg"
-./make_delegate_compat_test.sh delegate_bad_cconv_2 unverifiable int32 int32 int32 int32 "vararg" "    "
+#This is invalid because we don't properly decode memberref signatures
+./make_delegate_compat_test.sh delegate_bad_cconv_2 invalid int32 int32 int32 int32 "vararg" " "
 
 #return type
 
index da28885f2409cac9c1f6ce99765ea9ba1f072160..7091c3d260b099c7f35e23bb1ddea1624aad4fb5 100755 (executable)
@@ -1,14 +1,19 @@
 #! /bin/sh
 
+SED="sed"
+if [ `which gsed` ] ; then 
+       SED="gsed"
+fi
+
 TEST_NAME=$1
 TEST_VALIDITY=$2
 TEST_OP=$3
 TEST_TYPE1=$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
+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/TYPE1/${TEST_TYPE1}/g" -e "s/LOAD_OPCODE/${TEST_LOAD_OP}/g" > $TEST_FILE <<//EOF
+TEST_TYPE1=`echo $TEST_TYPE1 | $SED -s 's/&/\\\&/'`
+$SED -e "s/OPCODE/${TEST_OP}/g" -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/TYPE1/${TEST_TYPE1}/g" -e "s/LOAD_OPCODE/${TEST_LOAD_OP}/g" > $TEST_FILE <<//EOF
 
 // VALIDITY CIL which breaks the ECMA-335 rules. 
 // this CIL should fail verification by a conforming CLI verifier.
@@ -47,7 +52,6 @@ sed -e "s/OPCODE/${TEST_OP}/g" -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/TYPE1/${
     .field [0] private int32 privateIntVal
     .field [0] public int32 publicIntVal
     .field [4] public int32 intVal
-    //.field [4] public object objVal
 }
 
 .method public static int32 Main() cil managed
diff --git a/mono/tests/verifier/unverifiable_funptr_double_free_regression.il b/mono/tests/verifier/unverifiable_funptr_double_free_regression.il
deleted file mode 100644 (file)
index 2e5a1db..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-.assembly extern mscorlib
-{
-  .ver 2:0:0:0
-  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
-}
-.assembly extern System.Core
-{
-  .ver 3:5:0:0
-  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
-}
-.assembly 'test-anon-01'
-{
-  .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 'test-anon-01.exe' // GUID = {38A511CD-E5D7-4DA2-88C0-A137887BAFBC}
-
-
-  .class public auto ansi beforefieldinit Test
-       extends [mscorlib]System.Object
-  {
-    .field  private static  class [System.Core]System.Func`1<!!0> '<>f__am$cache0'
-    .custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::'.ctor'() =  (01 00 00 00 ) // ....
-
-
-    // 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 Test::.ctor
-
-    // method line 2
-    .method private static  hidebysig 
-           default class [System.Core]System.Func`1<!!T> XX<T> ()  cil managed 
-    {
-        // Method begins at RVA 0x20f4
-       // Code size 32 (0x20)
-       .maxstack 4
-       .locals init (
-               class [System.Core]System.Func`1<!!T>   V_0)
-       IL_0000:  ldsfld class [System.Core]System.Func`1<!!0> Test::'<>f__am$cache0'
-       IL_0005:  brtrue.s IL_0018
-
-       IL_0007:  ldnull 
-       IL_0008:  ldftn !!0 class Test::'<XX>m__0'<!!0> ()
-       IL_000e:  newobj instance void class [System.Core]System.Func`1<!!T>::'.ctor'(object, native int)
-       IL_0013:  stsfld class [System.Core]System.Func`1<!!0> Test::'<>f__am$cache0'
-       IL_0018:  ldsfld class [System.Core]System.Func`1<!!0> Test::'<>f__am$cache0'
-       IL_001d:  stloc.0 
-       IL_001e:  ldloc.0 
-       IL_001f:  ret 
-    } // end of method Test::XX
-
-    // method line 3
-    .method public static  hidebysig 
-           default int32 Main ()  cil managed 
-    {
-        // Method begins at RVA 0x2120
-       .entrypoint
-       // Code size 103 (0x67)
-       .maxstack 20
-       IL_0000:  call class [System.Core]System.Func`1<!!0> class Test::XX<bool> ()
-       IL_0005:  callvirt instance !0 class [System.Core]System.Func`1<bool>::Invoke()
-       IL_000a:  box [mscorlib]System.Boolean
-       IL_000f:  call instance class [mscorlib]System.Type object::GetType()
-       IL_0014:  ldtoken [mscorlib]System.Boolean
-       IL_0019:  call class [mscorlib]System.Type class [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
-       IL_001e:  beq IL_0025
-
-       IL_0023:  ldc.i4.1 
-       IL_0024:  ret 
-       IL_0025:  call class [System.Core]System.Func`1<!!0> class Test::XX<int32> ()
-       IL_002a:  callvirt instance !0 class [System.Core]System.Func`1<int32>::Invoke()
-       IL_002f:  box [mscorlib]System.Int32
-       IL_0034:  call instance class [mscorlib]System.Type object::GetType()
-       IL_0039:  ldtoken [mscorlib]System.Int32
-       IL_003e:  call class [mscorlib]System.Type class [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
-       IL_0043:  beq IL_004a
-
-       IL_0048:  ldc.i4.1 
-       IL_0049:  ret 
-       IL_004a:  call class [System.Core]System.Func`1<!!0> class Test::XX<object> ()
-       IL_004f:  callvirt instance !0 class [System.Core]System.Func`1<object>::Invoke()
-       IL_0054:  brfalse IL_005b
-
-       IL_0059:  ldc.i4.2 
-       IL_005a:  ret 
-       IL_005b:  ldstr "OK"
-       IL_0060:  call void class [mscorlib]System.Console::WriteLine(string)
-       IL_0065:  ldc.i4.0 
-       IL_0066:  ret 
-    } // end of method Test::Main
-
-    // method line 4
-    .method private static  hidebysig 
-           default !!T '<XX>m__0'<T> ()  cil managed 
-    {
-        .custom instance void class [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::'.ctor'() =  (01 00 00 00 ) // ....
-
-        // Method begins at RVA 0x2194
-       // Code size 12 (0xc)
-       .maxstack 2
-       .locals init (
-               !!T     V_0,
-               !!T     V_1)
-       IL_0000:  ldloca.s 0
-       IL_0002:  initobj !!0
-       IL_0008:  ldloc.0 
-       IL_0009:  ret 
-       IL_000a:  ldloc.1 
-       IL_000b:  ret 
-    } // end of method Test::<XX>m__0
-
-  } // end of class Test
-