Hi Guys,

  I am applying the patch below in what I hope will be accepted as an
  obvious fix for a build problem with the ARC, M32C and M32R backends.
  The problem looks like this:

    gcc/config/m32c/m32c.c: In function 'bool m32c_illegal_subreg_p(rtx)':
    gcc/config/m32c/m32c.c:3178:88: error: invalid conversion from 'int' to 
'machine_mode' [-fpermissive]
  It happens because all of these backends use an integer to hold a
  machine mode value instead of an enum.  The simple fix is to use the
  enum instead.

Cheers
  Nick

gcc/ChangeLog
2014-04-29  Nick Clifton  <ni...@redhat.com>

        * config/arc/arc.c (arc_select_cc_mode): Fix parentheses.
        (arc_init_reg_tables): Use a machine_mode enum to iterate over
        available modes.
        * config/m32r/m32r.c (init_reg_tables): Likewise.
        * config/m32c/m32c.c (m32c_illegal_subreg_p): Use a machine_mode
        enum to hold the modes.

Index: gcc/config/arc/arc.c
===================================================================
--- gcc/config/arc/arc.c        (revision 209890)
+++ gcc/config/arc/arc.c        (working copy)
@@ -994,7 +994,7 @@
   if (GET_MODE_CLASS (mode) == MODE_INT
       && y == const0_rtx
       && (op == EQ || op == NE
-         || ((op == LT || op == GE) && GET_MODE_SIZE (GET_MODE (x) <= 4))))
+         || ((op == LT || op == GE) && GET_MODE_SIZE (GET_MODE (x)) <= 4))))
     return CC_ZNmode;
 
   /* add.f for if (a+b) */
@@ -1133,18 +1133,20 @@
 
   for (i = 0; i < NUM_MACHINE_MODES; i++)
     {
-      switch (GET_MODE_CLASS (i))
+      enum machine_mode m = (enum machine_mode) i;
+
+      switch (GET_MODE_CLASS (m))
        {
        case MODE_INT:
        case MODE_PARTIAL_INT:
        case MODE_COMPLEX_INT:
-         if (GET_MODE_SIZE (i) <= 4)
+         if (GET_MODE_SIZE (m) <= 4)
            arc_mode_class[i] = 1 << (int) S_MODE;
-         else if (GET_MODE_SIZE (i) == 8)
+         else if (GET_MODE_SIZE (m) == 8)
            arc_mode_class[i] = 1 << (int) D_MODE;
-         else if (GET_MODE_SIZE (i) == 16)
+         else if (GET_MODE_SIZE (m) == 16)
            arc_mode_class[i] = 1 << (int) T_MODE;
-         else if (GET_MODE_SIZE (i) == 32)
+         else if (GET_MODE_SIZE (m) == 32)
            arc_mode_class[i] = 1 << (int) O_MODE;
          else
            arc_mode_class[i] = 0;
@@ -1151,13 +1153,13 @@
          break;
        case MODE_FLOAT:
        case MODE_COMPLEX_FLOAT:
-         if (GET_MODE_SIZE (i) <= 4)
+         if (GET_MODE_SIZE (m) <= 4)
            arc_mode_class[i] = 1 << (int) SF_MODE;
-         else if (GET_MODE_SIZE (i) == 8)
+         else if (GET_MODE_SIZE (m) == 8)
            arc_mode_class[i] = 1 << (int) DF_MODE;
-         else if (GET_MODE_SIZE (i) == 16)
+         else if (GET_MODE_SIZE (m) == 16)
            arc_mode_class[i] = 1 << (int) TF_MODE;
-         else if (GET_MODE_SIZE (i) == 32)
+         else if (GET_MODE_SIZE (m) == 32)
            arc_mode_class[i] = 1 << (int) OF_MODE;
          else
            arc_mode_class[i] = 0;
Index: gcc/config/m32c/m32c.c
===================================================================
--- gcc/config/m32c/m32c.c      (revision 209890)
+++ gcc/config/m32c/m32c.c      (working copy)
@@ -3159,7 +3159,7 @@
 {
   int offset;
   unsigned int i;
-  int src_mode, dest_mode;
+  enum machine_mode src_mode, dest_mode;
 
   if (GET_CODE (op) == MEM
       && ! m32c_legitimate_address_p (Pmode, XEXP (op, 0), false))
Index: gcc/config/m32r/m32r.c
===================================================================
--- gcc/config/m32r/m32r.c      (revision 209890)
+++ gcc/config/m32r/m32r.c      (working copy)
@@ -282,18 +282,20 @@
 
   for (i = 0; i < NUM_MACHINE_MODES; i++)
     {
-      switch (GET_MODE_CLASS (i))
+      enum machine_mode m = (enum machine_mode) i;
+      
+      switch (GET_MODE_CLASS (m))
        {
        case MODE_INT:
        case MODE_PARTIAL_INT:
        case MODE_COMPLEX_INT:
-         if (GET_MODE_SIZE (i) <= 4)
+         if (GET_MODE_SIZE (m) <= 4)
            m32r_mode_class[i] = 1 << (int) S_MODE;
-         else if (GET_MODE_SIZE (i) == 8)
+         else if (GET_MODE_SIZE (m) == 8)
            m32r_mode_class[i] = 1 << (int) D_MODE;
-         else if (GET_MODE_SIZE (i) == 16)
+         else if (GET_MODE_SIZE (m) == 16)
            m32r_mode_class[i] = 1 << (int) T_MODE;
-         else if (GET_MODE_SIZE (i) == 32)
+         else if (GET_MODE_SIZE (m) == 32)
            m32r_mode_class[i] = 1 << (int) O_MODE;
          else
            m32r_mode_class[i] = 0;
@@ -300,13 +302,13 @@
          break;
        case MODE_FLOAT:
        case MODE_COMPLEX_FLOAT:
-         if (GET_MODE_SIZE (i) <= 4)
+         if (GET_MODE_SIZE (m) <= 4)
            m32r_mode_class[i] = 1 << (int) SF_MODE;
-         else if (GET_MODE_SIZE (i) == 8)
+         else if (GET_MODE_SIZE (m) == 8)
            m32r_mode_class[i] = 1 << (int) DF_MODE;
-         else if (GET_MODE_SIZE (i) == 16)
+         else if (GET_MODE_SIZE (m) == 16)
            m32r_mode_class[i] = 1 << (int) TF_MODE;
-         else if (GET_MODE_SIZE (i) == 32)
+         else if (GET_MODE_SIZE (m) == 32)
            m32r_mode_class[i] = 1 << (int) OF_MODE;
          else
            m32r_mode_class[i] = 0;

Reply via email to