X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Filtests.il;h=30419d9178a1397dfea214d7105bf364b2f8363a;hb=30cddad5fb4c3d290906a6e6c33ecd8b07d8b48c;hp=203584e14338da1edef3dae599052cdafc11454b;hpb=95f1d9f467300b11da5b2defcfaec2f234f4ec0e;p=mono.git diff --git a/mono/mini/iltests.il b/mono/mini/iltests.il index 203584e1433..30419d9178a 100644 --- a/mono/mini/iltests.il +++ b/mono/mini/iltests.il @@ -2599,6 +2599,7 @@ END: .method public static default int32 test_0_wrap_non_exception_throws () cil managed { + .custom instance void [TestDriver]CategoryAttribute::.ctor(string) = ( 01 00 0C 21 49 4E 54 45 52 50 52 45 54 45 52 00 00 ) // ...!INTERPRETER. .try { newobj instance void class [mscorlib]System.Object::'.ctor'() throw @@ -2819,4 +2820,275 @@ END: pop ret } + + .method public static int32 test_2_fault () cil managed + { + .maxstack 16 + .locals init (int32 V_0) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + .try + { + .try + { + IL_0002: newobj instance void [mscorlib]System.Exception::.ctor() + IL_0007: throw + leave.s IL_0018 + } // end .try + fault + { + IL_0009: ldloc.0 + IL_000a: ldc.i4.1 + IL_000b: add + IL_000c: stloc.0 + endfinally + } // end handler + IL_000f: leave.s IL_0018 + + } // end .try + catch [mscorlib]System.Object + { + IL_0011: pop + IL_0012: ldloc.0 + IL_0013: ldc.i4.1 + IL_0014: add + IL_0015: stloc.0 + IL_0016: leave.s IL_0018 + + } // end handler + IL_0018: ldloc.0 + ret + } + + .method public static int32 test_0_fault_no_exception () cil managed + { + .maxstack 16 + .locals init (int32 V_0) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + .try + { + .try + { + leave.s IL_0018 + } // end .try + fault + { + IL_0009: ldloc.0 + IL_000a: ldc.i4.1 + IL_000b: add + IL_000c: stloc.0 + endfinally + } // end handler + IL_000f: leave.s IL_0018 + + } // end .try + catch [mscorlib]System.Object + { + IL_0011: pop + IL_0012: ldloc.0 + IL_0013: ldc.i4.1 + IL_0014: add + IL_0015: stloc.0 + IL_0016: leave.s IL_0018 + + } // end handler + IL_0018: ldloc.0 + ret + } + + .field private static int32 byte_val + .field private static int32 short_val + + .method static int32 widen_arguments (unsigned int8 a, int8 b, int16 c, unsigned int16 d) cil managed noinlining + { + .maxstack 4 + ldsfld int32 Tests::byte_val + starg.s 0 + ldarg.0 + ldc.i4 128 //0x80 + beq L_0 + + ldc.i4.1 + ret +L_0: + ldsfld int32 Tests::byte_val + starg.s 1 + ldarg.1 + ldc.i4 -128 //-0x80 + beq L_1 + + ldc.i4.2 + ret + +L_1: + ldsfld int32 Tests::short_val + starg.s 2 + ldarg.2 + ldc.i4 -32768 //-0x8000 + beq L_2 + + ldc.i4.3 + ret + +L_2: + ldsfld int32 Tests::short_val + starg.s 3 + ldarg.3 + ldc.i4 32768 //0x8000 + beq L_3 + + ldc.i4.4 + ret + +L_3: + ldc.i4.0 + ret + } + + .method public static int32 test_0_implicit_widen_of_argument_stores () cil managed + { + .maxstack 5 + /* + This test verifies that storing an I4 value from the evail stack into a local variable triggers proper widening. + The values are picked so storing them have different values depending on the sign'ness of the local variable. + */ + ldc.i4 0x180 + stsfld int32 Tests::byte_val + ldc.i4 0x18000 + stsfld int32 Tests::short_val + + ldc.i4.0 + ldc.i4.0 + ldc.i4.0 + ldc.i4.0 + call int32 Tests::widen_arguments (unsigned int8 a, int8 b, int16 c, unsigned int16 d) + ret + } + + .method public static int32 test_0_implicit_widen_of_local_stores () cil managed + { + .maxstack 4 + .locals init ( + unsigned int8 V_0, + int8 V_1, + int16 V_2, + unsigned int16 V_3) + + /* + This test verifies that storing an I4 value from the evail stack into a local variable triggers proper widening. + The values are picked so storing them have different values depending on the sign'ness of the local variable. + */ + ldc.i4 0x180 + stsfld int32 Tests::byte_val + ldc.i4 0x18000 + stsfld int32 Tests::short_val + + ldsfld int32 Tests::byte_val + stloc.0 + ldloc.0 + ldc.i4 128 //0x80 + beq L_0 + + ldc.i4.1 + ret +L_0: + ldsfld int32 Tests::byte_val + stloc.1 + ldloc.1 + ldc.i4 -128 //-0x80 + beq L_1 + + ldc.i4.2 + ret +L_1: + ldsfld int32 Tests::short_val + stloc.2 + ldloc.2 + ldc.i4 -32768 //-0x8000 + beq L_2 + + ldc.i4.3 + ret +L_2: + ldsfld int32 Tests::short_val + stloc.3 + ldloc.3 + ldc.i4 32768 //0x8000 + beq L_3 + + ldc.i4.4 + ret +L_3: + ldc.i4.0 + ret + } + + .method public static bool llvm_regress_59436 () { + // Code size 41 (0x29) + .maxstack 3 + .locals init (float64 V_0, + float64 V_1, + valuetype [mscorlib]System.Decimal V_2) + IL_0000: ldc.r8 1 + IL_0009: stloc.0 + IL_000a: ldc.r8 2 + IL_0013: stloc.1 + IL_0014: ldloc.0 + IL_0015: newobj instance void [mscorlib]System.Decimal::.ctor(float64) + IL_001a: ldloca.s V_2 + IL_001c: ldloc.1 + IL_001d: call instance void [mscorlib]System.Decimal::.ctor(float64) + IL_0022: ldloc.2 + IL_0023: call bool [mscorlib]System.Decimal::op_LessThanOrEqual(valuetype [mscorlib]System.Decimal, + valuetype [mscorlib]System.Decimal) + IL_0028: ret + } + + .method private hidebysig static void fail_inline() cil managed + { + // Code size 9 (0x9) + .maxstack 8 + IL_0000: ldc.i4.s 16 + IL_0002: conv.u + IL_0003: ldc.i4.1 + IL_0004: mul.ovf.un + IL_0005: localloc + IL_0007: pop + IL_0008: ret + } + + .method private hidebysig static int32 + always_inline(int32 op) cil managed aggressiveinlining + { + // Code size 24 (0x18) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0009 + + IL_0003: ldarg.0 + IL_0004: ldc.i4.2 + IL_0005: beq.s IL_000b + + IL_0007: br.s IL_000d + + IL_0009: ldc.i4.0 + IL_000a: ret + + IL_000b: ldc.i4.3 + IL_000c: ret + + IL_000d: call void Tests::fail_inline() + IL_0012: newobj instance void [mscorlib]System.Exception::.ctor() + IL_0017: throw + } + + .method public hidebysig static int32 test_3_regress_59608() cil managed + { + .maxstack 8 + IL_0000: ldc.i4.2 + IL_0001: call int32 Tests::always_inline(int32) + IL_000c: ret + } + }