2007-02-22 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Thu, 22 Feb 2007 16:34:28 +0000 (16:34 -0000)
committerZoltan Varga <vargaz@gmail.com>
Thu, 22 Feb 2007 16:34:28 +0000 (16:34 -0000)
* mini.c (type_from_op): Convert CEE_CONV_U to OP_LCONV_TO_U when the argument is
a pointer on 64 bit systems. Fixes #80190.

* iltests.il: Add new regression test.

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

mono/mini/ChangeLog
mono/mini/iltests.il
mono/mini/mini.c

index a2108b15b86dda2c62c93d58a22892c3a6d21551..7006bce835dd9fc8ade451400169cd6ac37042bf 100644 (file)
@@ -1,3 +1,9 @@
+2007-02-22  Zoltan Varga  <vargaz@gmail.com>
+
+       * mini.c (type_from_op): Convert CEE_CONV_U to OP_LCONV_TO_U when the argument is
+       a pointer on 64 bit systems. Fixes #80190.
+
+       * iltests.il: Add new regression test.
 
 Tue Feb 20 11:33:28 CET 2007 Paolo Molaro <lupus@ximian.com>
 
index eeebe6ef3a6e9bb6acd903707aa1003e1251c040..cb1ca977b23c6a2d9f043a85204e660bd88fd812 100644 (file)
@@ -1351,4 +1351,22 @@ COND:   ldloc.0
         IL_000f:  ret
     }
 
+       .method private static default int32 test_0_regresss_80190 () cil managed
+       {
+           .maxstack  2
+           .locals init (int32 V_0,
+                    int32* V_1)
+           IL_0000:  nop
+           IL_0001:  nop
+           IL_0002:  ldloca.s   V_0
+           IL_0004:  conv.u
+           IL_0005:  stloc.1
+           IL_0006:  ldloc.1
+           IL_0007:  ldc.i4.3
+           IL_0008:  stind.i4
+           IL_0009:  nop
+                                 ldc.i4.0
+                                 ret
+       }
+
 }
index 14d2d34d85df716b3c5eb8db20e91c718a1010dc..cd1b5c1872814618b325560441533eee7687993f 100644 (file)
@@ -1415,8 +1415,12 @@ type_from_op (MonoInst *ins) {
                ins->type = STACK_PTR;
                switch (ins->inst_i0->type) {
                case STACK_I4:
+                       break;
                case STACK_PTR:
                case STACK_MP:
+#if SIZEOF_VOID_P == 8
+                       ins->opcode = OP_LCONV_TO_U;
+#endif
                        break;
                case STACK_I8:
                        ins->opcode = OP_LCONV_TO_U;