http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59934

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Now, if we want to "fix" this on the expmed.h side, either:
--- gcc/expmed.h    2014-01-03 11:40:57.228320531 +0100
+++ gcc/expmed.h    2014-01-24 18:30:12.513908749 +0100
@@ -221,9 +221,11 @@ expmed_mode_index (enum machine_mode mod
     case MODE_INT:
       return mode - MIN_MODE_INT;
     case MODE_PARTIAL_INT:
-      return mode - MIN_MODE_PARTIAL_INT + NUM_MODE_INT;
+      return (MIN_MODE_PARTIAL_INT == VOIDmode
+          ? 0 : mode - MIN_MODE_PARTIAL_INT + NUM_MODE_INT);
     case MODE_VECTOR_INT:
-      return mode - MIN_MODE_VECTOR_INT + NUM_MODE_IP_INT;
+      return (MIN_MODE_VECTOR_INT == VOIDmode
+          ? mode - MIN_MODE_VECTOR_INT + NUM_MODE_IP_INT);
     default:
       gcc_unreachable ();
     }

or
--- gcc/expmed.h    2014-01-03 11:40:57.228320531 +0100
+++ gcc/expmed.h    2014-01-24 18:34:01.806725352 +0100
@@ -221,8 +221,10 @@ expmed_mode_index (enum machine_mode mod
     case MODE_INT:
       return mode - MIN_MODE_INT;
     case MODE_PARTIAL_INT:
+      gcc_assert (MIN_MODE_PARTIAL_INT != VOIDmode);
       return mode - MIN_MODE_PARTIAL_INT + NUM_MODE_INT;
     case MODE_VECTOR_INT:
+      gcc_assert (MIN_MODE_VECTOR_INT != VOIDmode);
       return mode - MIN_MODE_VECTOR_INT + NUM_MODE_IP_INT;
     default:
       gcc_unreachable ();
should be enough to explain to the compiler that those cases really can't
happen and let gcc not emit the warnings.

Reply via email to