diff mbox

Implement -Wswitch-fallthrough: other archs

Message ID 20160711195918.GC13963@redhat.com
State New
Headers show

Commit Message

Marek Polacek July 11, 2016, 7:59 p.m. UTC
2016-07-11  Marek Polacek  <polacek@redhat.com>

	PR c/7652
	* config/alpha/alpha.c (alpha_rtx_costs): Likewise.
	(alpha_legitimate_constant_p): Likewise.
	(alpha_emit_setcc): Likewise.
	(alpha_emit_xfloating_libcall): Likewise.
	(alpha_function_value_1): Likewise.
	(alpha_fold_builtin): Likewise.
	* config/alpha/predicates.md: Likewise.
	* config/arc/arc.c (arc_init): Likewise.
	(arc_print_operand): Likewise.
	(arc_rtx_costs): Likewise.
	(arc_legitimate_constant_p): Likewise.
	(arc_get_insn_variants): Likewise.
	(arc_ifcvt): Likewise.
	(arc_expand_atomic_op): Likewise.
	* config/arc/predicates.md: Likewise.
	* config/avr/avr-log.c (avr_log_vadump): Likewise.
	* config/avr/avr.c (ashrqi3_out): Likewise.
	(ashrhi3_out): Likewise.
	(avr_out_ashrpsi3): Likewise.
	(ashrsi3_out): Likewise.
	(avr_out_lshrpsi3): Likewise.
	(avr_rtx_costs_1): Likewise.
	* config/bfin/bfin.c (print_operand): Likewise.
	(bfin_rtx_costs): Likewise.
	* config/c6x/c6x.c (c6x_expand_compare): Likewise.
	(c6x_mem_operand): Likewise.
	(c6x_legitimate_address_p_1): Likewise.
	(count_unit_reqs): Likewise.
	(c6x_registers_update): Likewise.
	* config/c6x/c6x.h: Likewise.
	* config/c6x/predicates.md: Likewise.
	* config/cr16/cr16.c (cr16_address_cost): Likewise.
	(cr16_print_operand_address): Likewise.
	* config/cris/cris.c (cris_print_operand): Likewise.
	(cris_rtx_costs): Likewise.
	* config/epiphany/epiphany.c (epiphany_rtx_costs): Likewise.
	(epiphany_address_cost): Likewise.
	(epiphany_print_operand): Likewise.
	(epiphany_mode_needed): Likewise.
	(epiphany_mode_entry_exit): Likewise.
	(epiphany_insert_mode_switch_use): Likewise.
	* config/fr30/fr30.c (fr30_print_operand): Likewise.
	* config/frv/frv.c (frv_print_operand): Likewise.
	(frv_legitimate_address_p_1): Likewise.
	(frv_emit_movsi): Likewise.
	(frv_rtx_costs): Likewise.
	* config/h8300/h8300.c (h8300_print_operand): Likewise.
	(get_shift_alg): Likewise.
	(output_a_shift): Likewise.
	(compute_a_shift_length): Likewise.
	(compute_a_shift_cc): Likewise.
	* config/ia64/ia64.c (ia64_expand_vecint_compare): Likewise.
	(ia64_expand_atomic_op): Likewise.
	(ia64_print_operand): Likewise.
	(ia64_rtx_costs): Likewise.
	(group_barrier_needed): Likewise.
	(ia64_expand_vec_perm_const): Likewise.
	* config/ia64/predicates.md: Likewise.
	* config/iq2000/iq2000.c (iq2000_address_cost): Likewise.
	* config/lm32/lm32.c (lm32_rtx_costs): Likewise.
	* config/m32r/m32r.c (m32r_rtx_costs): Likewise.
	(m32r_print_operand): Likewise.
	* config/m68k/m68k.c (m68k_sched_md_init_global): Likewise.
	* config/m68k/m68k.h: Likewise.
	* config/mips/mips.c (mips_symbolic_constant_p): Likewise.
	(mips_symbol_insns_1): Likewise.
	(mips_const_insns): Likewise.
	(mips_set_reg_reg_cost): Likewise.
	(mips_rtx_costs): Likewise.
	(mips_output_order_conditional_branch): Likewise.
	(mips_expand_vec_perm_const): Likewise.
	* config/mmix/predicates.md: Likewise.
	* config/mn10300/mn10300.c (mn10300_print_operand): Likewise.
	(mn10300_rtx_costs): Likewise.
	(extract_bundle): Likewise.
	* config/mn10300/mn10300.md: Likewise.
	* config/msp430/msp430.c (msp430_initial_elimination_offset): Likewise.
	(msp430_print_operand): Likewise.
	* config/nds32/nds32-cost.c: Likewise.
	* config/nios2/nios2.c (nios2_legitimate_address_p): Likewise.
	(nios2_print_operand): Likewise.
	* config/pa/pa.c (hppa_rtx_costs): Likewise.
	* config/pdp11/pdp11.c (pdp11_rtx_costs): Likewise.
	* config/rl78/rl78-real.md: Likewise.
	* config/rl78/rl78.c (characterize_address): Likewise.
	(rl78_initial_elimination_offset): Likewise.
	* config/rx/rx.c (rx_print_operand_address): Likewise.
	(rx_print_operand): Likewise.
	(rx_option_override): Likewise.
	* config/s390/s390.c (s390_select_ccmode): Likewise.
	(s390_expand_atomic): Likewise.
	* config/sh/sh.c (sh_print_operand): Likewise.
	(output_branch): Likewise.
	(sh_rtx_costs): Likewise.
	* config/sh/sh.md: Likewise.
	* config/sparc/sparc.c (sparc_rtx_costs): Likewise.
	(sparc_emit_membar_for_model): Likewise.
	* config/spu/spu.c (classify_immediate): Likewise.
	* config/tilegx/tilegx.c (tilegx_emit_cc_test): Likewise.
	(tilegx_print_operand): Likewise.
	* config/tilepro/tilepro.c (tilepro_emit_cc_test): Likewise.
	(tilepro_print_operand): Likewise.
	* config/v850/v850.c (v850_print_operand): Likewise.
	* config/vax/vax.c (vax_rtx_costs): Likewise.
	* config/visium/visium.c (visium_expand_int_cstore): Likewise.
	(visium_expand_fp_cstore): Likewise.
	* config/xtensa/xtensa.c (xtensa_expand_atomic): Likewise.
	(xtensa_rtx_costs): Likewise.
diff mbox

Patch

diff --git gcc/gcc/config/alpha/alpha.c gcc/gcc/config/alpha/alpha.c
index 94fed102..66f8711 100644
--- gcc/gcc/config/alpha/alpha.c
+++ gcc/gcc/config/alpha/alpha.c
@@ -1400,6 +1400,7 @@  alpha_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno, int *total,
 	  return true;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case CONST_DOUBLE:
     case CONST_WIDE_INT:
@@ -1468,6 +1469,7 @@  alpha_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno, int *total,
 	  return false;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case ASHIFTRT:
     case LSHIFTRT:
@@ -1504,6 +1506,7 @@  alpha_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno, int *total,
 	  return false;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case ABS:
       if (! float_mode_p)
@@ -1512,6 +1515,7 @@  alpha_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno, int *total,
 	  return false;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case FLOAT:
     case UNSIGNED_FLOAT:
@@ -2130,6 +2134,7 @@  alpha_legitimate_constant_p (machine_mode mode, rtx x)
       if (GET_CODE (x) != SYMBOL_REF)
 	return true;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case SYMBOL_REF:
       /* TLS symbols are never valid.  */
@@ -2161,6 +2166,7 @@  alpha_legitimate_constant_p (machine_mode mode, rtx x)
       if (GET_MODE_SIZE (mode) != 8)
 	return false;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case CONST_INT:
       if (TARGET_BUILD_CONSTANTS)
@@ -2658,6 +2664,7 @@  alpha_emit_setcc (rtx operands[], machine_mode cmp_mode)
       if (cmp_mode == DImode && op1 == const0_rtx)
 	break;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case ORDERED:
       cmp_code = reverse_condition (code);
@@ -3095,6 +3102,7 @@  alpha_emit_xfloating_libcall (rtx func, rtx target, rtx operands[],
 	case VOIDmode:
 	  gcc_assert (CONST_INT_P (operands[i]));
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case DImode:
 	  reg = gen_rtx_REG (DImode, regno);
 	  regno += 1;
@@ -5787,6 +5795,7 @@  alpha_function_value_1 (const_tree valtype, const_tree func ATTRIBUTE_UNUSED,
       if (!(TARGET_ABI_OPEN_VMS && valtype && AGGREGATE_TYPE_P (valtype)))
         PROMOTE_MODE (mode, dummy, valtype);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case MODE_COMPLEX_INT:
     case MODE_VECTOR_INT:
@@ -7092,6 +7101,7 @@  alpha_fold_builtin (tree fndecl, int n_args, tree *op,
     case ALPHA_BUILTIN_ZAP:
       opint[1] ^= 0xff;
       /* FALLTHRU */
+      gcc_fallthrough ();
     case ALPHA_BUILTIN_ZAPNOT:
       return alpha_fold_builtin_zapnot (op, opint, op_const);
 
diff --git gcc/gcc/config/alpha/predicates.md gcc/gcc/config/alpha/predicates.md
index 24fa3c2..c902f3e 100644
--- gcc/gcc/config/alpha/predicates.md
+++ gcc/gcc/config/alpha/predicates.md
@@ -182,6 +182,7 @@ 
       if (register_operand (op, mode))
 	return 1;
       /* ... fall through ...  */
+      gcc_fallthrough ();
     case MEM:
       return ((TARGET_BWX || (mode != HImode && mode != QImode))
 	      && general_operand (op, mode));
diff --git gcc/gcc/config/arc/arc.c gcc/gcc/config/arc/arc.c
index c0aa075..735e861 100644
--- gcc/gcc/config/arc/arc.c
+++ gcc/gcc/config/arc/arc.c
@@ -734,6 +734,7 @@  arc_init (void)
 	    break;
 	  }
 	/* Fall through.  */
+	gcc_fallthrough ();
       default:
 	arc_multcost = COSTS_N_INSNS (30);
 	break;
@@ -3448,6 +3449,7 @@  arc_print_operand (FILE *file, rtx x, int code)
 	  break;
 	}
       /* Fall through.  Let output_addr_const deal with it.  */
+      gcc_fallthrough ();
     default :
       if (flag_pic
 	  || (GET_CODE (x) == CONST
@@ -4460,6 +4462,7 @@  arc_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	  }
       }
       /* FALLTHRU */
+      gcc_fallthrough ();
 
       /*  4 byte values can be fetched as immediate constants -
 	  let's give that the cost of an extra insn.  */
@@ -4609,6 +4612,7 @@  arc_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	  return true;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
     /* scc_insn expands into two insns.  */
     case GTU: case GEU: case LEU:
       if (mode == SImode)
@@ -5408,10 +5412,12 @@  arc_legitimate_constant_p (machine_mode mode, rtx x)
       if (SYMBOL_REF_TLS_MODEL (x))
 	return false;
       /* Fall through.  */
+      gcc_fallthrough ();
     case LABEL_REF:
       if (flag_pic)
 	return false;
       /* Fall through.  */
+      gcc_fallthrough ();
 
     default:
       break;
@@ -8035,6 +8041,7 @@  arc_get_insn_variants (rtx_insn *insn, int len, bool, bool target_p,
 	  ilv++;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
     case TYPE_BRCC_NO_DELAY_SLOT:
       /* doloop_fallback* patterns are TYPE_BRCC_NO_DELAY_SLOT for
 	 (delay slot) scheduling purposes, but they are longer.  */
@@ -8356,6 +8363,7 @@  arc_ifcvt (void)
 	      continue;
 	    }
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 	case 4: case 5:
 	  if (!NONDEBUG_INSN_P (insn))
 	    break;
@@ -9820,6 +9828,7 @@  arc_expand_atomic_op (enum rtx_code code, rtx mem, rtx val,
 	}
 
       /* FALLTHRU.  */
+      gcc_fallthrough ();
     default:
       x = gen_rtx_fmt_ee (code, mode, before, val);
       emit_insn (gen_rtx_SET (after, x));
diff --git gcc/gcc/config/arc/predicates.md gcc/gcc/config/arc/predicates.md
index f85f931..450b163 100644
--- gcc/gcc/config/arc/predicates.md
+++ gcc/gcc/config/arc/predicates.md
@@ -517,6 +517,7 @@ 
       if (GET_MODE (op) == CC_ZNmode)
 	return 1;
       /* Fall through.  */
+      gcc_fallthrough ();
     case CC_ZNmode: case CC_Cmode:
       return GET_MODE (op) == CCmode;
     default:
diff --git gcc/gcc/config/avr/avr-log.c gcc/gcc/config/avr/avr-log.c
index fe2cae4..3853471 100644
--- gcc/gcc/config/avr/avr-log.c
+++ gcc/gcc/config/avr/avr-log.c
@@ -229,6 +229,7 @@  avr_log_vadump (FILE *file, const char *caller, va_list ap)
               if (!current_pass)
                 return;
               /* FALLTHRU */
+	      gcc_fallthrough ();
 
             case '?':
               avr_vdump (file, caller, "%F[%f:%P]");
diff --git gcc/gcc/config/avr/avr.c gcc/gcc/config/avr/avr.c
index 18ed766..53d726e 100644
--- gcc/gcc/config/avr/avr.c
+++ gcc/gcc/config/avr/avr.c
@@ -6212,6 +6212,7 @@  ashrqi3_out (rtx_insn *insn, rtx operands[], int *len)
 	    break;
 
 	  /* fall through */
+	  gcc_fallthrough ();
 
 	case 7:
 	  *len = 2;
@@ -6377,6 +6378,7 @@  ashrhi3_out (rtx_insn *insn, rtx operands[], int *len)
 	    break;
 
 	  /* fall through */
+	  gcc_fallthrough ();
 
 	case 15:
 	  return *len = 3, ("lsl %B0"     CR_TAB
@@ -6434,6 +6436,7 @@  avr_out_ashrpsi3 (rtx_insn *insn, rtx *op, int *plen)
             break;
 
           /* fall through */
+	  gcc_fallthrough ();
 
         case 23:
           return avr_asm_len ("lsl %C0"     CR_TAB
@@ -6524,6 +6527,7 @@  ashrsi3_out (rtx_insn *insn, rtx operands[], int *len)
 	    break;
 
 	  /* fall through */
+	  gcc_fallthrough ();
 
 	case 31:
 	  if (AVR_HAVE_MOVW)
@@ -6936,6 +6940,7 @@  avr_out_lshrpsi3 (rtx_insn *insn, rtx *op, int *plen)
             break;
 
           /* fall through */
+	  gcc_fallthrough ();
 
         case 23:
           return avr_asm_len ("clr %A0"    CR_TAB
@@ -10040,6 +10045,7 @@  avr_rtx_costs_1 (rtx x, machine_mode mode, int outer_code ATTRIBUTE_UNUSED,
           return true;
         }
       /* FALLTHRU */
+      gcc_fallthrough ();
     case AND:
     case IOR:
       *total = COSTS_N_INSNS (GET_MODE_SIZE (mode));
diff --git gcc/gcc/config/bfin/bfin.c gcc/gcc/config/bfin/bfin.c
index 75ddcf0..6d7839d 100644
--- gcc/gcc/config/bfin/bfin.c
+++ gcc/gcc/config/bfin/bfin.c
@@ -1569,6 +1569,7 @@  print_operand (FILE *file, rtx x, char code)
 	    x = GEN_INT (-8 - INTVAL (x));
 
 	  /* fall through */
+	  gcc_fallthrough ();
 
 	case SYMBOL_REF:
 	  output_addr_const (file, x);
@@ -2936,6 +2937,7 @@  bfin_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno,
 	  return true;
 	}
       /* fall through */
+      gcc_fallthrough ();
 
     case SIGN_EXTEND:
     case ZERO_EXTEND:
diff --git gcc/gcc/config/c6x/c6x.c gcc/gcc/config/c6x/c6x.c
index 4cbe63c..778f76e 100644
--- gcc/gcc/config/c6x/c6x.c
+++ gcc/gcc/config/c6x/c6x.c
@@ -1499,6 +1499,7 @@  c6x_expand_compare (rtx comparison, machine_mode mode)
 	case UNGT:
 	  jump_code = EQ;
 	  /* fall through */
+	  gcc_fallthrough ();
 	case LE:
 	case GE:
 	  code1 = code == LE || code == UNGT ? LT : GT;
@@ -1508,9 +1509,11 @@  c6x_expand_compare (rtx comparison, machine_mode mode)
 	case UNORDERED:
 	  jump_code = EQ;
 	  /* fall through */
+	  gcc_fallthrough ();
 	case ORDERED:
 	  code3 = EQ;
 	  /* fall through */
+	  gcc_fallthrough ();
 	case LTGT:
 	  code1 = LT;
 	  code2 = GT;
@@ -2322,6 +2325,7 @@  c6x_mem_operand (rtx op, enum reg_class c, bool small_offset)
 	}
 
       /* fall through */
+      gcc_fallthrough ();
     case PRE_INC:
     case PRE_DEC:
     case PRE_MODIFY:
@@ -2372,6 +2376,7 @@  c6x_legitimate_address_p_1 (machine_mode mode, rtx x, bool strict,
 	return false;
 
       /* fall through */
+      gcc_fallthrough ();
     case PRE_INC:
     case PRE_DEC:
     case POST_INC:
@@ -2384,6 +2389,7 @@  c6x_legitimate_address_p_1 (machine_mode mode, rtx x, bool strict,
 	return false;
 
       /* fall through */
+      gcc_fallthrough ();
     case REG:
       if (strict)
 	return REGNO_OK_FOR_BASE_STRICT_P (REGNO (x));
@@ -3284,6 +3290,7 @@  count_unit_reqs (unit_req_table reqs, rtx_insn *head, rtx_insn *tail)
 	case 2:
 	  reqs[side2][req2]++;
 	  /* fall through */
+	  gcc_fallthrough ();
 	case 1:
 	  reqs[side1][req1]++;
 	  break;
@@ -4104,6 +4111,7 @@  c6x_registers_update (rtx_insn *insn)
 	    case PRE_DEC:
 	      op = XEXP (op, 0);
 	      /* fall through */
+	      gcc_fallthrough ();
 	    case REG:
 	      c6x_mark_reg_read (op, false);
 	      break;
@@ -4112,6 +4120,7 @@  c6x_registers_update (rtx_insn *insn)
 	      op = XEXP (op, 1);
 	      gcc_assert (GET_CODE (op) == PLUS);
 	      /* fall through */
+	      gcc_fallthrough ();
 	    case PLUS:
 	      c6x_mark_reg_read (XEXP (op, 0), false);
 	      if (REG_P (XEXP (op, 1)))
diff --git gcc/gcc/config/c6x/c6x.h gcc/gcc/config/c6x/c6x.h
index 3209bf6..4e4b41c 100644
--- gcc/gcc/config/c6x/c6x.h
+++ gcc/gcc/config/c6x/c6x.h
@@ -93,6 +93,7 @@  extern c6x_cpu_t c6x_arch;
 	case C6X_CPU_C64XP:			\
 	  builtin_define ("_TMS320C6400_PLUS");	\
 	  /* ... fall through ... */		\
+	  gcc_fallthrough ();			\
 	case C6X_CPU_C64X:			\
 	  builtin_define ("_TMS320C6400");	\
 	  break;				\
@@ -100,6 +101,7 @@  extern c6x_cpu_t c6x_arch;
 	case C6X_CPU_C67XP:			\
 	  builtin_define ("_TMS320C6700_PLUS");	\
 	  /* ... fall through ... */		\
+	  gcc_fallthrough ();			\
 	case C6X_CPU_C67X:			\
 	  builtin_define ("_TMS320C6700");	\
 	  break;				\
diff --git gcc/gcc/config/c6x/predicates.md gcc/gcc/config/c6x/predicates.md
index 9db6002..3f6e968 100644
--- gcc/gcc/config/c6x/predicates.md
+++ gcc/gcc/config/c6x/predicates.md
@@ -193,6 +193,7 @@ 
       offset = INTVAL (XEXP (op, 1));
       op = XEXP (op, 0);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case SYMBOL_REF:
       /* For shared libraries, only allow symbols we know are local.
diff --git gcc/gcc/config/cr16/cr16.c gcc/gcc/config/cr16/cr16.c
index 141b8bc..b7a95c0 100644
--- gcc/gcc/config/cr16/cr16.c
+++ gcc/gcc/config/cr16/cr16.c
@@ -1309,6 +1309,7 @@  cr16_address_cost (rtx addr, machine_mode mode ATTRIBUTE_UNUSED,
     case CR16_REGP_REL:
       cost += 2;
       /* Fall through.  */
+      gcc_fallthrough ();
     case CR16_REG_REL:
       cost += 3;
       if (address.disp)
@@ -1575,6 +1576,7 @@  cr16_print_operand_address (FILE * file, machine_mode /*mode*/, rtx addr)
     case CR16_INDEX_REGP_REL:
       fprintf (file, "[%s]", reg_names[REGNO (address.index)]);
       /* Fall through.  */
+      gcc_fallthrough ();
     case CR16_REGP_REL:
       if (address.disp)
 	{
diff --git gcc/gcc/config/cris/cris.c gcc/gcc/config/cris/cris.c
index 971d07f..447cfc9 100644
--- gcc/gcc/config/cris/cris.c
+++ gcc/gcc/config/cris/cris.c
@@ -961,6 +961,7 @@  cris_print_operand (FILE *file, rtx x, int code)
 	 and %E (and %e) and state passed between those modifiers.  */
       cris_output_insn_is_bound = 0;
       /* FALL THROUGH.  */
+      gcc_fallthrough ();
     case 'E':
       /* Print 's' if operand is SIGN_EXTEND or 'u' if ZERO_EXTEND unless
 	 cris_output_insn_is_bound is nonzero.  */
@@ -2187,6 +2188,7 @@  cris_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno,
       if (outer_code != COMPARE)
         return false;
       /* fall through */
+      gcc_fallthrough ();
 
     case ZERO_EXTEND: case SIGN_EXTEND:
       *total = rtx_cost (XEXP (x, 0), VOIDmode, (enum rtx_code) outer_code,
diff --git gcc/gcc/config/epiphany/epiphany.c gcc/gcc/config/epiphany/epiphany.c
index f09a657..7f4a2ea 100644
--- gcc/gcc/config/epiphany/epiphany.c
+++ gcc/gcc/config/epiphany/epiphany.c
@@ -771,6 +771,7 @@  epiphany_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	  return true;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case CONST:
     case LABEL_REF:
@@ -872,11 +873,13 @@  epiphany_address_cost (rtx addr, machine_mode mode,
 	  return 1;
 	i >>= 1;
 	/* Fall through.  */
+	gcc_fallthrough ();
       case 2:
 	if (i & 1)
 	  return 1;
 	i >>= 1;
 	/* Fall through.  */
+	gcc_fallthrough ();
       case 1:
 	return i < -7 || i > 7;
     }
@@ -1352,6 +1355,7 @@  epiphany_print_operand (FILE *file, rtx x, int code)
 	  break;
 	}
       /* Fall through.  Let output_addr_const deal with it.  */
+      gcc_fallthrough ();
     case CONST_INT:
       fprintf(file,"%s",IMMEDIATE_PREFIX);
       if (code == 'C' || code == 'X')
@@ -1361,6 +1365,7 @@  epiphany_print_operand (FILE *file, rtx x, int code)
 	  break;
 	}
       /* Fall through */
+      gcc_fallthrough ();
     default :
       output_addr_const (file, x);
       break;
@@ -2421,6 +2426,7 @@  epiphany_mode_needed (int entity, rtx_insn *insn)
     if (recog_memoized (insn) == CODE_FOR_set_fp_mode)
       mode = (enum attr_fp_mode) epiphany_mode_after (entity, mode, insn);
     /* Fall through.  */
+    gcc_fallthrough ();
   case EPIPHANY_MSW_ENTITY_NEAREST:
   case EPIPHANY_MSW_ENTITY_TRUNC:
     if (mode == FP_MODE_ROUND_UNKNOWN)
@@ -2469,6 +2475,7 @@  epiphany_mode_entry_exit (int entity, bool exit)
 	  || normal_mode == FP_MODE_ROUND_TRUNC)
       return FP_MODE_ROUND_UNKNOWN;
       /* Fall through.  */
+      gcc_fallthrough ();
     case EPIPHANY_MSW_ENTITY_NEAREST:
     case EPIPHANY_MSW_ENTITY_TRUNC:
     case EPIPHANY_MSW_ENTITY_ROUND_KNOWN:
@@ -2715,6 +2722,7 @@  epiphany_insert_mode_switch_use (rtx_insn *insn,
 	near = gen_rtx_USE (VOIDmode, gen_rtx_REG (SImode, FP_ANYFP_REGNUM));
 	trunc = copy_rtx (near);
 	/* Fall through.  */
+	gcc_fallthrough ();
       case FP_MODE_INT:
       case FP_MODE_CALLER:
 	near = gen_rtx_USE (VOIDmode, near);
diff --git gcc/gcc/config/fr30/fr30.c gcc/gcc/config/fr30/fr30.c
index f4fef2b..044a337 100644
--- gcc/gcc/config/fr30/fr30.c
+++ gcc/gcc/config/fr30/fr30.c
@@ -685,6 +685,7 @@  fr30_print_operand (FILE *file, rtx x, int code)
 	}
 
       /* Fall through.  Let output_addr_const deal with it.  */
+      gcc_fallthrough ();
     default:
       output_addr_const (file, x);
       break;
diff --git gcc/gcc/config/frv/frv.c gcc/gcc/config/frv/frv.c
index 957ff03..e3ce9bc 100644
--- gcc/gcc/config/frv/frv.c
+++ gcc/gcc/config/frv/frv.c
@@ -2990,6 +2990,7 @@  frv_print_operand (FILE * file, rtx x, int code)
 	}
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case '\0':
       if (GET_CODE (x) == REG)
@@ -3336,6 +3337,7 @@  frv_legitimate_address_p_1 (machine_mode mode,
         break;
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case REG:
       ret = frv_regno_ok_for_base_p (REGNO (x), strict_p);
@@ -3396,6 +3398,7 @@  frv_legitimate_address_p_1 (machine_mode mode,
 	    break;
 
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 
 	case REG:
 	  /* Do not allow reg+reg addressing for modes > 1 word if we
@@ -4094,6 +4097,7 @@  frv_emit_movsi (rtx dest, rtx src)
 			break;
 		      }
 		    /* Fall through.  */
+		    gcc_fallthrough ();
 		  default:
 		    if (TARGET_GPREL_RO)
 		      unspec = R_FRV_GPREL12;
@@ -9455,6 +9459,7 @@  frv_rtx_costs (rtx x,
 	  return true;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case CONST:
     case LABEL_REF:
diff --git gcc/gcc/config/h8300/h8300.c gcc/gcc/config/h8300/h8300.c
index 1818684..0d83310 100644
--- gcc/gcc/config/h8300/h8300.c
+++ gcc/gcc/config/h8300/h8300.c
@@ -1744,6 +1744,7 @@  h8300_print_operand (FILE *file, rtx x, int code)
 		     processing bit operations on H8/300 or H8/300H
 		     because 'U' constraint does not allow bit
 		     operations on the tiny area on these machines.  */
+		  gcc_fallthrough ();
 
 		case 'X':
 		case 'T':
@@ -4109,6 +4110,7 @@  get_shift_alg (enum shift_type shift_type, enum shift_mode shift_mode,
     case SHIFT_INLINE:
       info->remainder = count;
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case SHIFT_LOOP:
       /* It is up to the caller to know that looping clobbers cc.  */
@@ -4624,6 +4626,7 @@  output_a_shift (rtx *operands)
     case SHIFT_SPECIAL:
       output_asm_insn (info.special, operands);
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case SHIFT_INLINE:
       n = info.remainder;
@@ -4805,6 +4808,7 @@  compute_a_shift_length (rtx insn ATTRIBUTE_UNUSED, rtx *operands)
 	    wlength++;
 
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 
 	case SHIFT_INLINE:
 	  n = info.remainder;
@@ -4942,6 +4946,7 @@  compute_a_shift_cc (rtx insn ATTRIBUTE_UNUSED, rtx *operands)
 	return info.cc_special;
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case SHIFT_INLINE:
       return info.cc_inline;
diff --git gcc/gcc/config/ia64/ia64.c gcc/gcc/config/ia64/ia64.c
index 6ab3400..e0f8be7 100644
--- gcc/gcc/config/ia64/ia64.c
+++ gcc/gcc/config/ia64/ia64.c
@@ -1889,6 +1889,7 @@  ia64_expand_vecint_compare (enum rtx_code code, machine_mode mode,
       code = reverse_condition (code);
       negate = true;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case LT:
     case LTU:
@@ -2359,6 +2360,7 @@  ia64_expand_atomic_op (enum rtx_code code, rtx mem, rtx val,
 	case MEMMODEL_SYNC_SEQ_CST:
 	  emit_insn (gen_memory_barrier ());
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case MEMMODEL_RELAXED:
 	case MEMMODEL_ACQUIRE:
 	case MEMMODEL_SYNC_ACQUIRE:
@@ -5547,6 +5549,7 @@  ia64_print_operand (FILE * file, rtx x, int code)
     case POST_MODIFY:
       x = XEXP (x, 0);
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case REG:
       fputs (reg_names [REGNO (x)], file);
@@ -5648,6 +5651,7 @@  ia64_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	  return true;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case ASHIFT:
     case ASHIFTRT:
@@ -6879,6 +6883,7 @@  group_barrier_needed (rtx_insn *insn)
 	  break;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case INSN:
       if (GET_CODE (PATTERN (insn)) == USE
@@ -11723,6 +11728,7 @@  ia64_expand_vec_perm_const (rtx operands[4])
 	if (d.perm[i] >= nelt)
 	  d.perm[i] -= nelt;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case 1:
       d.op1 = d.op0;
diff --git gcc/gcc/config/ia64/predicates.md gcc/gcc/config/ia64/predicates.md
index 02347f7..d2cb450 100644
--- gcc/gcc/config/ia64/predicates.md
+++ gcc/gcc/config/ia64/predicates.md
@@ -50,6 +50,7 @@ 
       offset = INTVAL (XEXP (op, 1));
       op = XEXP (op, 0);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case SYMBOL_REF:
       if (CONSTANT_POOL_ADDRESS_P (op))
@@ -114,6 +115,7 @@ 
 	return false;
       op = XEXP (op, 0);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case SYMBOL_REF:
 	return SYMBOL_REF_LOCAL_P (op);
@@ -137,6 +139,7 @@ 
 	return false;
       op = XEXP (op, 0);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case SYMBOL_REF:
       return SYMBOL_REF_SMALL_ADDR_P (op);
@@ -190,6 +193,7 @@ 
       addend = INTVAL (XEXP (op, 1));
       op = XEXP (op, 0);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case SYMBOL_REF:
       /* These symbols shouldn't be used with got loads.  */
@@ -272,6 +276,7 @@ 
 	return false;
       op = XEXP (op, 0);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case SYMBOL_REF:
       return SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_INITIAL_EXEC;
@@ -295,6 +300,7 @@ 
         return false;
       op = XEXP (op, 0);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case SYMBOL_REF:
       return SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_EXEC;
diff --git gcc/gcc/config/iq2000/iq2000.c gcc/gcc/config/iq2000/iq2000.c
index 73b9cdb..9670103 100644
--- gcc/gcc/config/iq2000/iq2000.c
+++ gcc/gcc/config/iq2000/iq2000.c
@@ -804,6 +804,7 @@  iq2000_address_cost (rtx addr, machine_mode mode, addr_space_t as,
       }
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case SYMBOL_REF:
       return SYMBOL_REF_FLAG (addr) ? 1 : 2;
diff --git gcc/gcc/config/lm32/lm32.c gcc/gcc/config/lm32/lm32.c
index 4a8079f..379b465 100644
--- gcc/gcc/config/lm32/lm32.c
+++ gcc/gcc/config/lm32/lm32.c
@@ -1122,6 +1122,7 @@  lm32_rtx_costs (rtx x, machine_mode mode, int outer_code,
 		return true;
 	      }
 	    /* Fall through.  */ 
+	    gcc_fallthrough ();
 
 	  default:
             if (satisfies_constraint_K (x))
@@ -1151,6 +1152,7 @@  lm32_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	  break;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case LABEL_REF:
     case CONST_DOUBLE:
diff --git gcc/gcc/config/m32r/m32r.c gcc/gcc/config/m32r/m32r.c
index b40c53c..487a6b5 100644
--- gcc/gcc/config/m32r/m32r.c
+++ gcc/gcc/config/m32r/m32r.c
@@ -1375,6 +1375,7 @@  m32r_rtx_costs (rtx x, machine_mode mode ATTRIBUTE_UNUSED,
 	  return true;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case CONST:
     case LABEL_REF:
@@ -2175,6 +2176,7 @@  m32r_print_operand (FILE * file, rtx x, int code)
 	      return;
 	    }
 	  /* fall through */
+	  gcc_fallthrough ();
 	case LABEL_REF :
 	  fputs (code == 'T' ? "shigh(" : "low(", file);
 	  output_addr_const (file, x);
@@ -2275,6 +2277,7 @@  m32r_print_operand (FILE * file, rtx x, int code)
 	}
 
       /* Fall through.  Let output_addr_const deal with it.  */
+      gcc_fallthrough ();
 
     default :
       output_addr_const (file, x);
diff --git gcc/gcc/config/m68k/m68k.c gcc/gcc/config/m68k/m68k.c
index 03f474e..1896290 100644
--- gcc/gcc/config/m68k/m68k.c
+++ gcc/gcc/config/m68k/m68k.c
@@ -6153,6 +6153,7 @@  m68k_sched_md_init_global (FILE *sched_dump ATTRIBUTE_UNUSED,
       sched_ib.filled = 0;
 
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case CPU_CFV1:
     case CPU_CFV2:
diff --git gcc/gcc/config/m68k/m68k.h gcc/gcc/config/m68k/m68k.h
index 2aa858f..554bb2d 100644
--- gcc/gcc/config/m68k/m68k.h
+++ gcc/gcc/config/m68k/m68k.h
@@ -90,6 +90,7 @@  along with GCC; see the file COPYING3.  If not see
 	case u68020_60:							\
 	  builtin_define_std ("mc68060");				\
 	  /* Fall through.  */						\
+	  gcc_fallthrough ();						\
 	case u68020_40:							\
 	  builtin_define_std ("mc68040");				\
 	  builtin_define_std ("mc68030");				\
diff --git gcc/gcc/config/mips/mips.c gcc/gcc/config/mips/mips.c
index df7b1da..2086d2a 100644
--- gcc/gcc/config/mips/mips.c
+++ gcc/gcc/config/mips/mips.c
@@ -2189,6 +2189,7 @@  mips_symbolic_constant_p (rtx x, enum mips_symbol_context context,
 	return true;
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case SYMBOL_GP_RELATIVE:
       /* Make sure that the offset refers to something within the
@@ -2284,6 +2285,7 @@  mips_symbol_insns_1 (enum mips_symbol_type type, machine_mode mode)
 	return 0;
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case SYMBOL_GOT_PAGE_OFST:
       /* Unless -funit-at-a-time is in effect, we can't be sure whether the
@@ -2847,6 +2849,7 @@  mips_const_insns (rtx x)
 	  && mips_const_vector_same_int_p (x, GET_MODE (x), -512, 511))
 	return 1;
       /* Fall through.  */
+      gcc_fallthrough ();
     case CONST_DOUBLE:
       /* Allow zeros for normal mode, where we can use $0.  */
       return !TARGET_MIPS16 && x == CONST0_RTX (GET_MODE (x)) ? 1 : 0;
@@ -4023,6 +4026,7 @@  mips_set_reg_reg_cost (machine_mode mode)
       if (TARGET_HARD_FLOAT)
 	return mips_set_reg_reg_piece_cost (mode, UNITS_PER_HWFPVALUE);
       /* Fall through */
+      gcc_fallthrough ();
 
     default:
       return mips_set_reg_reg_piece_cost (mode, UNITS_PER_WORD);
@@ -4096,6 +4100,7 @@  mips_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	    }
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case CONST:
     case SYMBOL_REF:
@@ -4209,6 +4214,7 @@  mips_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	}
 	    
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case IOR:
     case XOR:
@@ -4297,6 +4303,7 @@  mips_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	    }
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case PLUS:
       if (float_mode_p)
@@ -4395,6 +4402,7 @@  mips_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	  return true;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case SQRT:
     case MOD:
@@ -4404,6 +4412,7 @@  mips_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	  return false;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case UDIV:
     case UMOD:
@@ -13778,6 +13787,7 @@  mips_output_order_conditional_branch (rtx_insn *insn, rtx *operands,
 	    case LTU:
 	      inverted_p = !inverted_p;
 	      /* Fall through.  */
+	      gcc_fallthrough ();
 	    case GE:
 	    case GEU:
 	      branch[!inverted_p] = MIPS_BRANCH_C ("b", "%0");
@@ -13801,6 +13811,7 @@  mips_output_order_conditional_branch (rtx_insn *insn, rtx *operands,
 	case LEU:
 	  inverted_p = !inverted_p;
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 	case GTU:
 	  if (TARGET_CB_MAYBE)
 	    {
@@ -13818,6 +13829,7 @@  mips_output_order_conditional_branch (rtx_insn *insn, rtx *operands,
 	case LTU:
 	  inverted_p = !inverted_p;
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 	case GEU:
 	  if (TARGET_CB_MAYBE)
 	    {
@@ -21196,6 +21208,7 @@  mips_expand_vec_perm_const (rtx operands[4])
       if (!rtx_equal_p (d.op0, d.op1))
 	break;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case 2:
       for (i = 0; i < nelt; ++i)
diff --git gcc/gcc/config/mmix/predicates.md gcc/gcc/config/mmix/predicates.md
index 8e920c2..c856c46 100644
--- gcc/gcc/config/mmix/predicates.md
+++ gcc/gcc/config/mmix/predicates.md
@@ -117,6 +117,7 @@ 
 		  && GET_MODE (XEXP (op, 1)) == VOIDmode)))
 	return 1;
       /* Fall through.  */
+      gcc_fallthrough ();
     default:
       return mmix_address_operand (op, mode);
     }
diff --git gcc/gcc/config/mn10300/mn10300.c gcc/gcc/config/mn10300/mn10300.c
index 71815d6..befd623 100644
--- gcc/gcc/config/mn10300/mn10300.c
+++ gcc/gcc/config/mn10300/mn10300.c
@@ -397,6 +397,7 @@  mn10300_print_operand (FILE *file, rtx x, int code)
 	  break;
 	}
       /* FALL THROUGH */
+      gcc_fallthrough ();
 
     default:
       switch (GET_CODE (x))
@@ -2455,6 +2456,7 @@  mn10300_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	    goto alldone;
 	  }
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case ASHIFTRT:
     case LSHIFTRT:
@@ -3011,6 +3013,7 @@  extract_bundle (rtx_insn *insn, struct liw_data * pdata)
       /* The AND, OR and XOR long instruction words only accept register arguments.  */
       allow_consts = false;
       /* Fall through.  */
+      gcc_fallthrough ();
     default:
       pdata->dest = SET_DEST (p);
       pdata->src = XEXP (SET_SRC (p), 1);
diff --git gcc/gcc/config/mn10300/mn10300.md gcc/gcc/config/mn10300/mn10300.md
index decda0e..e9f137c 100644
--- gcc/gcc/config/mn10300/mn10300.md
+++ gcc/gcc/config/mn10300/mn10300.md
@@ -306,6 +306,7 @@ 
 	  && REGNO_EXTENDED_P (REGNO (operands[0]), 1))
 	return "movu %1,%0";
       /* FALLTHRU */
+      gcc_fallthrough ();
     case 5:
     case 6:
     case 2:
@@ -454,6 +455,7 @@ 
 	    return "movu %1,%0";
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
     case 3:  /* reg-reg */
     case 4:  /* reg-mem */
     case 5:  /* mem-reg */
diff --git gcc/gcc/config/msp430/msp430.c gcc/gcc/config/msp430/msp430.c
index dba4d19..d260eb2 100644
--- gcc/gcc/config/msp430/msp430.c
+++ gcc/gcc/config/msp430/msp430.c
@@ -979,6 +979,7 @@  msp430_initial_elimination_offset (int from, int to)
       rv += cfun->machine->framesize_outgoing;
       rv += cfun->machine->framesize_locals;
       /* Fall through.  */
+      gcc_fallthrough ();
     case FRAME_POINTER_REGNUM:
       rv += cfun->machine->framesize_regs;
       /* Allow for the saved return address.  */
@@ -996,6 +997,7 @@  msp430_initial_elimination_offset (int from, int to)
       /* Allow for the fall through above.  */
       rv -= (TARGET_LARGE ? 4 : 2);
       rv -= cfun->machine->framesize_regs;
+      gcc_fallthrough ();
     case ARG_POINTER_REGNUM:
       break;
     default:
@@ -3651,6 +3653,7 @@  msp430_print_operand (FILE * file, rtx op, int letter)
 	  break;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
     case CONST_INT:
     case SYMBOL_REF:
     case LABEL_REF:
diff --git gcc/gcc/config/nds32/nds32-cost.c gcc/gcc/config/nds32/nds32-cost.c
index e6a29fc..9d7a1d0 100644
--- gcc/gcc/config/nds32/nds32-cost.c
+++ gcc/gcc/config/nds32/nds32-cost.c
@@ -191,6 +191,7 @@  performance_cost:
   /* This is section for performance cost model.  */
 
   /* FALLTHRU, currently we use same cost model as size_cost.  */
+  gcc_fallthrough ();
 
 size_cost:
   /* This is section for size cost model.  */
diff --git gcc/gcc/config/nios2/nios2.c gcc/gcc/config/nios2/nios2.c
index 18fcbb3..3e5aed8 100644
--- gcc/gcc/config/nios2/nios2.c
+++ gcc/gcc/config/nios2/nios2.c
@@ -1975,11 +1975,13 @@  nios2_legitimate_address_p (machine_mode mode ATTRIBUTE_UNUSED,
 	return false;
 
       /* Else, fall through.  */
+      gcc_fallthrough ();
     case CONST:
       if (gprel_constant_p (operand))
 	return true;
 
       /* Else, fall through.  */
+      gcc_fallthrough ();
     case LABEL_REF:
     case CONST_INT:
     case CONST_DOUBLE:
@@ -2583,6 +2585,7 @@  nios2_print_operand (FILE *file, rtx op, int letter)
       }
 
       /* Else, fall through.  */
+      gcc_fallthrough ();
 
     case CONST:
     case LABEL_REF:
diff --git gcc/gcc/config/pa/pa.c gcc/gcc/config/pa/pa.c
index 1047f3d..a0e95bc 100644
--- gcc/gcc/config/pa/pa.c
+++ gcc/gcc/config/pa/pa.c
@@ -1530,6 +1530,7 @@  hppa_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	  return true;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case UDIV:
     case MOD:
diff --git gcc/gcc/config/pdp11/pdp11.c gcc/gcc/config/pdp11/pdp11.c
index ec3d61a..00e2e3a 100644
--- gcc/gcc/config/pdp11/pdp11.c
+++ gcc/gcc/config/pdp11/pdp11.c
@@ -905,6 +905,7 @@  pdp11_rtx_costs (rtx x, machine_mode mode, int outer_code ATTRIBUTE_UNUSED,
 	  return true;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case CONST:
     case LABEL_REF:
diff --git gcc/gcc/config/rl78/rl78-real.md gcc/gcc/config/rl78/rl78-real.md
index 530b2fe..400431c 100644
--- gcc/gcc/config/rl78/rl78-real.md
+++ gcc/gcc/config/rl78/rl78-real.md
@@ -467,6 +467,7 @@ 
         if (rl78_flags_already_set (operands[0], operands[1]))
 	  return "sk%C0\; br\t!!%3\; # cmpw eliminated";
 	/* else fall through.  */
+	gcc_fallthrough ();
       case 1:
 	return "cmpw\t%1, %2\; sk%C0\; br\t!!%3";
       case 2:
diff --git gcc/gcc/config/rl78/rl78.c gcc/gcc/config/rl78/rl78.c
index 3ddb198..936c6d8 100644
--- gcc/gcc/config/rl78/rl78.c
+++ gcc/gcc/config/rl78/rl78.c
@@ -928,6 +928,7 @@  characterize_address (rtx x, rtx *base, rtx *index, rtx *addend)
 	  return true;
 	}
       /* fall through */
+      gcc_fallthrough ();
     case MEM:
     case REG:
       return false;
@@ -1259,6 +1260,7 @@  rl78_initial_elimination_offset (int from, int to)
       rv += cfun->machine->framesize_outgoing;
       rv += cfun->machine->framesize_locals;
       /* Fall through.  */
+      gcc_fallthrough ();
     case FRAME_POINTER_REGNUM:
       rv += cfun->machine->framesize_regs;
       rv += 4;
diff --git gcc/gcc/config/rx/rx.c gcc/gcc/config/rx/rx.c
index 8dfc885..b829f52 100644
--- gcc/gcc/config/rx/rx.c
+++ gcc/gcc/config/rx/rx.c
@@ -454,10 +454,12 @@  rx_print_operand_address (FILE * file, machine_mode /*mode*/, rtx addr)
     case UNSPEC:
       addr = XVECEXP (addr, 0, 0);
       /* Fall through.  */
+      gcc_fallthrough ();
     case LABEL_REF:
     case SYMBOL_REF:
       fprintf (file, "#");
       /* Fall through.  */
+      gcc_fallthrough ();
     default:
       output_addr_const (file, addr);
       break;
@@ -735,6 +737,7 @@  rx_print_operand (FILE * file, rtx op, int letter)
       gcc_assert (GET_MODE_SIZE (GET_MODE (op)) <= 4);
       unsigned_load = true;
       /* Fall through.  */
+      gcc_fallthrough ();
     case 'Q':
       if (MEM_P (op))
 	{
@@ -797,6 +800,7 @@  rx_print_operand (FILE * file, rtx op, int letter)
 	}
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     default:
       if (GET_CODE (op) == CONST
@@ -910,6 +914,7 @@  rx_print_operand (FILE * file, rtx op, int letter)
 	      }
 	    }
 	  /* Fall through */
+	  gcc_fallthrough ();
 
 	case CONST:
 	case SYMBOL_REF:
@@ -2787,15 +2792,19 @@  rx_option_override (void)
 	      case 4:
 		fixed_regs[10] = call_used_regs [10] = 1;
 		/* Fall through.  */
+		gcc_fallthrough ();
 	      case 3:
 		fixed_regs[11] = call_used_regs [11] = 1;
 		/* Fall through.  */
+		gcc_fallthrough ();
 	      case 2:
 		fixed_regs[12] = call_used_regs [12] = 1;
 		/* Fall through.  */
+		gcc_fallthrough ();
 	      case 1:
 		fixed_regs[13] = call_used_regs [13] = 1;
 		/* Fall through.  */
+		gcc_fallthrough ();
 	      case 0:
 		rx_num_interrupt_regs = opt->value;
 		break;
diff --git gcc/gcc/config/s390/s390.c gcc/gcc/config/s390/s390.c
index ee0187c..a99c7d4 100644
--- gcc/gcc/config/s390/s390.c
+++ gcc/gcc/config/s390/s390.c
@@ -1472,6 +1472,7 @@  s390_select_ccmode (enum rtx_code code, rtx op0, rtx op1)
 	      return CCAPmode;
 	  }
 	/* Fall through.  */
+	gcc_fallthrough ();
       case UNORDERED:
       case ORDERED:
       case UNEQ:
@@ -6684,6 +6685,7 @@  s390_expand_atomic (machine_mode mode, enum rtx_code code,
       val = expand_simple_binop (SImode, AND, val, ac.modemask,
 				 NULL_RTX, 1, OPTAB_DIRECT);
       /* FALLTHRU */
+      gcc_fallthrough ();
     case SET:
       if (ac.aligned && MEM_P (val))
 	store_bit_field (new_rtx, GET_MODE_BITSIZE (mode), 0,
diff --git gcc/gcc/config/sh/sh.c gcc/gcc/config/sh/sh.c
index 0960a99..d10f469 100644
--- gcc/gcc/config/sh/sh.c
+++ gcc/gcc/config/sh/sh.c
@@ -1282,6 +1282,7 @@  sh_print_operand (FILE *stream, rtx x, int code)
       gcc_assert (MEM_P (x));
       x = XEXP (x, 0);
       /* Fall through.  */
+      gcc_fallthrough ();
     case 'U':
       switch (GET_CODE (x))
 	{
@@ -1338,6 +1339,7 @@  sh_print_operand (FILE *stream, rtx x, int code)
 	  break;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
 
     default_output:
     default:
@@ -1395,6 +1397,7 @@  sh_print_operand (FILE *stream, rtx x, int code)
 
 	  x = SUBREG_REG (x);
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 
 	reg:
 	case REG:
@@ -2690,6 +2693,7 @@  output_branch (int logic, rtx_insn *insn, rtx *operands)
 	  return "";
 	}
       /* When relaxing, fall through.  */
+      gcc_fallthrough ();
     case 4:
       {
 	char buffer[10];
@@ -3420,6 +3424,7 @@  sh_rtx_costs (rtx x, machine_mode mode ATTRIBUTE_UNUSED, int outer_code,
 	  return true;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case XOR:
     case IOR:
@@ -3455,6 +3460,7 @@  sh_rtx_costs (rtx x, machine_mode mode ATTRIBUTE_UNUSED, int outer_code,
 	  return true;
 	}
       /* Fall through to shiftcosts.  */
+      gcc_fallthrough ();
     case ASHIFT:
     case ASHIFTRT:
       {
diff --git gcc/gcc/config/sh/sh.md gcc/gcc/config/sh/sh.md
index edc4d15..8c58669 100644
--- gcc/gcc/config/sh/sh.md
+++ gcc/gcc/config/sh/sh.md
@@ -5845,6 +5845,7 @@ 
 	  break;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case PLUS:
       emit_insn (gen_movsf_ie (reg0, operands[1]));
@@ -5906,6 +5907,7 @@ 
 	  break;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case PLUS:
       /* Since REG+DISP addressing has already been decided upon by gcc
diff --git gcc/gcc/config/sparc/sparc.c gcc/gcc/config/sparc/sparc.c
index 1d2ecaa..66af776 100644
--- gcc/gcc/config/sparc/sparc.c
+++ gcc/gcc/config/sparc/sparc.c
@@ -11160,6 +11160,7 @@  sparc_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	  return false;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case ABS:
     case FLOAT:
@@ -11656,6 +11657,7 @@  sparc_emit_membar_for_model (enum memmodel model,
       if (load_store == 3 && before_after == 1)
 	implied |= StoreLoad;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case SMM_PSO:
       /* Partial Store Ordering: all memory transactions with load semantics
@@ -11667,6 +11669,7 @@  sparc_emit_membar_for_model (enum memmodel model,
       if (load_store == 3 && before_after == 2)
 	implied |= StoreLoad | StoreStore;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case SMM_RMO:
       /* Relaxed Memory Ordering: no implicit bits.  */
diff --git gcc/gcc/config/spu/spu.c gcc/gcc/config/spu/spu.c
index c3757eb..297be7e 100644
--- gcc/gcc/config/spu/spu.c
+++ gcc/gcc/config/spu/spu.c
@@ -3200,6 +3200,7 @@  classify_immediate (rtx op, machine_mode mode)
 	    && GET_CODE (CONST_VECTOR_ELT (op, i)) != CONST_DOUBLE)
 	  return IC_POOL;
       /* Fall through. */
+      gcc_fallthrough ();
 
     case CONST_INT:
     case CONST_DOUBLE:
diff --git gcc/gcc/config/tilegx/tilegx.c gcc/gcc/config/tilegx/tilegx.c
index 06c832c..953ced6 100644
--- gcc/gcc/config/tilegx/tilegx.c
+++ gcc/gcc/config/tilegx/tilegx.c
@@ -2547,6 +2547,7 @@  tilegx_emit_cc_test (enum rtx_code code, rtx op0, rtx op1,
 	  if (n == -1)
 	    break;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 
 	case LTU:
 	  /* Change ((unsigned)x < 0x1000) into !((int)x >> 12), etc.
@@ -5236,6 +5237,7 @@  tilegx_print_operand (FILE *file, rtx x, int code)
 	}
       }
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case 'h':
       {
@@ -5386,6 +5388,7 @@  tilegx_print_operand (FILE *file, rtx x, int code)
 	  return;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case 0:
       if (REG_P (x))
diff --git gcc/gcc/config/tilepro/tilepro.c gcc/gcc/config/tilepro/tilepro.c
index 628cd04..7185dda 100644
--- gcc/gcc/config/tilepro/tilepro.c
+++ gcc/gcc/config/tilepro/tilepro.c
@@ -2351,6 +2351,7 @@  tilepro_emit_cc_test (enum rtx_code code, rtx op0, rtx op1,
 	  if (n == -1)
 	    break;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 
 	case LTU:
 	  /* Change ((unsigned)x < 0x1000) into !((unsigned)x >> 12),
@@ -4792,6 +4793,7 @@  tilepro_print_operand (FILE *file, rtx x, int code)
 	  return;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case 0:
       if (REG_P (x))
diff --git gcc/gcc/config/v850/v850.c gcc/gcc/config/v850/v850.c
index e0e4215..9529e27 100644
--- gcc/gcc/config/v850/v850.c
+++ gcc/gcc/config/v850/v850.c
@@ -411,6 +411,7 @@  v850_print_operand (FILE * file, rtx x, int code)
           break;
         }
       /* Fall through.  */
+      gcc_fallthrough ();
     case 'b':
     case 'B':
     case 'C':
diff --git gcc/gcc/config/vax/vax.c gcc/gcc/config/vax/vax.c
index 804f0c7..35a62de 100644
--- gcc/gcc/config/vax/vax.c
+++ gcc/gcc/config/vax/vax.c
@@ -785,6 +785,7 @@  vax_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	  return true;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case CONST:
     case LABEL_REF:
diff --git gcc/gcc/config/visium/visium.c gcc/gcc/config/visium/visium.c
index 6712fed..be91ad7 100644
--- gcc/gcc/config/visium/visium.c
+++ gcc/gcc/config/visium/visium.c
@@ -2219,6 +2219,7 @@  visium_expand_int_cstore (rtx *operands, enum machine_mode mode)
       reverse = true;
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case LTU:
     case GTU:
@@ -2267,6 +2268,7 @@  visium_expand_fp_cstore (rtx *operands,
       reverse = true;
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case LT:
     case GT:
diff --git gcc/gcc/config/xtensa/xtensa.c gcc/gcc/config/xtensa/xtensa.c
index 64d089b..fa0140e 100644
--- gcc/gcc/config/xtensa/xtensa.c
+++ gcc/gcc/config/xtensa/xtensa.c
@@ -1565,6 +1565,7 @@  xtensa_expand_atomic (enum rtx_code code, rtx target, rtx mem, rtx val,
       val = expand_simple_binop (SImode, AND, val, ac.modemask,
 				 NULL_RTX, 1, OPTAB_DIRECT);
       /* FALLTHRU */
+      gcc_fallthrough ();
     case SET:
       tmp = expand_simple_binop (SImode, AND, old, ac.modemaski,
 				 NULL_RTX, 1, OPTAB_DIRECT);
@@ -2424,6 +2425,7 @@  print_operand (FILE *file, rtx x, int letter)
 	}
 
       /* fall through */
+      gcc_fallthrough ();
 
     default:
       if (GET_CODE (x) == REG || GET_CODE (x) == SUBREG)
@@ -3739,6 +3741,7 @@  xtensa_rtx_costs (rtx x, machine_mode mode, int outer_code,
 	  }
       }
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case UDIV:
     case UMOD: