2007-03-17 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Sat, 17 Mar 2007 14:31:33 +0000 (14:31 -0000)
committerZoltan Varga <vargaz@gmail.com>
Sat, 17 Mar 2007 14:31:33 +0000 (14:31 -0000)
* inssel.brg (SWITCH): Use an integer comparison. Fixes #80738.

* basic.cs: Add new regression test.

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

mono/mini/ChangeLog
mono/mini/basic.cs
mono/mini/inssel.brg

index cae718ad0fc6398e2b3473800cf4d02e9eacec82..acc2a60428ff91f2b93571415f229d8082dd79b9 100644 (file)
@@ -1,3 +1,9 @@
+2007-03-17  Zoltan Varga  <vargaz@gmail.com>
+
+       * inssel.brg (SWITCH): Use an integer comparison. Fixes #80738.
+
+       * basic.cs: Add new regression test.
+
 2007-03-17  Zoltan Varga  <vargaz@gmail.com>
 
        * mini-ia64.c (mono_arch_emit_prolog): Fix an assert when a function has too
index 45e449430939e74bc54eae78956383f035d0c612..4912c116d4f4caedc8cf136f6306b6636103de4b 100644 (file)
@@ -1275,4 +1275,23 @@ class Tests {
                return 0;
        }
 
+
+       public enum RegistryHive
+       {
+               ClassesRoot = -2147483648,
+               Users = -2147483645
+       }
+
+       public static int test_0_regress_switch_minint_80738 () {
+               RegistryHive h = RegistryHive.ClassesRoot;
+
+               switch (h) {
+               case RegistryHive.ClassesRoot:
+                       return 0;
+               case RegistryHive.Users:
+                       break;
+               }
+
+               return 1;
+       }
 }
index fb24346c1c4fe27675a13426dbaa07a9c45a0dd0..3d08d41087b02eca6dca5fe7ea39eb92f3122bb8 100644 (file)
@@ -785,8 +785,8 @@ stmt: CEE_SWITCH (reg) "2" {
        
        MONO_NEW_LABEL (s, label);
 
-       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->left->reg1, n);
-       MONO_EMIT_NEW_BRANCH_BLOCK (s, CEE_BGE_UN, tree->inst_many_bb [n]);
+       MONO_EMIT_NEW_BIALU_IMM (s, OP_ICOMPARE_IMM, -1, state->left->reg1, n);
+       MONO_EMIT_NEW_BRANCH_BLOCK (s, OP_IBGE_UN, tree->inst_many_bb [n]);
        if (sizeof (gpointer) == 8)
                MONO_EMIT_NEW_BIALU_IMM (s, OP_SHL_IMM, offset_reg, state->left->reg1, 3);
        else