2005-01-17 Zoltan Varga <vargaz@freemail.hu>
authorZoltan Varga <vargaz@gmail.com>
Sun, 16 Jan 2005 23:05:03 +0000 (23:05 -0000)
committerZoltan Varga <vargaz@gmail.com>
Sun, 16 Jan 2005 23:05:03 +0000 (23:05 -0000)
* exceptions.cs basic-long.cs: Add test for checked ulong->int
conversion.

* inssel-long.brg: Implement long_conv_to_ovf_i4_un. Fixes #71319.

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

mono/mini/ChangeLog
mono/mini/basic-long.cs
mono/mini/exceptions.cs
mono/mini/inssel-long.brg

index 2fcae41c7e08f2ccc0af5a5a70a438c9d01b99fa..859fc5768d53bdcd996a65515239a203922fd03f 100644 (file)
@@ -1,5 +1,10 @@
 2005-01-17  Zoltan Varga  <vargaz@freemail.hu>
 
+       * exceptions.cs basic-long.cs: Add test for checked ulong->int 
+       conversion.
+
+       * inssel-long.brg: Implement long_conv_to_ovf_i4_un. Fixes #71319.
+
        * inssel-long.brg: Fix conv.ovf.i8 when run on an int32. Fixes
        #71320.
 
index a09442ccc23322611bd154bdea09bc886c1ffa60..f66f2f0dff8b316c64d7762a64b37dcc0d153f8a 100644 (file)
@@ -732,6 +732,14 @@ class Tests {
                }
        }
 
+       static int test_1234_checked_i4_cast () {
+               ulong ul = 1234;
+
+               checked {
+                       return (int)ul;
+               }
+       }
+
        static int test_10_int_uint_compare () {
                uint size = 10;
                int j = 0;
index f28cdfca77da3e8a40f79447753da0d8751aa7cb..0f42f004fc6058c884855dabf1c79f533164300a 100644 (file)
@@ -1064,6 +1064,20 @@ class Tests {
                if (failed)
                        return 9;
 
+               try {
+                       ulong ul = (long)(System.Int32.MaxValue) + 1;
+                       failed = true;
+                       checked {
+                               a = (int)ul;
+                       }
+               }
+               catch (OverflowException) {
+                       failed = false;
+               }
+               if (failed)
+                       return 10;
+
+
                {
                        int i; 
                        float f = 1.1f;
index 91578046b72856e2a2175eb8844489a633d02b9b..4cd1b505c169e4028a428d64b62d73174c3ee236 100644 (file)
@@ -272,6 +272,12 @@ reg: OP_LCONV_TO_OVF_I4 (reg) {
        MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, state->left->reg1);
 }
 
+reg: OP_LCONV_TO_OVF_I4_UN (reg) {
+       MONO_EMIT_NEW_COMPARE_IMM (s, state->left->reg1, 0x7fffffff);
+       MONO_EMIT_NEW_COND_EXC (s, GT, "OverflowException");
+       MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, state->left->reg1);
+}
+
 reg: OP_LCONV_TO_OVF_U4_UN (reg) {
        MONO_EMIT_NEW_COMPARE_IMM (s, state->left->reg1, 0xffffffff);
        MONO_EMIT_NEW_COND_EXC (s, GT_UN, "OverflowException");