This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Implement -Wswitch-fallthrough: gcc/


2016-07-11  Marek Polacek  <polacek@redhat.com>

	PR c/7652
	* Makefile.in (insn-attrtab.o-warn, insn-dfatab.o-warn,
	insn-latencytab.o-warn, insn-output.o-warn, insn-emit.o-warn): Add
	-Wno-switch-fallthrough.
	* alias.c (find_base_value): Add gcc_fallthrough.
	(find_base_term): Likewise.
	* asan.c (get_mem_refs_of_builtin_call): Likewise.
	* auto-inc-dec.c (attempt_change): Likewise.
	* builtins.c (expand_builtin_int_roundingfn_2): Likewise.
	(fold_builtin_arith_overflow): Likewise.
	(expand_builtin): Likewise.
	* cfgexpand.c (expand_gimple_stmt_1): Likewise.
	(expand_debug_expr): Likewise.
	* cfgrtl.c (duplicate_insn_chain): Likewise.
	* combine.c (find_split_point): Likewise.
	(expand_compound_operation): Likewise.
	(make_compound_operation): Likewise.
	(canon_reg_for_combine): Likewise.
	(force_to_mode): Likewise.
	(try_widen_shift_mode): Likewise.
	(simplify_shift_const_1): Likewise.
	(simplify_compare_const): Likewise.
	(simplify_comparison): Likewise.
	* convert.c (convert_to_real_1): Likewise.
	(convert_to_integer_1): Likewise.
	* cse.c (fold_rtx): Likewise.
	(cse_process_notes_1): Likewise.
	* cselib.c (cselib_expand_value_rtx_1): Likewise.
	* dbxout.c (dbxout_expand_expr): Likewise.
	(dbxout_symbol): Likewise.
	* df-scan.c (df_notes_rescan): Likewise.
	(df_uses_record): Likewise.
	* dojump.c (do_jump): Likewise.
	* dwarf2cfi.c (output_cfi_directive): Likewise. 
	* dwarf2out.c (output_loc_operands): Likewise.
	(print_dw_val): Likewise.
	(copy_dwarf_procs_ref_in_attrs): Likewise.
	(value_format): Likewise.
	(mem_loc_descriptor): Likewise.
	(loc_descriptor): Likewise.
	(resolve_args_picking_1): Likewise.
	(loc_list_from_tree_1): Likewise.
	(add_const_value_attribute): Likewise.
	(rtl_for_decl_init): Likewise.
	(add_bound_info): Likewise.
	(gen_formal_parameter_die): Likewise.
	(output_macinfo): Likewise.
	(mark_base_types): Likewise.
	(hash_loc_operands): Likewise.
	(compare_loc_operands): Likewise.
	* expmed.c (expand_divmod): Likewise.
	(make_tree): Likewise.
	* expr.c (safe_from_p): Likewise.
	(expand_expr_addr_expr_1): Likewise.
	(expand_expr_real_2): Likewise.
	(expand_expr_real_1): Likewise.
	* final.c (output_alternate_entry_point): Likewise.
	(output_addr_const): Likewise.
	* fold-const.c (negate_expr_p): Likewise.
	(fold_negate_expr): Likewise.
	(const_binop): Likewise.
	(fold_convert_loc): Likewise.
	(operand_equal_p): Likewise.
	(fold_truth_not_expr): Likewise.
	(make_range_step): Likewise.
	(merge_ranges): Likewise.
	(fold_cond_expr_with_comparison): Likewise.
	(extract_muldiv_1): Likewise.
	(fold_binary_loc): Likewise.
	(contains_label_1): Likewise.
	(multiple_of_p): Likewise.
	* gcc.c (driver_handle_option): Likewise.
	(do_spec_1): Likewise.
	* gcov-tool.c (process_args): Likewise.
	* gcse.c (want_to_gcse_p): Likewise.
	* genattrtab.c (check_attr_test): Likewise.
	(check_attr_value): Likewise.
	(make_canonical): Likewise.
	(write_test_expr): Likewise.
	* genconfig.c (walk_insn_part): Likewise.
	* gengtype-parse.c (direct_declarator): Likewise.
	* gengtype.c (dbgprint_count_type_at): Likewise.
	* genmodes.c: Likewise.
	* genpreds.c (validate_exp): Likewise.
	(needs_variable): Likewise.
	* genrecog.c (find_operand): Likewise.
	(find_matching_operand): Likewise.
	(match_pattern_2): Likewise.
	* gensupport.c (process_rtx): Likewise.
	(get_alternatives_number): Likewise.
	(collect_insn_data): Likewise.
	(alter_predicate_for_insn): Likewise.
	(subst_dup): Likewise.
	(read_md_rtx): Likewise.
	* gimple-fold.c (gimple_fold_builtin_fputs): Likewise.
	(fold_stmt_1): Likewise.
	(and_comparisons_1): Likewise.
	(or_comparisons_1): Likewise.
	(fold_const_aggregate_ref_1): Likewise.
	* gimple-pretty-print.c (dump_gimple_assign): Likewise.
	* gimple-ssa-backprop.c (backprop::process_assign_use): Likewise.
	* gimple-ssa-strength-reduction.c
	(find_candidates_dom_walker::before_dom_children): Likewise.
	* gimple-streamer-in.c (input_gimple_stmt): Likewise.
	* gimple-streamer-out.c (output_gimple_stmt): Likewise.
	* gimple-walk.c (walk_gimple_stmt): Likewise.
	* gimple.c (gimple_copy): Likewise.
	* gimplify.c (warn_switch_unreachable_r): Likewise.
	(gimple_boolify): Likewise.
	(gimplify_modify_expr_rhs): Likewise.
	(gimplify_addr_expr): Likewise.
	(omp_default_clause): Likewise.
	(gimplify_scan_omp_clauses): Likewise.
	(find_combined_omp_for): Likewise.
	(gimplify_omp_for): Likewise.
	(goa_stabilize_expr): Likewise.
	(gimplify_expr): Likewise.
	* godump.c (go_define): Likewise.
	(go_format_type): Likewise.
	* graphite-isl-ast-to-gimple.c (substitute_ssa_name): Likewise.
	* haifa-sched.c (remove_notes): Likewise.
	* hsa-gen.c (get_address_from_value): Likewise.
	(gen_hsa_insn_for_internal_fn_call): Likewise.
	* internal-fn.c (expand_arith_overflow): Likewise.
	* ipa-icf.c (sem_function::hash_stmt): Likewise.
	* ira.c (ira_setup_alts): Likewise.
	(equiv_init_varies_p): Likewise.
	(equiv_init_movable_p): Likewise.
	* jump.c (rtx_renumbered_equal_p): Likewise.
	* lra-eliminations.c (lra_eliminate_regs_1): Likewise.
	* lto-streamer-in.c (lto_input_mode_table): Likewise.
	* lto-streamer-out.c (lto_output_tree_ref): Likewise.
	* lto-wrapper.c (merge_and_complain): Likewise.
	(run_gcc): Likewise.
	* mode-switching.c (create_pre_exit): Likewise.
	* omp-low.c (scan_sharing_clauses): Likewise.
	(check_omp_nesting_restrictions): Likewise.
	(lower_rec_input_clauses): Likewise.
	(expand_parallel_call): Likewise.
	(expand_omp_for): Likewise.
	(expand_omp_target): Likewise.
	(expand_omp): Likewise.
	(lower_omp_target): Likewise.
	(lower_omp_1): Likewise.
	* optabs.c (add_equal_note): Likewise.
	* opts.c (common_handle_option): Likewise.
	* plugin.c (register_callback): Likewise.
	(invoke_plugin_callbacks_full): Likewise.
	* postreload.c (reload_combine_note_use): Likewise.
	* pretty-print.c (pp_write_text_as_dot_label_to_stream): Likewise.
	(pp_format): Likewise.
	(pp_emit_prefix): Likewise.
	* print-rtl.c (print_rtx): Likewise.
	* read-rtl.c (read_rtx_code): Likewise.
	* real.c (do_compare): Likewise.
	(round_for_format): Likewise.
	* recog.c (asm_operand_ok): Likewise.
	* reg-stack.c (get_true_reg): Likewise.
	(subst_stack_regs_pat): Likewise.
	* reginfo.c (reg_scan_mark_refs): Likewise.
	* reload1.c (set_label_offsets): Likewise.
	(eliminate_regs_1): Likewise.
	(elimination_effects): Likewise.
	(reload_reg_reaches_end_p): Likewise.
	(choose_reload_regs): Likewise.
	* resource.c (mark_referenced_resources): Likewise.
	(find_dead_or_set_registers): Likewise.
	(mark_set_resources): Likewise.
	* rtlanal.c (rtx_unstable_p): Likewise.
	(rtx_varies_p): Likewise.
	(reg_overlap_mentioned_p): Likewise.
	(volatile_insn_p): Likewise.
	(volatile_refs_p): Likewise.
	(side_effects_p): Likewise.
	(commutative_operand_precedence): Likewise.
	(auto_inc_p): Likewise.
	(rtx_cost): Likewise.
	* sched-deps.c (sched_analyze_2): Likewise.
	* sched-ebb.c (add_deps_for_risky_insns): Likewise.
	* sched-rgn.c (is_exception_free): Likewise.
	* simplify-rtx.c (simplify_binary_operation_1): Likewise.
	(simplify_rtx): Likewise.
	* stmt.c (parse_input_constraint): Likewise.
	* stor-layout.c (int_mode_for_mode): Likewise.
	* toplev.c (print_to_asm_out_file): Likewise.
	(print_to_stderr): Likewise.
	* trans-mem.c (get_attrs_for): Likewise.
	(is_tm_pure): Likewise.
	(requires_barrier): Likewise.
	* tree-cfg.c (verify_expr): Likewise.
	(verify_gimple_assign_ternary): Likewise.
	(gimple_verify_flow_info): Likewise.
	(move_stmt_r): Likewise.
	* tree-chrec.c (chrec_fold_plus_1): Likewise.
	(chrec_fold_multiply): Likewise.
	(evolution_function_is_invariant_rec_p): Likewise.
	(for_each_scev_op): Likewise.
	* tree-complex.c (expand_complex_division): Likewise.
	* tree-data-ref.c (split_constant_offset_1): Likewise.
	(siv_subscript_p): Likewise.
	(get_references_in_stmt): Likewise.
	* tree-dfa.c (get_ref_base_and_extent): Likewise.
	* tree-dump.c (dequeue_and_dump): Likewise.
	* tree-eh.c (lower_eh_constructs_2): Likewise.
	* tree-emutls.c (lower_emutls_1): Likewise.
	* tree-inline.c (remap_gimple_stmt): Likewise.
	* tree-nested.c (convert_nonlocal_reference_op): Likewise.
	(convert_nonlocal_omp_clauses): Likewise.
	(convert_local_reference_op): Likewise.
	(convert_local_omp_clauses): Likewise.
	(convert_tramp_reference_stmt): Likewise.
	(convert_gimple_call): Likewise.
	* tree-object-size.c (alloc_object_size): Likewise.
	* tree-pretty-print.c (dump_omp_clause): Likewise.
	(dump_generic_node): Likewise.
	(print_call_name): Likewise.
	* tree-scalar-evolution.c (expression_expensive_p): Likewise.
	* tree-sra.c (build_access_from_expr_1): Likewise.
	(create_access_replacement): Likewise.
	* tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Likewise.
	* tree-ssa-ccp.c (bit_value_binop_1): Likewise.
	(pass_fold_builtins::execute): Likewise.
	* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Likewise.
	* tree-ssa-loop-ivopts.c (contains_abnormal_ssa_name_p): Likewise.
	(find_deriving_biv_for_expr): Likewise.
	(create_new_iv): Likewise.
	* tree-ssa-loop-niter.c (split_to_var_and_offset): Likewise.
	(expand_simple_operations): Likewise.
	* tree-ssa-math-opts.c (pass_optimize_bswap::execute): Likewise.
	* tree-ssa-operands.c (get_expr_operands): Likewise.
	(parse_ssa_operands): Likewise.
	* tree-ssa-pre.c (fully_constant_expression): Likewise.
	(create_component_ref_by_pieces_1): Likewise.
	* tree-ssa-propagate.c (valid_gimple_rhs_p): Likewise.
	* tree-ssa-reassoc.c (init_range_entry): Likewise.
	* tree-ssa-sccvn.c (vn_get_stmt_kind): Likewise.
	(copy_reference_ops_from_ref): Likewise.
	(ao_ref_init_from_vn_reference): Likewise.
	* tree-ssa-strlen.c (get_string_length): Likewise.
	(find_equal_ptrs): Likewise.
	* tree-tailcall.c (process_assignment): Likewise.
	* tree-vect-patterns.c (adjust_bool_pattern): Likewise.
	* tree-vect-stmts.c (exist_non_indexing_operands_for_use_p): Likewise.
	(vectorizable_conversion): Likewise.
	* tree.c (wide_int_to_tree): Likewise.
	(cache_integer_cst): Likewise.
	(find_placeholder_in_expr): Likewise.
	(substitute_in_expr): Likewise.
	(omp_declare_simd_clauses_equal): Likewise.
	(type_cache_hasher::equal): Likewise.
	(add_expr): Likewise.
	(walk_type_fields): Likewise.
	(walk_tree_1): Likewise.
	(block_may_fallthru): Likewise.
	* tsan.c (instrument_builtin_call): Likewise.
	* var-tracking.c (adjust_mems): Likewise.
	(set_dv_changed): Likewise.
	* varasm.c (default_function_section): Likewise.
	(const_rtx_hash_1): Likewise.
	(output_constant_pool_1): Likewise.
	(output_addressed_constants): Likewise.
	(elf_record_gcc_switches): Likewise.

include/
	* libiberty.h (D_FALLTHRU): New macro.

diff --git gcc/gcc/Makefile.in gcc/gcc/Makefile.in
index 5e7422d..7970f4d 100644
--- gcc/gcc/Makefile.in
+++ gcc/gcc/Makefile.in
@@ -218,6 +218,11 @@ libgcov-merge-tool.o-warn = -Wno-error
 gimple-match.o-warn = -Wno-unused
 generic-match.o-warn = -Wno-unused
 dfp.o-warn = -Wno-strict-aliasing
+insn-attrtab.o-warn = -Wno-switch-fallthrough
+insn-dfatab.o-warn = -Wno-switch-fallthrough
+insn-latencytab.o-warn = -Wno-switch-fallthrough
+insn-output.o-warn = -Wno-switch-fallthrough
+insn-emit.o-warn = -Wno-switch-fallthrough
 
 # All warnings have to be shut off in stage1 if the compiler used then
 # isn't gcc; configure determines that.  WARN_CFLAGS will be either
diff --git gcc/gcc/alias.c gcc/gcc/alias.c
index dd1dfd3..28ce7a6 100644
--- gcc/gcc/alias.c
+++ gcc/gcc/alias.c
@@ -1399,6 +1399,7 @@ find_base_value (rtx src)
 	break;
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case PLUS:
     case MINUS:
@@ -1469,6 +1470,7 @@ find_base_value (rtx src)
       if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
 	break;
       /* Fall through.  */
+      gcc_fallthrough ();
     case HIGH:
     case PRE_INC:
     case PRE_DEC:
@@ -1893,6 +1895,7 @@ find_base_term (rtx x)
       if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode))
 	return 0;
       /* Fall through.  */
+      gcc_fallthrough ();
     case HIGH:
     case PRE_INC:
     case PRE_DEC:
@@ -1955,6 +1958,7 @@ find_base_term (rtx x)
       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
 	return 0;
       /* Fall through.  */
+      gcc_fallthrough ();
     case PLUS:
     case MINUS:
       {
diff --git gcc/gcc/asan.c gcc/gcc/asan.c
index 71095fb..c321e74 100644
--- gcc/gcc/asan.c
+++ gcc/gcc/asan.c
@@ -600,6 +600,7 @@ get_mem_refs_of_builtin_call (const gcall *call,
     case BUILT_IN_ATOMIC_LOAD_16:
       is_store = false;
       /* fall through.  */
+      gcc_fallthrough ();
 
     case BUILT_IN_SYNC_FETCH_AND_ADD_1:
     case BUILT_IN_SYNC_FETCH_AND_ADD_2:
@@ -799,6 +800,7 @@ get_mem_refs_of_builtin_call (const gcall *call,
 	  gcc_unreachable ();
 
 	access_size = int_size_in_bytes (TREE_TYPE (dest));
+	gcc_fallthrough ();
       }
 
     default:
diff --git gcc/gcc/auto-inc-dec.c gcc/gcc/auto-inc-dec.c
index bf4959b..8c24bea 100644
--- gcc/gcc/auto-inc-dec.c
+++ gcc/gcc/auto-inc-dec.c
@@ -523,6 +523,7 @@ attempt_change (rtx new_addr, rtx inc_reg)
 	reg_next_inc_use[regno] = NULL;
 
       /* Fallthru.  */
+      gcc_fallthrough ();
     case FORM_PRE_INC:
       regno = REGNO (inc_insn.reg_res);
       reg_next_def[regno] = mem_insn.insn;
diff --git gcc/gcc/builtins.c gcc/gcc/builtins.c
index 1465c60..c462bc5 100644
--- gcc/gcc/builtins.c
+++ gcc/gcc/builtins.c
@@ -2592,6 +2592,7 @@ expand_builtin_int_roundingfn_2 (tree exp, rtx target)
     CASE_FLT_FN (BUILT_IN_IRINT):
       fallback_fn = BUILT_IN_LRINT;
       /* FALLTHRU */
+      gcc_fallthrough ();
     CASE_FLT_FN (BUILT_IN_LRINT):
     CASE_FLT_FN (BUILT_IN_LLRINT):
       builtin_optab = lrint_optab;
@@ -2600,6 +2601,7 @@ expand_builtin_int_roundingfn_2 (tree exp, rtx target)
     CASE_FLT_FN (BUILT_IN_IROUND):
       fallback_fn = BUILT_IN_LROUND;
       /* FALLTHRU */
+      gcc_fallthrough ();
     CASE_FLT_FN (BUILT_IN_LROUND):
     CASE_FLT_FN (BUILT_IN_LLROUND):
       builtin_optab = lround_optab;
@@ -5906,6 +5908,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
     CASE_FLT_FN (BUILT_IN_ILOGB):
       if (! flag_unsafe_math_optimizations)
 	break;
+      gcc_fallthrough ();
     CASE_FLT_FN (BUILT_IN_ISINF):
     CASE_FLT_FN (BUILT_IN_FINITE):
     case BUILT_IN_ISFINITE:
@@ -6864,6 +6867,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	    return const0_rtx;
 	}
       /* FALLTHROUGH */
+      gcc_fallthrough ();
 
     case BUILT_IN_CHKP_BNDMK:
     case BUILT_IN_CHKP_BNDSTX:
@@ -8080,9 +8089,11 @@ fold_builtin_arith_overflow (location_t loc, enum built_in_function fcode,
     case BUILT_IN_ADD_OVERFLOW_P:
       ovf_only = true;
       /* FALLTHRU */
+      gcc_fallthrough ();
     case BUILT_IN_ADD_OVERFLOW:
       opcode = PLUS_EXPR;
       /* FALLTHRU */
+      gcc_fallthrough ();
     case BUILT_IN_SADD_OVERFLOW:
     case BUILT_IN_SADDL_OVERFLOW:
     case BUILT_IN_SADDLL_OVERFLOW:
@@ -8094,9 +8105,11 @@ fold_builtin_arith_overflow (location_t loc, enum built_in_function fcode,
     case BUILT_IN_SUB_OVERFLOW_P:
       ovf_only = true;
       /* FALLTHRU */
+      gcc_fallthrough ();
     case BUILT_IN_SUB_OVERFLOW:
       opcode = MINUS_EXPR;
       /* FALLTHRU */
+      gcc_fallthrough ();
     case BUILT_IN_SSUB_OVERFLOW:
     case BUILT_IN_SSUBL_OVERFLOW:
     case BUILT_IN_SSUBLL_OVERFLOW:
@@ -8108,9 +8121,11 @@ fold_builtin_arith_overflow (location_t loc, enum built_in_function fcode,
     case BUILT_IN_MUL_OVERFLOW_P:
       ovf_only = true;
       /* FALLTHRU */
+      gcc_fallthrough ();
     case BUILT_IN_MUL_OVERFLOW:
       opcode = MULT_EXPR;
       /* FALLTHRU */
+      gcc_fallthrough ();
     case BUILT_IN_SMUL_OVERFLOW:
     case BUILT_IN_SMULL_OVERFLOW:
     case BUILT_IN_SMULLL_OVERFLOW:
diff --git gcc/gcc/cfgexpand.c gcc/gcc/cfgexpand.c
index e4ddb3a..66be558 100644
--- gcc/gcc/cfgexpand.c
+++ gcc/gcc/cfgexpand.c
@@ -3661,9 +3661,11 @@ expand_gimple_stmt_1 (gimple *stmt)
 		case GIMPLE_TERNARY_RHS:
 		  ops.op2 = gimple_assign_rhs3 (assign_stmt);
 		  /* Fallthru */
+		  gcc_fallthrough ();
 		case GIMPLE_BINARY_RHS:
 		  ops.op1 = gimple_assign_rhs2 (assign_stmt);
 		  /* Fallthru */
+		  gcc_fallthrough ();
 		case GIMPLE_UNARY_RHS:
 		  ops.op0 = gimple_assign_rhs1 (assign_stmt);
 		  break;
@@ -4165,6 +4167,7 @@ expand_debug_expr (tree exp)
       if (!op2)
 	return NULL_RTX;
       /* Fall through.  */
+      gcc_fallthrough ();
 
     binary:
     case tcc_binary:
@@ -4195,6 +4198,7 @@ expand_debug_expr (tree exp)
 	  break;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
 
     unary:
     case tcc_unary:
@@ -4234,6 +4238,7 @@ expand_debug_expr (tree exp)
 	  return op0;
 	}
       /* Fall through...  */
+      gcc_fallthrough ();
 
     case INTEGER_CST:
     case REAL_CST:
@@ -4301,6 +4306,7 @@ expand_debug_expr (tree exp)
 	}
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     adjust_mode:
     case PAREN_EXPR:
@@ -4368,6 +4374,7 @@ expand_debug_expr (tree exp)
 	    return expand_debug_expr (newexp);
 	}
       /* FALLTHROUGH */
+      gcc_fallthrough ();
     case INDIRECT_REF:
       inner_mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)));
       op0 = expand_debug_expr (TREE_OPERAND (exp, 0));
@@ -4597,6 +4604,7 @@ expand_debug_expr (tree exp)
 				      GET_MODE (op1));
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
     case PLUS_EXPR:
       return simplify_gen_binary (PLUS, mode, op0, op1);
 
diff --git gcc/gcc/cfgrtl.c gcc/gcc/cfgrtl.c
index 3d8ed60..a6b7fbb 100644
--- gcc/gcc/cfgrtl.c
+++ gcc/gcc/cfgrtl.c
@@ -4123,6 +4123,7 @@ duplicate_insn_chain (rtx_insn *from, rtx_insn *to)
 	  if (TREE_CODE (INSN_VAR_LOCATION_DECL (insn)) == LABEL_DECL)
 	    break;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case INSN:
 	case CALL_INSN:
 	case JUMP_INSN:
diff --git gcc/gcc/combine.c gcc/gcc/combine.c
index 4db11b0..15e4b10 100644
--- gcc/gcc/combine.c
+++ gcc/gcc/combine.c
@@ -5122,6 +5122,7 @@ find_split_point (rtx *loc, rtx_insn *insn, bool set_src)
 	      || (GET_CODE (XEXP (x, 0)) == ASHIFT
 		  && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT)))
         return loc;
+      gcc_fallthrough ();
 
     default:
       break;
@@ -5136,6 +5137,7 @@ find_split_point (rtx *loc, rtx_insn *insn, bool set_src)
       if (split)
 	return split;
       /* ... fall through ...  */
+      gcc_fallthrough ();
     case RTX_BIN_ARITH:
     case RTX_COMM_ARITH:
     case RTX_COMPARE:
@@ -5144,6 +5146,7 @@ find_split_point (rtx *loc, rtx_insn *insn, bool set_src)
       if (split)
 	return split;
       /* ... fall through ...  */
+      gcc_fallthrough ();
     case RTX_UNARY:
       /* Some machines have (and (shift ...) ...) insns.  If X is not
 	 an AND, but XEXP (X, 0) is, use it as our split point.  */
@@ -6955,6 +6958,7 @@ expand_compound_operation (rtx x)
     {
     case ZERO_EXTEND:
       unsignedp = 1;
+      gcc_fallthrough ();
     case SIGN_EXTEND:
       /* We can't necessarily use a const_int for a multiword mode;
 	 it depends on implicitly extending the value.
@@ -6998,6 +7002,7 @@ expand_compound_operation (rtx x)
       unsignedp = 1;
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case SIGN_EXTRACT:
       /* If the operand is a CLOBBER, just return it.  */
@@ -8034,6 +8039,7 @@ make_compound_operation (rtx x, enum rtx_code in_code)
 	}
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case ASHIFTRT:
       lhs = XEXP (x, 0);
@@ -8261,6 +8267,8 @@ canon_reg_for_combine (rtx x, rtx reg)
       if (op0 != XEXP (x, 0) || op1 != XEXP (x, 1) || op2 != XEXP (x, 2))
 	return simplify_gen_ternary (GET_CODE (x), GET_MODE (x),
 				     GET_MODE (op0), op0, op1, op2);
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
 
     case RTX_OBJ:
       if (REG_P (x))
@@ -8273,6 +8281,7 @@ canon_reg_for_combine (rtx x, rtx reg)
 	}
 
       /* fall through */
+      gcc_fallthrough ();
 
     default:
       fmt = GET_RTX_FORMAT (code);
@@ -8528,6 +8537,7 @@ force_to_mode (rtx x, machine_mode mode, unsigned HOST_WIDE_INT mask,
       }
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case MULT:
       /* Substituting into the operands of a widening MULT is not likely to
@@ -8598,6 +8608,7 @@ force_to_mode (rtx x, machine_mode mode, unsigned HOST_WIDE_INT mask,
 				   XEXP (XEXP (x, 0), 1));
 	  return force_to_mode (x, mode, mask, next_select);
 	}
+      gcc_fallthrough ();
 
     binop:
       /* For most binary operations, just propagate into the operation and
@@ -8776,6 +8787,7 @@ force_to_mode (rtx x, machine_mode mode, unsigned HOST_WIDE_INT mask,
       if (mask == 1)
 	x = simplify_gen_binary (LSHIFTRT, GET_MODE (x),
 				 XEXP (x, 0), XEXP (x, 1));
+     gcc_fallthrough ();
 
     shiftrt:
 
@@ -8853,6 +8865,7 @@ force_to_mode (rtx x, machine_mode mode, unsigned HOST_WIDE_INT mask,
       /* (and (not FOO) CONST) is (not (or FOO (not CONST))), so we must
 	 use the full mask inside the NOT.  */
       mask = fuller_mask;
+      gcc_fallthrough ();
 
     unop:
       op0 = gen_lowpart_or_truncate (op_mode,
@@ -10155,6 +10168,7 @@ try_widen_shift_mode (enum rtx_code code, rtx op, int count,
 	    return mode;
 	}
       /* fall through */
+      gcc_fallthrough ();
 
     case ROTATE:
       return orig_mode;
@@ -10401,6 +10415,7 @@ simplify_shift_const_1 (enum rtx_code code, machine_mode result_mode,
 	    }
 
 	  /* ... fall through ...  */
+	  gcc_fallthrough ();
 
 	case LSHIFTRT:
 	case ASHIFT:
@@ -11360,6 +11375,7 @@ simplify_compare_const (enum rtx_code code, machine_mode mode,
 	  const_op -= 1;
 	  code = LE;
 	  /* ... fall through to LE case below.  */
+	  gcc_fallthrough ();
 	}
       else
 	break;
@@ -11389,6 +11405,7 @@ simplify_compare_const (enum rtx_code code, machine_mode mode,
 	  const_op -= 1;
 	  code = GT;
 	  /* ... fall through to GT below.  */
+	  gcc_fallthrough ();
 	}
       else
 	break;
@@ -11418,6 +11435,7 @@ simplify_compare_const (enum rtx_code code, machine_mode mode,
 	  const_op -= 1;
 	  code = LEU;
 	  /* ... fall through ...  */
+	  gcc_fallthrough ();
 	}
       /* (unsigned) < 0x80000000 is equivalent to >= 0.  */
       else if (mode_width - 1 < HOST_BITS_PER_WIDE_INT
@@ -11452,6 +11470,7 @@ simplify_compare_const (enum rtx_code code, machine_mode mode,
 	  const_op -= 1;
 	  code = GTU;
 	  /* ... fall through ...  */
+	  gcc_fallthrough ();
 	}
 
       /* (unsigned) >= 0x80000000 is equivalent to < 0.  */
@@ -11727,6 +11746,7 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1)
 	    }
 
 	  /* ... fall through ...  */
+	  gcc_fallthrough ();
 
 	case SIGN_EXTRACT:
 	  tem = expand_compound_operation (op0);
@@ -11824,6 +11844,7 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1)
 	    }
 
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 
 	case ABS:
 	  /* ABS is ignorable inside an equality comparison with zero.  */
@@ -12334,6 +12355,7 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1)
 	    }
 
 	  /* ... fall through ...  */
+	  gcc_fallthrough ();
 	case LSHIFTRT:
 	  /* If we have (compare (xshiftrt FOO N) (const_int C)) and
 	     the low order N bits of FOO are known to be zero, we can do this
diff --git gcc/gcc/convert.c gcc/gcc/convert.c
index e6b4d29..c0cc391 100644
--- gcc/gcc/convert.c
+++ gcc/gcc/convert.c
@@ -164,6 +164,7 @@ convert_to_real_1 (tree type, tree expr, bool fold_p)
 	       -fmath-errno.  */
 	    if (flag_errno_math)
 	      break;
+	    gcc_fallthrough ();
 	  CASE_MATHFN (ACOS)
 	  CASE_MATHFN (ACOSH)
 	  CASE_MATHFN (ASIN)
@@ -184,6 +185,7 @@ convert_to_real_1 (tree type, tree expr, bool fold_p)
 	    /* The above functions are not safe to do this conversion.  */
 	    if (!flag_unsafe_math_optimizations)
 	      break;
+	    gcc_fallthrough ();
 	  CASE_MATHFN (SQRT)
 	  CASE_MATHFN (FABS)
 	  CASE_MATHFN (LOGB)
@@ -245,6 +247,8 @@ convert_to_real_1 (tree type, tree expr, bool fold_p)
 		    }
 		}
 	    }
+	  /* XXX Really fallthru?  */
+	  gcc_fallthrough ();
 	default:
 	  break;
 	}
@@ -517,6 +521,7 @@ convert_to_integer_1 (tree type, tree expr, bool dofold)
 	  if (flag_trapping_math)
 	    break;
 	  /* ... Fall through ...  */
+	  gcc_fallthrough ();
 	CASE_FLT_FN (BUILT_IN_RINT):
 	  /* Only convert in ISO C99 mode and with -fno-math-errno.  */
 	  if (!targetm.libc_has_function (function_c99_misc) || flag_errno_math)
diff --git gcc/gcc/cse.c gcc/gcc/cse.c
index c14f29d..2f3effc 100644
--- gcc/gcc/cse.c
+++ gcc/gcc/cse.c
@@ -3586,6 +3586,7 @@ fold_rtx (rtx x, rtx_insn *insn)
 	    }
 
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 
 	from_plus:
 	case SMIN:    case SMAX:      case UMIN:    case UMAX:
@@ -6199,6 +6200,7 @@ cse_process_notes_1 (rtx x, rtx object, bool *changed)
       if (REG_NOTE_KIND (x) == REG_EQUAL)
 	XEXP (x, 0) = cse_process_notes (XEXP (x, 0), NULL_RTX, changed);
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case INSN_LIST:
     case INT_LIST:
diff --git gcc/gcc/cselib.c gcc/gcc/cselib.c
index 14c7b32..24b1976 100644
--- gcc/gcc/cselib.c
+++ gcc/gcc/cselib.c
@@ -1619,6 +1619,8 @@ cselib_expand_value_rtx_1 (rtx orig, struct expand_value_data *evd,
 		return orig;
 	    }
       }
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
 
     CASE_CONST_ANY:
     case SYMBOL_REF:
diff --git gcc/gcc/dbxout.c gcc/gcc/dbxout.c
index 25a03ef..79c5965 100644
--- gcc/gcc/dbxout.c
+++ gcc/gcc/dbxout.c
@@ -2460,12 +2460,14 @@ dbxout_expand_expr (tree expr)
 	    return NULL;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case PARM_DECL:
     case RESULT_DECL:
       if (DECL_HAS_VALUE_EXPR_P (expr))
 	return dbxout_expand_expr (DECL_VALUE_EXPR (expr));
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case CONST_DECL:
       return DECL_RTL_IF_SET (expr);
@@ -2868,6 +2870,7 @@ dbxout_symbol (tree decl, int local ATTRIBUTE_UNUSED)
       gcc_assert (TREE_CODE (decl) == VAR_DECL);
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case RESULT_DECL:
     case VAR_DECL:
diff --git gcc/gcc/df-scan.c gcc/gcc/df-scan.c
index 19d8e0f..b30d569 100644
--- gcc/gcc/df-scan.c
+++ gcc/gcc/df-scan.c
@@ -1999,6 +1999,7 @@ df_notes_rescan (rtx_insn *insn)
 	      df_uses_record (&collection_rec,
 			      &XEXP (note, 0), DF_REF_REG_USE,
 			      bb, insn_info, DF_REF_IN_NOTE);
+	      gcc_fallthrough ();
 	    default:
 	      break;
 	    }
@@ -2876,6 +2877,7 @@ df_uses_record (struct df_collection_rec *collection_rec,
 	  return;
 	}
       /* ... Fall through ...  */
+      gcc_fallthrough ();
 
     case REG:
       df_ref_record (DF_REF_REGULAR, collection_rec,
@@ -2923,6 +2925,7 @@ df_uses_record (struct df_collection_rec *collection_rec,
 		  break;
 		}
 	      /* Fall through.  */
+	      gcc_fallthrough ();
 	    case REG:
 	    case PARALLEL:
 	    case SCRATCH:
@@ -3035,6 +3038,7 @@ df_uses_record (struct df_collection_rec *collection_rec,
                      flags | DF_REF_READ_WRITE | DF_REF_PRE_POST_MODIFY);
 
       /* ... Fall through to handle uses ...  */
+      gcc_fallthrough ();
 
     default:
       break;
diff --git gcc/gcc/dojump.c gcc/gcc/dojump.c
index 6e0c01c..260c405 100644
--- gcc/gcc/dojump.c
+++ gcc/gcc/dojump.c
@@ -461,12 +461,16 @@ do_jump (tree exp, rtx_code_label *if_false_label,
           || TREE_CODE (TREE_OPERAND (exp, 0)) == ARRAY_REF
           || TREE_CODE (TREE_OPERAND (exp, 0)) == ARRAY_RANGE_REF)
         goto normal;
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
     case CONVERT_EXPR:
       /* If we are narrowing the operand, we have to do the compare in the
          narrower mode.  */
       if ((TYPE_PRECISION (TREE_TYPE (exp))
            < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (exp, 0)))))
         goto normal;
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
     case NON_LVALUE_EXPR:
     case ABS_EXPR:
     case NEGATE_EXPR:
@@ -510,6 +514,7 @@ do_jump (tree exp, rtx_code_label *if_false_label,
       code = NE_EXPR;
 
       /* FALLTHRU */
+      gcc_fallthrough ();
     case EQ_EXPR:
     case NE_EXPR:
     case LT_EXPR:
@@ -610,6 +615,7 @@ do_jump (tree exp, rtx_code_label *if_false_label,
 	goto normal;
 
       /* Boolean comparisons can be compiled as TRUTH_AND_EXPR.  */
+      gcc_fallthrough ();
 
     case TRUTH_AND_EXPR:
       /* High branch cost, expand as the bitwise AND of the conditions.
diff --git gcc/gcc/dwarf2cfi.c gcc/gcc/dwarf2cfi.c
index bcf79f5..71f645b 100644
--- gcc/gcc/dwarf2cfi.c
+++ gcc/gcc/dwarf2cfi.c
@@ -3306,6 +3306,7 @@ output_cfi_directive (FILE *f, dw_cfi_ref cfi)
 	  break;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
     case DW_CFA_expression:
       if (f != asm_out_file)
 	{
diff --git gcc/gcc/dwarf2out.c gcc/gcc/dwarf2out.c
index 14dcdf9..e0f079d 100644
--- gcc/gcc/dwarf2out.c
+++ gcc/gcc/dwarf2out.c
@@ -1815,6 +1815,7 @@ output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip)
 	  break;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
     case DW_OP_const4s:
       dw2_asm_output_data (4, val1->v.val_int, NULL);
       break;
@@ -1828,6 +1829,7 @@ output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip)
 	  break;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
     case DW_OP_const8s:
       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
       dw2_asm_output_data (8, val1->v.val_int, NULL);
@@ -5697,6 +5699,7 @@ print_dw_val (dw_val_node *val, bool recurse, FILE *outfile)
 	  if (node->dw_discr_next != NULL)
 	    fprintf (outfile, " | ");
 	}
+      gcc_fallthrough ();
     default:
       break;
     }
@@ -7788,6 +7791,7 @@ copy_dwarf_procs_ref_in_attrs (dw_die_ref die,
 	        = copy_dwarf_procedure (loc->dw_loc_oprnd1.v.val_die_ref.die,
 					type_node,
 					copied_dwarf_procs);
+	      gcc_fallthrough ();
 
 	    default:
 	      break;
@@ -8723,6 +8727,7 @@ value_format (dw_attr_node *a)
       if (dwarf_version >= 4)
 	return DW_FORM_sec_offset;
       /* FALLTHRU */
+      gcc_fallthrough ();
     case dw_val_class_vms_delta:
     case dw_val_class_offset:
       switch (DWARF_OFFSET_SIZE)
@@ -13334,6 +13339,8 @@ mem_loc_descriptor (rtx rtl, machine_mode mode,
       if (!subreg_lowpart_p (rtl))
 	break;
       inner = SUBREG_REG (rtl);
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
     case TRUNCATE:
       if (inner == NULL_RTX)
         inner = XEXP (rtl, 0);
@@ -13602,6 +13609,8 @@ mem_loc_descriptor (rtx rtl, machine_mode mode,
 						 initialized);
 	  break;
 	}
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
 
     symref:
       mem_loc_result = new_addr_loc_descr (rtl, dtprel_false);
@@ -13672,6 +13681,7 @@ mem_loc_descriptor (rtx rtl, machine_mode mode,
 					mode));
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case PLUS:
     plus:
@@ -14023,6 +14033,7 @@ mem_loc_descriptor (rtx rtl, machine_mode mode,
       if (!SCALAR_INT_MODE_P (mode))
 	break;
       /* FALLTHRU */
+      gcc_fallthrough ();
     case SMIN:
     case SMAX:
       mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode);
@@ -14395,6 +14406,7 @@ loc_descriptor (rtx rtl, machine_mode mode,
 
       rtl = XEXP (rtl, 1);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case PARALLEL:
       {
@@ -14537,9 +14549,12 @@ loc_descriptor (rtx rtl, machine_mode mode,
 	  break;
 	}
       /* FALLTHROUGH */
+      gcc_fallthrough ();
     case SYMBOL_REF:
       if (!const_ok_for_output (rtl))
 	break;
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
     case LABEL_REF:
       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
 	  && (dwarf_version >= 4 || !dwarf_strict))
@@ -14563,6 +14578,7 @@ loc_descriptor (rtx rtl, machine_mode mode,
 	  break;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
     do_default:
     default:
       if ((SCALAR_INT_MODE_P (mode)
@@ -15598,6 +15614,7 @@ resolve_args_picking_1 (dw_loc_descr_ref loc, unsigned initial_frame_offset,
 				       frame_offsets))
 	    return false;
 	  /* Fall through... */
+	  gcc_fallthrough ();
 
 	case DW_OP_skip:
 	  l = l->dw_loc_oprnd1.v.val_loc;
@@ -15936,6 +15953,7 @@ loc_list_from_tree_1 (tree loc, int want_address,
 	  break;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case PARM_DECL:
       if (context != NULL && context->dpi != NULL
@@ -15961,12 +15979,14 @@ loc_list_from_tree_1 (tree loc, int want_address,
 	  break;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case RESULT_DECL:
       if (DECL_HAS_VALUE_EXPR_P (loc))
 	return loc_list_from_tree_1 (DECL_VALUE_EXPR (loc),
 				     want_address, context);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case FUNCTION_DECL:
       {
@@ -16038,6 +16058,7 @@ loc_list_from_tree_1 (tree loc, int want_address,
 	  goto do_plus;
 	}
       /* Fallthru.  */
+      gcc_fallthrough ();
     case INDIRECT_REF:
       list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
       have_address = 1;
@@ -16351,6 +16372,7 @@ loc_list_from_tree_1 (tree loc, int want_address,
       }
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case COND_EXPR:
       {
@@ -17110,9 +17132,12 @@ add_const_value_attribute (dw_die_ref die, rtx rtl)
       if (CONSTANT_P (XEXP (rtl, 0)))
 	return add_const_value_attribute (die, XEXP (rtl, 0));
       /* FALLTHROUGH */
+      gcc_fallthrough ();
     case SYMBOL_REF:
       if (!const_ok_for_output (rtl))
 	return false;
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
     case LABEL_REF:
       if (dwarf_version >= 4 || !dwarf_strict)
 	goto rtl_addr;
@@ -17276,6 +17301,7 @@ rtl_for_decl_init (tree init, tree type)
 		  }
 	      }
 	    /* FALLTHRU */
+	    gcc_fallthrough ();
 
 	  default:
 	    return NULL;
@@ -18342,6 +18368,7 @@ add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr,
 	  return;
 
 	/* FALLTHRU */
+	gcc_fallthrough ();
 
       default:
 	/* Because of the complex interaction there can be with other GNAT
@@ -19652,6 +19679,7 @@ gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
 	}
       if (origin == NULL && DECL_ARTIFICIAL (node))
 	add_AT_flag (parm_die, DW_AT_artificial, 1);
+      gcc_fallthrough ();
     add_location:
       if (node && node != origin)
         equate_decl_number_to_die (node, parm_die);
@@ -25233,6 +25261,7 @@ output_macinfo (void)
 	     to optimize the whole block of predefined macros.  */
 	  if (i == 0)
 	    continue;
+	  gcc_fallthrough ();
 	default:
 	  break;
 	}
@@ -26132,6 +26161,7 @@ mark_base_types (dw_loc_descr_ref loc)
 	  if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
 	    continue;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case DW_OP_GNU_const_type:
 	  base_type = loc->dw_loc_oprnd1.v.val_die_ref.die;
 	  break;
@@ -26760,6 +26790,7 @@ hash_loc_operands (dw_loc_descr_ref loc, inchash::hash &hstate)
       if (loc->dtprel)
 	goto hash_addr;
       /* FALLTHRU */
+      gcc_fallthrough ();
     case DW_OP_const1u:
     case DW_OP_const1s:
     case DW_OP_const2u:
@@ -26903,6 +26934,7 @@ hash_loc_operands (dw_loc_descr_ref loc, inchash::hash &hstate)
 	  break;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
     case DW_OP_GNU_const_type:
       {
 	unsigned int byte_size
@@ -27009,6 +27041,7 @@ compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
       if (x->dtprel)
 	goto hash_addr;
       /* FALLTHRU */
+      gcc_fallthrough ();
     case DW_OP_const1u:
     case DW_OP_const1s:
     case DW_OP_const2u:
diff --git gcc/gcc/expmed.c gcc/gcc/expmed.c
index 6645a53..f4ecf0a 100644
--- gcc/gcc/expmed.c
+++ gcc/gcc/expmed.c
@@ -4473,6 +4473,7 @@ expand_divmod (int rem_flag, enum tree_code code, machine_mode mode,
 	      }
 	    break;
 	  }
+	gcc_fallthrough ();
       fail1:
 	delete_insns_since (last);
 	break;
@@ -5181,6 +5182,7 @@ make_tree (tree type, rtx x)
       if (t)
 	return fold_convert (type, build_fold_addr_expr (t));
       /* else fall through.  */
+      gcc_fallthrough ();
 
     default:
       t = build_decl (RTL_LOCATION (x), VAR_DECL, NULL_TREE, type);
diff --git gcc/gcc/expr.c gcc/gcc/expr.c
index 6547be1..3e5d3bc 100644
--- gcc/gcc/expr.c
+++ gcc/gcc/expr.c
@@ -7487,6 +7487,7 @@ safe_from_p (const_rtx x, tree exp, int top_p)
       if (!safe_from_p (x, TREE_OPERAND (exp, 1), 0))
 	return 0;
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case tcc_unary:
       return safe_from_p (x, TREE_OPERAND (exp, 0), 0);
@@ -7799,6 +7800,7 @@ expand_expr_addr_expr_1 (tree exp, rtx target, machine_mode tmode,
 	return expand_expr_addr_expr_1 (COMPOUND_LITERAL_EXPR_DECL (exp),
 					target, tmode, modifier, as);
       /* FALLTHRU */
+      gcc_fallthrough ();
     default:
       /* If the object is a DECL, then expand it for its rtl.  Don't bypass
 	 expand_expr, as that can have various side effects; LABEL_DECLs for
@@ -8422,6 +8424,8 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode,
 	 offset to have matching modes.  */
       else if (TYPE_PRECISION (sizetype) > TYPE_PRECISION (type))
 	treeop1 = fold_convert_loc (loc, type, treeop1);
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
 
     case PLUS_EXPR:
       /* If we are adding a constant, a VAR_DECL that is sp, fp, or ap, and
@@ -9057,6 +9061,7 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode,
 		  || (GET_MODE_PRECISION (TYPE_MODE (type))
 		      == TYPE_PRECISION (type)));
       /* fall through */
+      gcc_fallthrough ();
 
     case LSHIFT_EXPR:
     case RSHIFT_EXPR:
@@ -9590,10 +9595,17 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
     switch (TREE_CODE_LENGTH (code))
       {
 	default:
-	case 3: treeop2 = TREE_OPERAND (exp, 2);
-	case 2: treeop1 = TREE_OPERAND (exp, 1);
-	case 1: treeop0 = TREE_OPERAND (exp, 0);
-	case 0: break;
+	case 3:
+	  treeop2 = TREE_OPERAND (exp, 2);
+	  gcc_fallthrough ();
+	case 2:
+	  treeop1 = TREE_OPERAND (exp, 1);
+	  gcc_fallthrough ();
+	case 1:
+	  treeop0 = TREE_OPERAND (exp, 0);
+	  gcc_fallthrough ();
+	case 0:
+	  break;
       }
   ops.code = code;
   ops.type = type;
@@ -9717,6 +9729,7 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
 	    case GIMPLE_TERNARY_RHS:
 	      ops.op2 = gimple_assign_rhs3 (g);
 	      /* Fallthru */
+	      gcc_fallthrough ();
 	    case GIMPLE_BINARY_RHS:
 	      ops.op1 = gimple_assign_rhs2 (g);
 
@@ -9729,6 +9742,7 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
 		    break;
 		}
 	      /* Fallthru */
+	      gcc_fallthrough ();
 	    case GIMPLE_UNARY_RHS:
 	      ops.op0 = gimple_assign_rhs1 (g);
 	      ops.type = TREE_TYPE (gimple_assign_lhs (g));
@@ -9765,10 +9779,12 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
 	layout_decl (exp, 0);
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case FUNCTION_DECL:
     case RESULT_DECL:
       decl_rtl = DECL_RTL (exp);
+      gcc_fallthrough ();
     expand_decl_rtl:
       gcc_assert (decl_rtl);
 
@@ -9973,6 +9989,7 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
 	}
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case STRING_CST:
       temp = expand_expr_constant (exp, 1, modifier);
diff --git gcc/gcc/final.c gcc/gcc/final.c
index 5b04311..b26d101 100644
--- gcc/gcc/final.c
+++ gcc/gcc/final.c
@@ -2096,9 +2096,13 @@ output_alternate_entry_point (FILE *file, rtx_insn *insn)
     case LABEL_WEAK_ENTRY:
 #ifdef ASM_WEAKEN_LABEL
       ASM_WEAKEN_LABEL (file, name);
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
 #endif
     case LABEL_GLOBAL_ENTRY:
       targetm.asm_out.globalize_label (file, name);
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
     case LABEL_STATIC_ENTRY:
 #ifdef ASM_OUTPUT_TYPE_DIRECTIVE
       ASM_OUTPUT_TYPE_DIRECTIVE (file, name, "function");
@@ -3892,6 +3896,7 @@ output_addr_const (FILE *file, rtx x)
     case LABEL_REF:
       x = LABEL_REF_LABEL (x);
       /* Fall through.  */
+      gcc_fallthrough ();
     case CODE_LABEL:
       ASM_GENERATE_INTERNAL_LABEL (buf, "L", CODE_LABEL_NUMBER (x));
 #ifdef ASM_OUTPUT_LABEL_REF
diff --git gcc/gcc/fold-const.c gcc/gcc/fold-const.c
index f97b8bf..5d1f8e1 100644
--- gcc/gcc/fold-const.c
+++ gcc/gcc/fold-const.c
@@ -467,6 +467,7 @@ negate_expr_p (tree t)
 	break;
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case RDIV_EXPR:
       if (! HONOR_SIGN_DEPENDENT_ROUNDING (element_mode (TREE_TYPE (t))))
@@ -641,6 +642,7 @@ fold_negate_expr (location_t loc, tree t)
         break;
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case RDIV_EXPR:
       if (! HONOR_SIGN_DEPENDENT_ROUNDING (element_mode (type)))
@@ -1301,6 +1303,7 @@ const_binop (enum tree_code code, tree arg1, tree arg2)
                                 /* do_nonfinite= */ folding_initializer,
 				mpc_div);
 	  /* Fallthru ... */
+	  gcc_fallthrough ();
 	case TRUNC_DIV_EXPR:
 	case CEIL_DIV_EXPR:
 	case FLOOR_DIV_EXPR:
@@ -2229,6 +2232,7 @@ fold_convert_loc (location_t loc, tree type, tree arg)
 	      != TYPE_ADDR_SPACE (TREE_TYPE (orig))))
 	return fold_build1_loc (loc, ADDR_SPACE_CONVERT_EXPR, type, arg);
       /* fall through */
+      gcc_fallthrough ();
 
     case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
     case OFFSET_TYPE:
@@ -3031,6 +3035,7 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
 	    return 0;
 
 	/* Fallthru.  */
+	gcc_fallthrough ();
 	case REALPART_EXPR:
 	case VIEW_CONVERT_EXPR:
 	  return OP_SAME (0);
@@ -3141,6 +3146,7 @@ operand_equal_p (const_tree arg0, const_tree arg1, unsigned int flags)
 	    return 0;
 	  /* The multiplcation operands are commutative.  */
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 
 	case TRUTH_AND_EXPR:
 	case TRUTH_OR_EXPR:
@@ -3698,6 +3704,7 @@ fold_truth_not_expr (location_t loc, tree arg)
 	return build1_loc (loc, TRUTH_NOT_EXPR, type, arg);
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case FLOAT_EXPR:
       loc1 = expr_location_or (TREE_OPERAND (arg, 0), loc);
@@ -4461,6 +4468,7 @@ make_range_step (location_t loc, enum tree_code code, tree arg0, tree arg1,
 
       if (TYPE_OVERFLOW_UNDEFINED (arg0_type))
 	*strict_overflow_p = true;
+      gcc_fallthrough ();
 
       normalize:
 	/* Check for an unsigned range which has wrapped around the maximum
@@ -4954,6 +4962,7 @@ merge_ranges (int *pin_p, tree *plow, tree *phigh, int in0_p, tree low0,
 			!= GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (low0))))
 		      break;
 		    /* FALLTHROUGH */
+		    gcc_fallthrough ();
 		  case INTEGER_TYPE:
 		    if (tree_int_cst_equal (low0,
 					    TYPE_MIN_VALUE (TREE_TYPE (low0))))
@@ -4977,6 +4986,7 @@ merge_ranges (int *pin_p, tree *plow, tree *phigh, int in0_p, tree low0,
 			!= GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (high1))))
 		      break;
 		    /* FALLTHROUGH */
+		    gcc_fallthrough ();
 		  case INTEGER_TYPE:
 		    if (tree_int_cst_equal (high1,
 					    TYPE_MAX_VALUE (TREE_TYPE (high1))))
@@ -5092,6 +5102,7 @@ fold_cond_expr_with_comparison (location_t loc, tree type,
 	if (flag_trapping_math)
 	  break;
 	/* Fall through.  */
+	gcc_fallthrough ();
       case GE_EXPR:
       case GT_EXPR:
 	if (TYPE_UNSIGNED (TREE_TYPE (arg1)))
@@ -5102,6 +5113,8 @@ fold_cond_expr_with_comparison (location_t loc, tree type,
       case UNLT_EXPR:
 	if (flag_trapping_math)
 	  break;
+	/* Fall through.  */
+	gcc_fallthrough ();
       case LE_EXPR:
       case LT_EXPR:
 	if (TYPE_UNSIGNED (TREE_TYPE (arg1)))
@@ -6121,6 +6134,7 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type,
       if (tree_int_cst_sgn (c) == -1)
         break;
       /* FALLTHROUGH */
+      gcc_fallthrough ();
     case NEGATE_EXPR:
       /* For division and modulus, type can't be unsigned, as e.g.
 	 (-(x / 2U)) / 2U isn't equal to -((x / 2U) / 2U) for x >= 2.
@@ -6284,6 +6298,7 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type,
 	}
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case TRUNC_DIV_EXPR:  case CEIL_DIV_EXPR:  case FLOOR_DIV_EXPR:
     case ROUND_DIV_EXPR:  case EXACT_DIV_EXPR:
@@ -9455,6 +9470,7 @@ fold_binary_loc (location_t loc,
                 }
             }
 	}
+      gcc_fallthrough ();
 
      bit_rotate:
       /* (A << C1) + (A >> C2) if A is unsigned and C1+C2 is the size of A
@@ -9544,6 +9560,7 @@ fold_binary_loc (location_t loc,
 	      }
 	  }
       }
+    gcc_fallthrough ();
 
     associate:
       /* In most languages, can't associate operations on floats through
@@ -10193,6 +10210,7 @@ fold_binary_loc (location_t loc,
 	}
 
       /* Fall through */
+      gcc_fallthrough ();
 
     case ROUND_DIV_EXPR:
     case CEIL_DIV_EXPR:
@@ -10326,6 +10344,8 @@ fold_binary_loc (location_t loc,
       /* If first arg is constant zero, return it.  */
       if (integer_zerop (arg0))
 	return fold_convert_loc (loc, type, arg0);
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
     case TRUTH_AND_EXPR:
       /* If either arg is constant true, drop it.  */
       if (TREE_CODE (arg0) == INTEGER_CST && ! integer_zerop (arg0))
@@ -10381,6 +10401,8 @@ fold_binary_loc (location_t loc,
       /* If first arg is constant true, return it.  */
       if (TREE_CODE (arg0) == INTEGER_CST && ! integer_zerop (arg0))
 	return fold_convert_loc (loc, type, arg0);
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
     case TRUTH_OR_EXPR:
       /* If either arg is constant zero, drop it.  */
       if (TREE_CODE (arg0) == INTEGER_CST && integer_zerop (arg0))
@@ -11226,6 +11248,7 @@ contains_label_1 (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
       *walk_subtrees = 0;
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     default:
       return NULL_TREE;
@@ -12555,6 +12578,7 @@ multiple_of_p (tree type, const_tree top, const_tree bottom)
       if (!integer_pow2p (bottom))
 	return 0;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case MULT_EXPR:
       return (multiple_of_p (type, TREE_OPERAND (top, 0), bottom)
@@ -12591,6 +12615,7 @@ multiple_of_p (tree type, const_tree top, const_tree bottom)
 	return 0;
 
       /* .. fall through ...  */
+      gcc_fallthrough ();
 
     case SAVE_EXPR:
       return multiple_of_p (type, TREE_OPERAND (top, 0), bottom);
diff --git gcc/gcc/gcc.c gcc/gcc/gcc.c
index 7460f6a..f431660 100644
--- gcc/gcc/gcc.c
+++ gcc/gcc/gcc.c
@@ -3857,6 +3857,7 @@ driver_handle_option (struct gcc_options *opts,
 
     case OPT_fcompare_debug_:
       compare_debug_replacement_opt = decoded->canonical_option[0];
+      gcc_fallthrough ();
     compare_debug_with_arg:
       gcc_assert (decoded->canonical_option_num_elements == 1);
       gcc_assert (arg != NULL);
@@ -5936,6 +5937,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
 	c = *p++;
 
 	/* Fall through.  */
+	gcc_fallthrough ();
       default:
 	/* Ordinary character: put it into the current argument.  */
 	obstack_1grow (&obstack, c);
diff --git gcc/gcc/gcov-tool.c gcc/gcc/gcov-tool.c
index f3da73c..28c9393 100644
--- gcc/gcc/gcov-tool.c
+++ gcc/gcc/gcov-tool.c
@@ -547,9 +547,11 @@ process_args (int argc, char **argv)
         case 'h':
           print_usage (false);
           /* Print_usage will exit.  */
+	  gcc_fallthrough ();
         case 'v':
           print_version ();
           /* Print_version will exit.  */
+	  gcc_fallthrough ();
         default:
           print_usage (true);
           /* Print_usage will exit.  */
diff --git gcc/gcc/gcse.c gcc/gcc/gcse.c
index a3a7dc3..56f8c14 100644
--- gcc/gcc/gcse.c
+++ gcc/gcc/gcse.c
@@ -783,6 +783,7 @@ want_to_gcse_p (rtx x, machine_mode mode, int *max_distance_ptr)
 	return 0;
 
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     default:
       if (doing_code_hoisting_p)
diff --git gcc/gcc/genattrtab.c gcc/gcc/genattrtab.c
index d39d4a7..689b4b8 100644
--- gcc/gcc/genattrtab.c
+++ gcc/gcc/genattrtab.c
@@ -888,6 +888,7 @@ check_attr_test (file_location loc, rtx exp, attr_desc *attr)
 	  ATTR_IND_SIMPLIFIED_P (exp) = 1;
 	  break;
 	}
+      gcc_fallthrough ();
     default:
       fatal_at (loc, "invalid operator `%s' in definition of attribute"
 		" `%s'", GET_RTX_NAME (GET_CODE (exp)), attr->name);
@@ -976,6 +977,7 @@ check_attr_value (file_location loc, rtx exp, struct attr_desc *attr)
 	  break;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case IOR:
     case AND:
@@ -1218,6 +1220,7 @@ make_canonical (file_location loc, struct attr_desc *attr, rtx exp)
 
       exp = newexp;
       /* Fall through to COND case since this is now a COND.  */
+      gcc_fallthrough ();
 
     case COND:
       {
@@ -3453,11 +3456,14 @@ write_test_expr (FILE *outf, rtx exp, unsigned int attrs_cached, int flags,
     case LEU: case LTU:
       fprintf (outf, "(unsigned) ");
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case EQ: case NE:
     case GE: case GT:
     case LE: case LT:
       comparison_operator = FLG_BITWISE;
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
 
     case PLUS:   case MINUS:  case MULT:     case DIV:      case MOD:
     case AND:    case IOR:    case XOR:
@@ -3613,6 +3619,7 @@ write_test_expr (FILE *outf, rtx exp, unsigned int attrs_cached, int flags,
 	}
 
       /* Otherwise, fall through to normal unary operator.  */
+      gcc_fallthrough ();
 
     /* Unary operators.  */
     case ABS:  case NEG:
diff --git gcc/gcc/genconfig.c gcc/gcc/genconfig.c
index 815e30d..ac65338 100644
--- gcc/gcc/genconfig.c
+++ gcc/gcc/genconfig.c
@@ -83,6 +83,8 @@ walk_insn_part (rtx part, int recog_p, int non_pc_set_src)
     case MATCH_OP_DUP:
     case MATCH_PAR_DUP:
       ++dup_operands_seen_this_insn;
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
     case MATCH_SCRATCH:
     case MATCH_PARALLEL:
     case MATCH_OPERATOR:
diff --git gcc/gcc/gengtype-parse.c gcc/gcc/gengtype-parse.c
index 954ac2a..2f635f5 100644
--- gcc/gcc/gengtype-parse.c
+++ gcc/gcc/gengtype-parse.c
@@ -662,6 +662,7 @@ direct_declarator (type_p ty, const char **namep, options_p *optsp,
     case GTY_TOKEN:
       *optsp = gtymarker ();
       /* fall through */
+      gcc_fallthrough ();
 
     case ID:
       *namep = require (ID);
diff --git gcc/gcc/gengtype.c gcc/gcc/gengtype.c
index 5479b8f..e73f5a2 100644
--- gcc/gcc/gengtype.c
+++ gcc/gcc/gengtype.c
@@ -175,6 +175,8 @@ dbgprint_count_type_at (const char *fil, int lin, const char *msg, type_p t)
 	{
 	case TYPE_UNDEFINED:
 	  nb_undefined++;
+	  /* XXX Really fallthru?  */
+	  gcc_fallthrough ();
 	case TYPE_SCALAR:
 	  nb_scalar++;
 	  break;
diff --git gcc/gcc/genmodes.c gcc/gcc/genmodes.c
index 788031b..3cafa33 100644
--- gcc/gcc/genmodes.c
+++ gcc/gcc/genmodes.c
@@ -267,6 +267,7 @@ enum requirement { SET, UNSET, OPTIONAL };
       if (val != unset)							\
 	error ("%s:%d: (%s) field %s must not be set",			\
 	       file, line, mname, fname);				\
+      gcc_fallthrough ();						\
     case OPTIONAL:							\
       break;								\
     }									\
diff --git gcc/gcc/genpreds.c gcc/gcc/genpreds.c
index dd7dbbf..83f6159 100644
--- gcc/gcc/genpreds.c
+++ gcc/gcc/genpreds.c
@@ -52,11 +52,13 @@ validate_exp (rtx exp, const char *name, file_location loc)
       if (validate_exp (XEXP (exp, 2), name, loc))
 	return true;
       /* else fall through */
+      gcc_fallthrough ();
     case AND:
     case IOR:
       if (validate_exp (XEXP (exp, 1), name, loc))
 	return true;
       /* else fall through */
+      gcc_fallthrough ();
     case NOT:
       return validate_exp (XEXP (exp, 0), name, loc);
 
@@ -75,6 +77,7 @@ validate_exp (rtx exp, const char *name, file_location loc)
 	  }
       }
       /* fall through */
+      gcc_fallthrough ();
 
       /* These need no special checking.  */
     case MATCH_OPERAND:
@@ -175,11 +178,13 @@ needs_variable (rtx exp, const char *var)
       if (needs_variable (XEXP (exp, 2), var))
 	return true;
       /* else fall through */
+      gcc_fallthrough ();
     case AND:
     case IOR:
       if (needs_variable (XEXP (exp, 1), var))
 	return true;
       /* else fall through */
+      gcc_fallthrough ();
     case NOT:
       return needs_variable (XEXP (exp, 0), var);
 
diff --git gcc/gcc/genrecog.c gcc/gcc/genrecog.c
index a9f5a4a..1ef3cd1 100644
--- gcc/gcc/genrecog.c
+++ gcc/gcc/genrecog.c
@@ -380,6 +380,7 @@ find_operand (rtx pattern, int n, rtx stop)
 	  if (! XVEC (pattern, i))
 	    break;
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 
 	case 'E':
 	  for (j = 0; j < XVECLEN (pattern, i); j++)
@@ -432,6 +433,7 @@ find_matching_operand (rtx pattern, int n)
 	  if (! XVEC (pattern, i))
 	    break;
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 
 	case 'E':
 	  for (j = 0; j < XVECLEN (pattern, i); j++)
@@ -3831,6 +3833,7 @@ match_pattern_2 (state *s, md_rtx_info *info, position *pos, rtx pattern)
 	  /* Use the same code check as the original operand.  */
 	  pattern = find_operand (info->def, XINT (pattern, 0), NULL_RTX);
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 
 	case MATCH_PARALLEL:
 	case MATCH_OPERAND:
diff --git gcc/gcc/gensupport.c gcc/gcc/gensupport.c
index 0eb4591..e1a084b 100644
--- gcc/gcc/gensupport.c
+++ gcc/gcc/gensupport.c
@@ -517,6 +517,7 @@ process_rtx (rtx desc, file_location loc)
     case DEFINE_SPECIAL_PREDICATE:
       process_define_predicate (desc, loc);
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case DEFINE_CONSTRAINT:
     case DEFINE_REGISTER_CONSTRAINT:
@@ -1019,6 +1020,7 @@ get_alternatives_number (rtx pattern, int *n_alt, file_location loc)
 		    XINT (pattern, 0));
 	  return 0;
 	}
+      gcc_fallthrough ();
 
     default:
       break;
@@ -1038,6 +1040,8 @@ get_alternatives_number (rtx pattern, int *n_alt, file_location loc)
 	case 'V':
 	  if (XVEC (pattern, i) == NULL)
 	    break;
+	  /* XXX Really fallthru?  */
+	  gcc_fallthrough ();
 
 	case 'E':
 	  for (j = XVECLEN (pattern, i) - 1; j >= 0; --j)
@@ -1073,6 +1077,7 @@ collect_insn_data (rtx pattern, int *palt, int *pmax)
       i = n_alternatives (XSTR (pattern, code == MATCH_SCRATCH ? 1 : 2));
       *palt = (i > *palt ? i : *palt);
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case MATCH_OPERATOR:
     case MATCH_PARALLEL:
@@ -1099,6 +1104,7 @@ collect_insn_data (rtx pattern, int *palt, int *pmax)
 	  if (XVEC (pattern, i) == NULL)
 	    break;
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 	case 'E':
 	  for (j = XVECLEN (pattern, i) - 1; j >= 0; --j)
 	    collect_insn_data (XVECEXP (pattern, i, j), palt, pmax);
@@ -1153,6 +1159,7 @@ alter_predicate_for_insn (rtx pattern, int alt, int max_op,
 	  }
       }
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case MATCH_OPERATOR:
     case MATCH_SCRATCH:
@@ -2156,6 +2163,8 @@ subst_dup (rtx pattern, int n_alt, int n_subst_alt)
 	case 'V':
 	  if (XVEC (pattern, i) == NULL)
 	    break;
+	  /* XXX Really fallthru?  */
+	  gcc_fallthrough ();
 	case 'E':
 	  if (code != MATCH_DUP && code != MATCH_OP_DUP)
 	    for (j = XVECLEN (pattern, i) - 1; j >= 0; --j)
@@ -2596,6 +2605,7 @@ read_md_rtx (md_rtx_info *info)
       record_insn_name (insn_sequence_num, XSTR (def, 0));
 
       /* Fall through.  */
+      gcc_fallthrough ();
     case DEFINE_PEEPHOLE:
       counter = &insn_sequence_num;
       break;
diff --git gcc/gcc/gimple-fold.c gcc/gcc/gimple-fold.c
index 36c105f..83cbdbc 100644
--- gcc/gcc/gimple-fold.c
+++ gcc/gcc/gimple-fold.c
@@ -1669,6 +1669,7 @@ gimple_fold_builtin_fputs (gimple_stmt_iterator *gsi,
 	  }
       }
       /* FALLTHROUGH */
+      gcc_fallthrough ();
     case 1: /* length is greater than 1, call fwrite.  */
       {
 	/* If optimizing for size keep fputs.  */
@@ -3820,6 +3821,7 @@ fold_stmt_1 (gimple_stmt_iterator *gsi, bool inplace, tree (*valueize) (tree))
 				  swap_tree_comparison (gimple_cond_code (gc)));
 	    changed = true;
 	  }
+	gcc_fallthrough ();
       }
     default:;
     }
@@ -4655,6 +4657,7 @@ and_comparisons_1 (enum tree_code code1, tree op1a, tree op1b,
 		}
 	      return result;
 	    }
+	  gcc_fallthrough ();
 
 	default:
 	  break;
@@ -5119,6 +5122,7 @@ or_comparisons_1 (enum tree_code code1, tree op1a, tree op1b,
 		}
 	      return result;
 	    }
+	  gcc_fallthrough ();
 
 	default:
 	  break;
@@ -5795,6 +5799,7 @@ fold_const_aggregate_ref_1 (tree t, tree (*valueize) (tree))
 	    }
 	}
       /* Fallthru.  */
+      gcc_fallthrough ();
 
     case COMPONENT_REF:
     case BIT_FIELD_REF:
diff --git gcc/gcc/gimple-pretty-print.c gcc/gcc/gimple-pretty-print.c
index 48edacc..7c12f84 100644
--- gcc/gcc/gimple-pretty-print.c
+++ gcc/gcc/gimple-pretty-print.c
@@ -517,8 +517,10 @@ dump_gimple_assign (pretty_printer *buffer, gassign *gs, int spc, int flags)
 	{
 	case 4:
 	  arg3 = gimple_assign_rhs3 (gs);
+	  gcc_fallthrough ();
 	case 3:
 	  arg2 = gimple_assign_rhs2 (gs);
+	  gcc_fallthrough ();
 	case 2:
 	  arg1 = gimple_assign_rhs1 (gs);
 	  break;
diff --git gcc/gcc/gimple-ssa-backprop.c gcc/gcc/gimple-ssa-backprop.c
index d96bcca..61c5e59 100644
--- gcc/gcc/gimple-ssa-backprop.c
+++ gcc/gcc/gimple-ssa-backprop.c
@@ -434,6 +434,7 @@ backprop::process_assign_use (gassign *assign, tree rhs, usage_info *info)
 	  && gimple_assign_rhs2 (assign) == rhs)
 	info->flags.ignore_sign = true;
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case NEGATE_EXPR:
     case RDIV_EXPR:
diff --git gcc/gcc/gimple-ssa-strength-reduction.c gcc/gcc/gimple-ssa-strength-reduction.c
index 0824f17..9edf3df 100644
--- gcc/gcc/gimple-ssa-strength-reduction.c
+++ gcc/gcc/gimple-ssa-strength-reduction.c
@@ -1695,6 +1695,7 @@ find_candidates_dom_walker::before_dom_children (basic_block bb)
 	    case MINUS_EXPR:
 	      rhs2 = gimple_assign_rhs2 (gs);
 	      /* Fall-through.  */
+	      gcc_fallthrough ();
 
 	    CASE_CONVERT:
 	    case MODIFY_EXPR:
diff --git gcc/gcc/gimple-streamer-in.c gcc/gcc/gimple-streamer-in.c
index f706db9..2aa7aff 100644
--- gcc/gcc/gimple-streamer-in.c
+++ gcc/gcc/gimple-streamer-in.c
@@ -145,6 +145,7 @@ input_gimple_stmt (struct lto_input_block *ib, struct data_in *data_in,
 	asm_stmt->string = TREE_STRING_POINTER (str);
       }
       /* Fallthru  */
+      gcc_fallthrough ();
 
     case GIMPLE_ASSIGN:
     case GIMPLE_CALL:
diff --git gcc/gcc/gimple-streamer-out.c gcc/gcc/gimple-streamer-out.c
index 35124bd..1632a73 100644
--- gcc/gcc/gimple-streamer-out.c
+++ gcc/gcc/gimple-streamer-out.c
@@ -121,6 +121,7 @@ output_gimple_stmt (struct output_block *ob, gimple *stmt)
 			       gimple_asm_string (asm_stmt), true);
       }
       /* Fallthru  */
+      gcc_fallthrough ();
 
     case GIMPLE_ASSIGN:
     case GIMPLE_CALL:
diff --git gcc/gcc/gimple-walk.c gcc/gcc/gimple-walk.c
index be501c5..18e9787 100644
--- gcc/gcc/gimple-walk.c
+++ gcc/gcc/gimple-walk.c
@@ -646,6 +646,7 @@ walk_gimple_stmt (gimple_stmt_iterator *gsi, walk_stmt_fn callback_stmt,
 	return wi->callback_result;
 
       /* FALL THROUGH.  */
+      gcc_fallthrough ();
     case GIMPLE_OMP_CRITICAL:
     case GIMPLE_OMP_MASTER:
     case GIMPLE_OMP_TASKGROUP:
diff --git gcc/gcc/gimple.c gcc/gcc/gimple.c
index e275dfc..ca9ec11 100644
--- gcc/gcc/gimple.c
+++ gcc/gcc/gimple.c
@@ -1818,6 +1818,7 @@ gimple_copy (gimple *stmt)
 	  t = unshare_expr (gimple_omp_sections_control (stmt));
 	  gimple_omp_sections_set_control (copy, t);
 	  /* FALLTHRU  */
+	  gcc_fallthrough ();
 
 	case GIMPLE_OMP_SINGLE:
 	case GIMPLE_OMP_TARGET:
diff --git gcc/gcc/gimplify.c gcc/gcc/gimplify.c
index 47c4d25..3b01cb4 100644
--- gcc/gcc/gimplify.c
+++ gcc/gcc/gimplify.c
@@ -1580,6 +1580,7 @@ warn_switch_unreachable_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p,
 	  return integer_zero_node;
 	}
       /* Fall through.  */
+      gcc_fallthrough ();
     case GIMPLE_BIND:
     case GIMPLE_CATCH:
     case GIMPLE_EH_FILTER:
@@ -3035,6 +3301,7 @@ gimple_boolify (tree expr)
       /* Also boolify the arguments of truth exprs.  */
       TREE_OPERAND (expr, 1) = gimple_boolify (TREE_OPERAND (expr, 1));
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case TRUTH_NOT_EXPR:
       TREE_OPERAND (expr, 0) = gimple_boolify (TREE_OPERAND (expr, 0));
@@ -4570,6 +4837,7 @@ gimplify_modify_expr_rhs (tree *expr_p, tree *from_p, tree *to_p,
 		return GS_OK;
 	      }
 	  }
+	gcc_fallthrough ();
 
 	default:
 	  break;
@@ -5154,6 +5422,7 @@ gimplify_addr_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
 	goto do_indirect_ref;
 
       /* ... fall through ... */
+      gcc_fallthrough ();
 
     default:
       /* If we see a call to a declared builtin or see its address
@@ -6076,6 +6345,7 @@ omp_default_clause (struct gimplify_omp_ctx *ctx, tree decl,
 	error_at (ctx->location, "enclosing %s", rtype);
       }
       /* FALLTHRU */
+      gcc_fallthrough ();
     case OMP_CLAUSE_DEFAULT_SHARED:
       flags |= GOVD_SHARED;
       break;
@@ -6118,6 +6388,7 @@ omp_default_clause (struct gimplify_omp_ctx *ctx, tree decl,
 	flags |= GOVD_FIRSTPRIVATE;
       else
 	flags |= GOVD_SHARED;
+      gcc_fallthrough ();
     found_outer:
       break;
 
@@ -6639,6 +6910,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
       case OMP_TARGET_EXIT_DATA:
       case OACC_HOST_DATA:
 	ctx->target_firstprivatize_array_bases = true;
+	gcc_fallthrough ();
       default:
 	break;
       }
@@ -6904,6 +7176,8 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
 	    case OACC_DATA:
 	      if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
 		break;
+	      /* XXX Really fallthru?  */
+	      gcc_fallthrough ();
 	    case OMP_TARGET_DATA:
 	    case OMP_TARGET_ENTER_DATA:
 	    case OMP_TARGET_EXIT_DATA:
@@ -7388,6 +7662,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
 
 	do_add:
 	  decl = OMP_CLAUSE_DECL (c);
+	  gcc_fallthrough ();
 	do_add_decl:
 	  if (error_operand_p (decl))
 	    {
@@ -7521,6 +7796,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
 			  "copyprivate variable %qE is not threadprivate"
 			  " or private in outer context", DECL_NAME (decl));
 	    }
+	  gcc_fallthrough ();
 	do_notice:
 	  if (outer_ctx)
 	    omp_notice_variable (outer_ctx, decl, true);
@@ -7569,11 +7845,13 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
 	      remove = true;
 	    }
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 
 	case OMP_CLAUSE_FINAL:
 	  OMP_CLAUSE_OPERAND (c, 0)
 	    = gimple_boolify (OMP_CLAUSE_OPERAND (c, 0));
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 
 	case OMP_CLAUSE_SCHEDULE:
 	case OMP_CLAUSE_NUM_THREADS:
@@ -8605,6 +8883,7 @@ find_combined_omp_for (tree *tp, int *walk_subtrees, void *)
     case OMP_FOR:
       *walk_subtrees = 1;
       /* FALLTHRU */
+      gcc_fallthrough ();
     case OMP_SIMD:
       if (OMP_FOR_INIT (*tp) != NULL_TREE)
 	return *tp;
@@ -9197,6 +9476,7 @@ gimplify_omp_for (tree *expr_p, gimple_seq *pre_p)
 		}
 
 	      /* Fallthru.  */
+	      gcc_fallthrough ();
 	    case MINUS_EXPR:
 	    case POINTER_PLUS_EXPR:
 	      gcc_assert (TREE_OPERAND (t, 0) == decl);
@@ -9928,6 +10208,8 @@ goa_stabilize_expr (tree *expr_p, gimple_seq *pre_p, tree lhs_addr,
     case tcc_comparison:
       saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 1), pre_p, lhs_addr,
 				     lhs_var);
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
     case tcc_unary:
       saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 0), pre_p, lhs_addr,
 				     lhs_var);
@@ -9942,6 +10224,8 @@ goa_stabilize_expr (tree *expr_p, gimple_seq *pre_p, tree lhs_addr,
 	case TRUTH_XOR_EXPR:
 	  saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 1), pre_p,
 					 lhs_addr, lhs_var);
+	  /* XXX Really fallthru?  */
+	  gcc_fallthrough ();
 	case TRUTH_NOT_EXPR:
 	  saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 0), pre_p,
 					 lhs_addr, lhs_var);
@@ -10376,6 +10660,7 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
 	      break;
 	    }
 	  /* Fallthru.  */
+	  gcc_fallthrough ();
 
 	case ARRAY_REF:
 	case ARRAY_RANGE_REF:
@@ -10529,6 +10814,7 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
 	  if (*expr_p != save_expr)
 	    break;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 
 	case FIX_TRUNC_EXPR:
 	  /* unary_expr: ... | '(' cast ')' val | ...  */
@@ -11183,6 +11465,7 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
 	    }
 
 	  recalculate_side_effects (*expr_p);
+	  gcc_fallthrough ();
 
 	dont_recalculate:
 	  break;
diff --git gcc/gcc/godump.c gcc/gcc/godump.c
index e3448a1..a63743e 100644
--- gcc/gcc/godump.c
+++ gcc/gcc/godump.c
@@ -224,6 +224,7 @@ go_define (unsigned int lineno, const char *buffer)
 	  if (!ISDIGIT (p[1]))
 	    goto unknown;
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 	case '0': case '1': case '2': case '3': case '4':
 	case '5': case '6': case '7': case '8': case '9':
 	  {
@@ -893,6 +894,7 @@ go_format_type (struct godump_container *container, tree type,
     case UNION_TYPE:
       is_union = true;
       /* Fall through to RECORD_TYPE case.  */
+      gcc_fallthrough ();
     case RECORD_TYPE:
       {
 	unsigned int prev_field_end;
diff --git gcc/gcc/graphite-isl-ast-to-gimple.c gcc/gcc/graphite-isl-ast-to-gimple.c
index fb9c846..48353d3 100644
--- gcc/gcc/graphite-isl-ast-to-gimple.c
+++ gcc/gcc/graphite-isl-ast-to-gimple.c
@@ -1485,6 +1485,7 @@ substitute_ssa_name (tree exp, tree f, tree r)
 	  return r;
 
 	/* Fall through...  */
+	gcc_fallthrough ();
 
       case tcc_exceptional:
       case tcc_unary:
diff --git gcc/gcc/haifa-sched.c gcc/gcc/haifa-sched.c
index 1f1e763..f713ecb 100644
--- gcc/gcc/haifa-sched.c
+++ gcc/gcc/haifa-sched.c
@@ -4246,6 +4246,7 @@ remove_notes (rtx_insn *head, rtx_insn *tail)
 	      break;
 	    }
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 
 	default:
 	  remove_insn (insn);
diff --git gcc/gcc/hsa-gen.c gcc/gcc/hsa-gen.c
index cf7d434..5395d93 100644
--- gcc/gcc/hsa-gen.c
+++ gcc/gcc/hsa-gen.c
@@ -4520,6 +4520,7 @@ get_address_from_value (tree val, hsa_bb *hbb)
       if (tree_fits_shwi_p (val))
 	return new hsa_op_address (NULL, NULL, tree_to_shwi (val));
       /* Otherwise fall-through */
+      gcc_fallthrough ();
 
     default:
       HSA_SORRY_ATV (EXPR_LOCATION (val),
@@ -5039,6 +5040,7 @@ gen_hsa_insn_for_internal_fn_call (gcall *stmt, hsa_bb *hbb)
     case IFN_FMIN:
     case IFN_FMAX:
       gen_hsa_insns_for_call_of_internal_fn (stmt, hbb);
+      gcc_fallthrough ();
 
     default:
       HSA_SORRY_ATV (gimple_location (stmt),
diff --git gcc/gcc/internal-fn.c gcc/gcc/internal-fn.c
index 49f3495..7e51255 100644
--- gcc/gcc/internal-fn.c
+++ gcc/gcc/internal-fn.c
@@ -1834,6 +1834,7 @@ expand_arith_overflow (enum tree_code code, gimple *stmt)
 	      if (integer_zerop (arg0) && !unsr_p)
 		expand_neg_overflow (loc, lhs, arg1, false);
 	      /* FALLTHRU */
+	      gcc_fallthrough ();
 	    case PLUS_EXPR:
 	      expand_addsub_overflow (loc, code, lhs, arg0, arg1,
 				      unsr_p, unsr_p, unsr_p, false);
diff --git gcc/gcc/ipa-icf.c gcc/gcc/ipa-icf.c
index 3c04b5a..3760d55 100644
--- gcc/gcc/ipa-icf.c
+++ gcc/gcc/ipa-icf.c
@@ -1644,6 +1644,7 @@ sem_function::hash_stmt (gimple *stmt, inchash::hash &hstate)
 	  break;
 	}
       /* ... fall through ... */
+      gcc_fallthrough ();
     case GIMPLE_CALL:
     case GIMPLE_ASM:
     case GIMPLE_COND:
@@ -1656,6 +1657,7 @@ sem_function::hash_stmt (gimple *stmt, inchash::hash &hstate)
 	  if (gimple_op (stmt, i))
 	    add_type (TREE_TYPE (gimple_op (stmt, i)), hstate);
 	}
+      gcc_fallthrough ();
     default:
       break;
     }
diff --git gcc/gcc/ira.c gcc/gcc/ira.c
index c66bb9e..9274504 100644
--- gcc/gcc/ira.c
+++ gcc/gcc/ira.c
@@ -1832,6 +1832,7 @@ ira_setup_alts (rtx_insn *insn, HARD_REG_SET &alts)
 		  case '#':
 		  case ',':
 		    c = '\0';
+		    gcc_fallthrough ();
 		  case '\0':
 		    len = 0;
 		    break;
@@ -3045,6 +3046,7 @@ equiv_init_varies_p (rtx x)
 	return 1;
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     default:
       break;
@@ -3110,6 +3112,7 @@ equiv_init_movable_p (rtx x, int regno)
 	return 0;
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     default:
       break;
diff --git gcc/gcc/jump.c gcc/gcc/jump.c
index 5b433af..a3d8bc7 100644
--- gcc/gcc/jump.c
+++ gcc/gcc/jump.c
@@ -1889,6 +1889,7 @@ rtx_renumbered_equal_p (const_rtx x, const_rtx y)
 	  if (XEXP (x, i) != XEXP (y, i))
 	    return 0;
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 	case '0':
 	  break;
 
diff --git gcc/gcc/lra-eliminations.c gcc/gcc/lra-eliminations.c
index 9ae5cfe..b21facf 100644
--- gcc/gcc/lra-eliminations.c
+++ gcc/gcc/lra-eliminations.c
@@ -485,6 +485,7 @@ lra_eliminate_regs_1 (rtx_insn *insn, rtx x, machine_mode mem_mode,
 	}
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case CALL:
     case COMPARE:
@@ -537,6 +538,7 @@ lra_eliminate_regs_1 (rtx_insn *insn, rtx x, machine_mode mem_mode,
 	}
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case INSN_LIST:
     case INT_LIST:
diff --git gcc/gcc/lto-streamer-in.c gcc/gcc/lto-streamer-in.c
index 00db94e..14b6916 100644
--- gcc/gcc/lto-streamer-in.c
+++ gcc/gcc/lto-streamer-in.c
@@ -1614,6 +1614,7 @@ lto_input_mode_table (struct lto_file_decl_data *file_data)
 		  break;
 		}
 	      /* FALLTHRU */
+	      gcc_fallthrough ();
 	    default:
 	      fatal_error (UNKNOWN_LOCATION, "unsupported mode %s\n", mname);
 	      break;
diff --git gcc/gcc/lto-streamer-out.c gcc/gcc/lto-streamer-out.c
index ed6f748..375264b 100644
--- gcc/gcc/lto-streamer-out.c
+++ gcc/gcc/lto-streamer-out.c
@@ -231,6 +231,7 @@ lto_output_tree_ref (struct output_block *ob, tree expr)
     case VAR_DECL:
     case DEBUG_EXPR_DECL:
       gcc_assert (decl_function_context (expr) == NULL || TREE_STATIC (expr));
+      gcc_fallthrough ();
     case PARM_DECL:
       streamer_write_record_start (ob, LTO_global_decl_ref);
       lto_output_var_decl_index (ob->decl_state, ob->main_stream, expr);
diff --git gcc/gcc/lto-wrapper.c gcc/gcc/lto-wrapper.c
index f240812..2c4aa11 100644
--- gcc/gcc/lto-wrapper.c
+++ gcc/gcc/lto-wrapper.c
@@ -234,6 +234,7 @@ merge_and_complain (struct cl_decoded_option **decoded_options,
 	    break;
 
 	  /* Fallthru.  */
+	  gcc_fallthrough ();
 	case OPT_fdiagnostics_show_caret:
 	case OPT_fdiagnostics_show_option:
 	case OPT_fdiagnostics_show_location_:
@@ -1077,6 +1078,7 @@ run_gcc (unsigned argc, char *argv[])
 		parallel = 0;
 	    }
 	  /* Fallthru.  */
+	  gcc_fallthrough ();
 
 	case OPT_flto:
 	  lto_mode = LTO_MODE_WHOPR;
diff --git gcc/gcc/mode-switching.c gcc/gcc/mode-switching.c
index 121b970..e46f2f2 100644
--- gcc/gcc/mode-switching.c
+++ gcc/gcc/mode-switching.c
@@ -303,6 +303,7 @@ create_pre_exit (int n_entities, int *entity_map, const int *num_modes)
 			  break;
 
 			/* Fall through.  */
+			gcc_fallthrough ();
 
 		      case ASM_INPUT:
 		      case UNSPEC_VOLATILE:
diff --git gcc/gcc/omp-low.c gcc/gcc/omp-low.c
index b89978f..386c453 100644
--- gcc/gcc/omp-low.c
+++ gcc/gcc/omp-low.c
@@ -1945,10 +1945,12 @@ scan_sharing_clauses (tree clauses, omp_context *ctx,
 	  if (OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE (c))
 	    break;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 
 	case OMP_CLAUSE_FIRSTPRIVATE:
 	case OMP_CLAUSE_LINEAR:
 	  decl = OMP_CLAUSE_DECL (c);
+	  gcc_fallthrough ();
 	do_private:
 	  if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
 	       || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_IS_DEVICE_PTR)
@@ -2218,6 +2220,7 @@ scan_sharing_clauses (tree clauses, omp_context *ctx,
 	  if (OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE (c))
 	    break;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 
 	case OMP_CLAUSE_FIRSTPRIVATE:
 	case OMP_CLAUSE_PRIVATE:
@@ -3360,6 +3363,7 @@ check_omp_nesting_restrictions (gimple *stmt, omp_context *ctx)
 	    }
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
     case GIMPLE_CALL:
       if (is_gimple_call (stmt)
 	  && (DECL_FUNCTION_CODE (gimple_call_fndecl (stmt))
@@ -3466,6 +3470,7 @@ check_omp_nesting_restrictions (gimple *stmt, omp_context *ctx)
 			      != GF_OMP_TARGET_KIND_REGION)
 			    continue;
 			  /* FALLTHRU */
+			  gcc_fallthrough ();
 			case GIMPLE_OMP_PARALLEL:
 			case GIMPLE_OMP_TEAMS:
 			  error_at (gimple_location (stmt),
@@ -3495,6 +3500,7 @@ check_omp_nesting_restrictions (gimple *stmt, omp_context *ctx)
 	    }
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
     case GIMPLE_OMP_SECTIONS:
     case GIMPLE_OMP_SINGLE:
       for (; ctx != NULL; ctx = ctx->outer)
@@ -3505,6 +3511,7 @@ check_omp_nesting_restrictions (gimple *stmt, omp_context *ctx)
 		&& gimple_omp_for_kind (ctx->stmt) != GF_OMP_FOR_KIND_TASKLOOP)
 	      break;
 	    /* FALLTHRU */
+	    gcc_fallthrough ();
 	  case GIMPLE_OMP_SECTIONS:
 	  case GIMPLE_OMP_SINGLE:
 	  case GIMPLE_OMP_ORDERED:
@@ -3549,6 +3556,7 @@ check_omp_nesting_restrictions (gimple *stmt, omp_context *ctx)
 		&& gimple_omp_for_kind (ctx->stmt) != GF_OMP_FOR_KIND_TASKLOOP)
 	      break;
 	    /* FALLTHRU */
+	    gcc_fallthrough ();
 	  case GIMPLE_OMP_SECTIONS:
 	  case GIMPLE_OMP_SINGLE:
 	  case GIMPLE_OMP_TASK:
@@ -3671,6 +3679,7 @@ check_omp_nesting_restrictions (gimple *stmt, omp_context *ctx)
 		!= GF_OMP_TARGET_KIND_REGION)
 	      break;
 	    /* FALLTHRU */
+	    gcc_fallthrough ();
 	  case GIMPLE_OMP_PARALLEL:
 	  case GIMPLE_OMP_TEAMS:
 	    error_at (gimple_location (stmt),
@@ -4388,6 +4397,7 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
 	  if (OMP_CLAUSE_LINEAR_ARRAY (c))
 	    max_vf = 1;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case OMP_CLAUSE_PRIVATE:
 	case OMP_CLAUSE_FIRSTPRIVATE:
 	case OMP_CLAUSE_LASTPRIVATE:
@@ -4432,6 +4442,7 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
 			      || is_global_var (OMP_CLAUSE_DECL (c)));
 		  continue;
 		}
+	      gcc_fallthrough ();
 	    case OMP_CLAUSE_FIRSTPRIVATE:
 	    case OMP_CLAUSE_COPYIN:
 	      break;
@@ -4930,6 +4941,7 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
 	      if (OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE (c))
 		break;
 	      /* FALLTHRU */
+	      gcc_fallthrough ();
 
 	    case OMP_CLAUSE_PRIVATE:
 	      if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_PRIVATE)
@@ -4943,6 +4955,8 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
 		}
 	      else
 		x = NULL;
+	      /* XXX Really fallthru?  */
+	      gcc_fallthrough ();
 	    do_private:
 	      tree nx;
 	      nx = lang_hooks.decls.omp_clause_default_ctor
@@ -4978,6 +4992,7 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
 	      if (nx)
 		gimplify_and_add (nx, ilist);
 	      /* FALLTHRU */
+	      gcc_fallthrough ();
 
 	    do_dtor:
 	      x = lang_hooks.decls.omp_clause_dtor (c, new_var);
@@ -5015,6 +5030,8 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
 		      goto do_dtor;
 		    }
 		}
+	      /* XXX Really fallthru?  */
+	      gcc_fallthrough ();
 	    do_firstprivate:
 	      x = build_outer_var_ref (var, ctx);
 	      if (is_simd)
@@ -6535,6 +6552,7 @@ expand_parallel_call (struct omp_region *region, basic_block bb,
 		  break;
 		}
 	      /* FALLTHRU */
+	      gcc_fallthrough ();
 	    default:
 	      start_ix2 = region->inner->sched_kind;
 	      break;
@@ -11602,6 +11620,7 @@ expand_omp_for (struct omp_region *region, gimple *inner_stmt)
 	      break;
 	    }
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	default:
 	  fn_index = fd.sched_kind;
 	  break;
@@ -13246,6 +13265,7 @@ expand_omp_target (struct omp_region *region)
     case GF_OMP_TARGET_KIND_OACC_KERNELS:
       oacc_kernels_p = true;
       /* FALLTHROUGH */
+      gcc_fallthrough ();
     case GF_OMP_TARGET_KIND_OACC_PARALLEL:
       start_ix = BUILT_IN_GOACC_PARALLEL;
       break;
@@ -13406,6 +13426,7 @@ expand_omp_target (struct omp_region *region)
 	tagging = true;
       }
       /* FALLTHRU */
+      gcc_fallthrough ();
     case BUILT_IN_GOACC_ENTER_EXIT_DATA:
     case BUILT_IN_GOACC_UPDATE:
       {
@@ -13830,6 +13851,7 @@ expand_omp (struct omp_region *region)
 	      }
 	  }
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case GIMPLE_OMP_MASTER:
 	case GIMPLE_OMP_TASKGROUP:
 	case GIMPLE_OMP_CRITICAL:
@@ -16208,6 +16230,7 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
 		      break;
 		    case GOMP_MAP_DELETE:
 		      tkind_zero = GOMP_MAP_DELETE_ZERO_LEN_ARRAY_SECTION;
+		      gcc_fallthrough ();
 		    default:
 		      break;
 		    }
@@ -17076,6 +17099,7 @@ lower_omp_1 (gimple_stmt_iterator *gsi_p, omp_context *ctx)
 	    if (ctx == NULL)
 	      break;
 	    /* FALLTHRU */
+	    gcc_fallthrough ();
 	  case BUILT_IN_GOMP_CANCEL:
 	  case BUILT_IN_GOMP_CANCELLATION_POINT:
 	    omp_context *cctx;
@@ -17117,6 +17141,7 @@ lower_omp_1 (gimple_stmt_iterator *gsi_p, omp_context *ctx)
 	    break;
 	  }
       /* FALLTHRU */
+      gcc_fallthrough ();
     default:
       if ((ctx || task_shared_vars)
 	  && walk_gimple_op (stmt, lower_omp_regimplify_p,
diff --git gcc/gcc/optabs.c gcc/gcc/optabs.c
index 2bd81db..7af4236 100644
--- gcc/gcc/optabs.c
+++ gcc/gcc/optabs.c
@@ -147,6 +147,7 @@ add_equal_note (rtx_insn *insns, rtx target, enum rtx_code code, rtx op0, rtx op
 	    break;
 	  }
 	/* FALLTHRU */
+	gcc_fallthrough ();
       default:
 	note = gen_rtx_fmt_e (code, GET_MODE (target), copy_rtx (op0));
 	break;
diff --git gcc/gcc/opts.c gcc/gcc/opts.c
index f09c520..7143f91 100644
--- gcc/gcc/opts.c
+++ gcc/gcc/opts.c
@@ -1979,6 +1979,7 @@ common_handle_option (struct gcc_options *opts,
       opts->x_flag_profile_use = true;
       value = true;
       /* No break here - do -fprofile-use processing. */
+      gcc_fallthrough ();
     case OPT_fprofile_use:
       enable_fdo_optimizations (opts, opts_set, value);
       if (!opts_set->x_flag_profile_reorder_functions)
@@ -1995,6 +1996,7 @@ common_handle_option (struct gcc_options *opts,
       opts->x_flag_auto_profile = true;
       value = true;
       /* No break here - do -fauto-profile processing. */
+      gcc_fallthrough ();
     case OPT_fauto_profile:
       enable_fdo_optimizations (opts, opts_set, value);
       if (!opts_set->x_flag_profile_correction)
@@ -2008,6 +2010,7 @@ common_handle_option (struct gcc_options *opts,
       opts->x_profile_data_prefix = xstrdup (arg);
       value = true;
       /* No break here - do -fprofile-generate processing. */
+      gcc_fallthrough ();
     case OPT_fprofile_generate:
       if (!opts_set->x_profile_arc_flag)
 	opts->x_profile_arc_flag = value;
@@ -2118,6 +2121,7 @@ common_handle_option (struct gcc_options *opts,
         value = opts->x_dwarf_version;
       
       /* FALLTHRU */
+      gcc_fallthrough ();
     case OPT_gdwarf_:
       if (value < 2 || value > 5)
 	error_at (loc, "dwarf version %d is not supported", value);
diff --git gcc/gcc/plugin.c gcc/gcc/plugin.c
index 60081a5..bc92b96 100644
--- gcc/gcc/plugin.c
+++ gcc/gcc/plugin.c
@@ -427,6 +427,7 @@ register_callback (const char *plugin_name,
 	    return;
 	  }
       /* Fall through.  */
+      gcc_fallthrough ();
       case PLUGIN_START_PARSE_FUNCTION:
       case PLUGIN_FINISH_PARSE_FUNCTION:
       case PLUGIN_FINISH_TYPE:
@@ -506,7 +507,8 @@ invoke_plugin_callbacks_full (int event, void *gcc_data)
       default:
 	gcc_assert (event >= PLUGIN_EVENT_FIRST_DYNAMIC);
 	gcc_assert (event < event_last);
-      /* Fall through.  */
+	/* Fall through.  */
+	gcc_fallthrough ();
       case PLUGIN_START_PARSE_FUNCTION:
       case PLUGIN_FINISH_PARSE_FUNCTION:
       case PLUGIN_FINISH_TYPE:
diff --git gcc/gcc/postreload.c gcc/gcc/postreload.c
index 61c1ce8..b6269da 100644
--- gcc/gcc/postreload.c
+++ gcc/gcc/postreload.c
@@ -1525,6 +1525,7 @@ reload_combine_note_use (rtx *xp, rtx_insn *insn, int ruid, rtx containing_mem)
       offset = XEXP (x, 1);
       x = XEXP (x, 0);
       /* Fall through.  */
+      gcc_fallthrough ();
     case REG:
       {
 	int regno = REGNO (x);
diff --git gcc/gcc/pretty-print.c gcc/gcc/pretty-print.c
index 325263e..f09bdae 100644
--- gcc/gcc/pretty-print.c
+++ gcc/gcc/pretty-print.c
@@ -187,6 +187,7 @@ pp_write_text_as_dot_label_to_stream (pretty_printer *pp, bool for_record)
 	     backslash as last char in label.  Let's avoid triggering it.  */
 	  gcc_assert (*(p + 1) != '\0');
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 	case '"':
 	  escape_char = true;
 	  break;
@@ -372,6 +373,7 @@ pp_format (pretty_printer *pp, text_info *text)
 	    obstack_grow (&buffer->chunk_obstack, colorstr, strlen (colorstr));
 	  }
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case '\'':
 	  obstack_grow (&buffer->chunk_obstack,
 			close_quote, strlen (close_quote));
@@ -788,6 +790,7 @@ pp_emit_prefix (pretty_printer *pp)
 	    }
 	  pp_indentation (pp) += 3;
 	  /* Fall through.  */
+	  gcc_fallthrough ();
 
 	case DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE:
 	  {
diff --git gcc/gcc/print-rtl.c gcc/gcc/print-rtl.c
index a905127..b9d7cf4 100644
--- gcc/gcc/print-rtl.c
+++ gcc/gcc/print-rtl.c
@@ -217,6 +217,7 @@ print_rtx (const_rtx in_rtx)
       case 'S':
       case 's':
 	str = XSTR (in_rtx, i);
+	gcc_fallthrough ();
       string:
 
 	if (str == 0)
diff --git gcc/gcc/read-rtl.c gcc/gcc/read-rtl.c
index dc3a336..800f31d 100644
--- gcc/gcc/read-rtl.c
+++ gcc/gcc/read-rtl.c
@@ -1163,6 +1163,7 @@ read_rtx_code (const char *code_name)
 	    break;
 	  }
 	/* Now process the vector.  */
+	gcc_fallthrough ();
 
       case 'E':
 	{
diff --git gcc/gcc/real.c gcc/gcc/real.c
index fbebbf0..39900e5 100644
--- gcc/gcc/real.c
+++ gcc/gcc/real.c
@@ -928,6 +928,7 @@ do_compare (const REAL_VALUE_TYPE *a, const REAL_VALUE_TYPE *b,
       if (a->decimal)
 	return decimal_do_compare (a, b, nan_result);
       /* Fall through.  */
+      gcc_fallthrough ();
     case CLASS2 (rvc_inf, rvc_zero):
     case CLASS2 (rvc_inf, rvc_normal):
       return (a->sign ? -1 : 1);
@@ -940,6 +941,7 @@ do_compare (const REAL_VALUE_TYPE *a, const REAL_VALUE_TYPE *b,
       if (b->decimal)
 	return decimal_do_compare (a, b, nan_result);
       /* Fall through.  */
+      gcc_fallthrough ();
     case CLASS2 (rvc_zero, rvc_inf):
     case CLASS2 (rvc_normal, rvc_inf):
       return (b->sign ? 1 : -1);
@@ -2667,6 +2669,7 @@ round_for_format (const struct real_format *fmt, REAL_VALUE_TYPE *r)
     {
     underflow:
       get_zero (r, r->sign);
+      gcc_fallthrough ();
     case rvc_zero:
       if (!fmt->has_signed_zero)
 	r->sign = 0;
@@ -2674,6 +2677,7 @@ round_for_format (const struct real_format *fmt, REAL_VALUE_TYPE *r)
 
     overflow:
       get_inf (r, r->sign);
+      gcc_fallthrough ();
     case rvc_inf:
       return;
 
diff --git gcc/gcc/recog.c gcc/gcc/recog.c
index 80d1779..f400a6e 100644
--- gcc/gcc/recog.c
+++ gcc/gcc/recog.c
@@ -1792,6 +1792,7 @@ asm_operand_ok (rtx op, const char *constraint, const char **constraints)
 
 	     Match any memory and hope things are resolved after reload.  */
 	  incdec_ok = true;
+	  gcc_fallthrough ();
 	default:
 	  cn = lookup_constraint (constraint);
 	  switch (get_constraint_type (cn))
diff --git gcc/gcc/reg-stack.c gcc/gcc/reg-stack.c
index c931349..547e8dd 100644
--- gcc/gcc/reg-stack.c
+++ gcc/gcc/reg-stack.c
@@ -424,6 +424,8 @@ get_true_reg (rtx *pat)
 	      return pat;
 	    }
 	}
+	/* XXX Really fallthru?  */
+	gcc_fallthrough ();
       case FLOAT:
       case FIX:
       case FLOAT_EXTEND:
@@ -1490,6 +1492,7 @@ subst_stack_regs_pat (rtx_insn *insn, stack_ptr regstack, rtx pat)
 	    src1 = src;
 
 	    /* Fall through.  */
+	    gcc_fallthrough ();
 
 	  case FLOAT_TRUNCATE:
 	  case SQRT:
@@ -1751,6 +1754,7 @@ subst_stack_regs_pat (rtx_insn *insn, stack_ptr regstack, rtx pat)
 
 		regstack->top++;
 		/* FALLTHRU */
+		gcc_fallthrough ();
 
 	      case UNSPEC_TAN:
 
@@ -1880,6 +1884,7 @@ subst_stack_regs_pat (rtx_insn *insn, stack_ptr regstack, rtx pat)
 		gcc_assert (GET_CODE (pat_src) == UNSPEC);
 		gcc_assert (XINT (pat_src, 1) == UNSPEC_FNSTSW);
 		/* Fall through.  */
+		gcc_fallthrough ();
 
 	      case UNSPEC_FNSTSW:
 		/* Combined fcomp+fnstsw generated for doing well with
diff --git gcc/gcc/reginfo.c gcc/gcc/reginfo.c
index f4dac08..90e47fd 100644
--- gcc/gcc/reginfo.c
+++ gcc/gcc/reginfo.c
@@ -1150,6 +1150,7 @@ reg_scan_mark_refs (rtx x, rtx_insn *insn)
 	set_reg_attrs_from_value (dest, SET_SRC (x));
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     default:
       {
diff --git gcc/gcc/reload1.c gcc/gcc/reload1.c
index 5622e89..f657b25 100644
--- gcc/gcc/reload1.c
+++ gcc/gcc/reload1.c
@@ -2331,6 +2331,7 @@ set_label_offsets (rtx x, rtx_insn *insn, int initial_p)
       x = LABEL_REF_LABEL (x);
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case CODE_LABEL:
       /* If we know nothing about this label, set the desired offsets.  Note
@@ -2378,6 +2379,7 @@ set_label_offsets (rtx x, rtx_insn *insn, int initial_p)
       set_label_offsets (PATTERN (insn), insn, initial_p);
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case INSN:
     case CALL_INSN:
@@ -2693,6 +2695,7 @@ eliminate_regs_1 (rtx x, machine_mode mem_mode, rtx insn,
 	    }
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case CALL:
     case COMPARE:
@@ -2740,6 +2743,7 @@ eliminate_regs_1 (rtx x, machine_mode mem_mode, rtx insn,
 	}
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case INSN_LIST:
     case INT_LIST:
@@ -3032,6 +3036,7 @@ elimination_effects (rtx x, machine_mode mem_mode)
 	break;
 
       /* Fall through to generic unary operation case.  */
+      gcc_fallthrough ();
     case STRICT_LOW_PART:
     case NEG:          case NOT:
     case SIGN_EXTEND:  case ZERO_EXTEND:
@@ -5502,6 +5507,7 @@ reload_reg_reaches_end_p (unsigned int regno, int reloadnum)
       opnum = reload_n_operands;
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case RELOAD_FOR_OUTPUT:
     case RELOAD_FOR_OUTPUT_ADDRESS:
@@ -6846,6 +6852,7 @@ choose_reload_regs (struct insn_chain *chain)
 			if (! rld[r].optional)
 			  reload_override_in[r] = equiv;
 			/* Fall through.  */
+			gcc_fallthrough ();
 		      default:
 			equiv = 0;
 			break;
@@ -6864,6 +6871,7 @@ choose_reload_regs (struct insn_chain *chain)
 			if (! rld[r].optional)
 			  reload_override_in[r] = equiv;
 			/* Fall through.  */
+			gcc_fallthrough ();
 		      default:
 			equiv = 0;
 			break;
diff --git gcc/gcc/resource.c gcc/gcc/resource.c
index ae2f5d8..512742f 100644
--- gcc/gcc/resource.c
+++ gcc/gcc/resource.c
@@ -364,6 +364,7 @@ mark_referenced_resources (rtx x, struct resources *res,
 	}
 
       /* ... fall through to other INSN processing ...  */
+      gcc_fallthrough ();
 
     case INSN:
     case JUMP_INSN:
@@ -478,6 +479,7 @@ find_dead_or_set_registers (rtx_insn *target, struct resources *res,
 		    break;
 		}
 	    }
+	  gcc_fallthrough ();
 
 	default:
 	  break;
@@ -674,6 +676,7 @@ mark_set_resources (rtx x, struct resources *res, int in_dest,
 	}
 
       /* ... and also what its RTL says it modifies, if anything.  */
+      gcc_fallthrough ();
 
     case JUMP_INSN:
     case INSN:
diff --git gcc/gcc/rtlanal.c gcc/gcc/rtlanal.c
index 8e4762c..8fdb2c0 100644
--- gcc/gcc/rtlanal.c
+++ gcc/gcc/rtlanal.c
@@ -233,6 +233,7 @@ rtx_unstable_p (const_rtx x)
 	return 1;
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     default:
       break;
@@ -315,6 +316,7 @@ rtx_varies_p (const_rtx x, bool for_alias)
 	return 1;
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     default:
       break;
@@ -1765,6 +1767,7 @@ reg_overlap_mentioned_p (const_rtx x, const_rtx in)
     case REG:
       regno = REGNO (x);
       endregno = END_REGNO (x);
+      gcc_fallthrough ();
     do_reg:
       return refers_to_regno_p (regno, endregno, in, (rtx*) 0);
 
@@ -2516,6 +2519,7 @@ volatile_insn_p (const_rtx x)
     case ASM_OPERANDS:
       if (MEM_VOLATILE_P (x))
 	return 1;
+      gcc_fallthrough ();
 
     default:
       break;
@@ -2576,6 +2580,7 @@ volatile_refs_p (const_rtx x)
     case ASM_OPERANDS:
       if (MEM_VOLATILE_P (x))
 	return 1;
+      gcc_fallthrough ();
 
     default:
       break;
@@ -2649,6 +2654,7 @@ side_effects_p (const_rtx x)
     case ASM_OPERANDS:
       if (MEM_VOLATILE_P (x))
 	return 1;
+      gcc_fallthrough ();
 
     default:
       break;
@@ -3421,6 +3427,7 @@ commutative_operand_precedence (rtx op)
       /* Then prefer NEG and NOT.  */
       if (code == NEG || code == NOT)
         return 1;
+      gcc_fallthrough ();
 
     default:
       return 0;
@@ -3453,6 +3460,7 @@ auto_inc_p (const_rtx x)
       /* There are no REG_INC notes for SP.  */
       if (XEXP (x, 0) != stack_pointer_rtx)
 	return 1;
+      gcc_fallthrough ();
     default:
       break;
     }
@@ -4096,6 +4104,7 @@ rtx_cost (rtx x, machine_mode mode, enum rtx_code outer_code,
       if (factor == 0)
 	factor = 1;
       /* Pass through.  */
+      gcc_fallthrough ();
     default:
       total = factor * COSTS_N_INSNS (1);
     }
diff --git gcc/gcc/sched-deps.c gcc/gcc/sched-deps.c
index 41a6af2..1f1d077 100644
--- gcc/gcc/sched-deps.c
+++ gcc/gcc/sched-deps.c
@@ -2744,6 +2744,7 @@ sched_analyze_2 (struct deps_desc *deps, rtx x, rtx_insn *insn)
     case UNSPEC_VOLATILE:
       flush_pending_lists (deps, insn, true, true);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case ASM_OPERANDS:
     case ASM_INPUT:
diff --git gcc/gcc/sched-ebb.c gcc/gcc/sched-ebb.c
index 89dd823..abb737e 100644
--- gcc/gcc/sched-ebb.c
+++ gcc/gcc/sched-ebb.c
@@ -416,6 +416,7 @@ add_deps_for_risky_insns (rtx_insn *head, rtx_insn *tail)
 		    }
 		}
 	      /* Fall through.  */
+	      gcc_fallthrough ();
 	    case TRAP_RISKY:
 	    case IRISKY:
 	    case PRISKY_CANDIDATE:
diff --git gcc/gcc/sched-rgn.c gcc/gcc/sched-rgn.c
index fa662ff..03c0e13 100644
--- gcc/gcc/sched-rgn.c
+++ gcc/gcc/sched-rgn.c
@@ -2052,6 +2052,7 @@ is_exception_free (rtx_insn *insn, int bb_src, int bb_trg)
       if (is_pfree (insn, bb_src, bb_trg))
 	return 1;
       /* Don't 'break' here: PFREE-candidate is also PRISKY-candidate.  */
+      gcc_fallthrough ();
     case PRISKY_CANDIDATE:
       if (!flag_schedule_speculative_load_dangerous
 	  || is_prisky (insn, bb_src, bb_trg))
diff --git gcc/gcc/simplify-rtx.c gcc/gcc/simplify-rtx.c
index a23a6f5..eeb4018 100644
--- gcc/gcc/simplify-rtx.c
+++ gcc/gcc/simplify-rtx.c
@@ -3263,6 +3263,7 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode,
 							- INTVAL (trueop1)));
 #endif
       /* FALLTHRU */
+      gcc_fallthrough ();
     case ASHIFTRT:
       if (trueop1 == CONST0_RTX (mode))
 	return op0;
@@ -3308,6 +3309,7 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode,
 				     tmp);
 	  return lowpart_subreg (mode, tmp, inner_mode);
 	}
+      gcc_fallthrough ();
     canonicalize_shift:
       if (SHIFT_COUNT_TRUNCATED && CONST_INT_P (op1))
 	{
@@ -6254,6 +6256,7 @@ simplify_rtx (const_rtx x)
 	return simplify_gen_binary (code, mode, XEXP (x, 1), XEXP (x, 0));
 
       /* Fall through....  */
+      gcc_fallthrough ();
 
     case RTX_BIN_ARITH:
       return simplify_binary_operation (code, mode, XEXP (x, 0), XEXP (x, 1));
diff --git gcc/gcc/stmt.c gcc/gcc/stmt.c
index 2e9072f..8202181 100644
--- gcc/gcc/stmt.c
+++ gcc/gcc/stmt.c
@@ -418,6 +418,7 @@ parse_input_constraint (const char **constraint_p, int input_num,
 	  j--;
 	}
 	/* Fall through.  */
+      gcc_fallthrough ();
 
       case 'g':  case 'X':
 	*allows_reg = true;
diff --git gcc/gcc/stor-layout.c gcc/gcc/stor-layout.c
index d66d769..8ffec99 100644
--- gcc/gcc/stor-layout.c
+++ gcc/gcc/stor-layout.c
@@ -399,6 +399,7 @@ int_mode_for_mode (machine_mode mode)
 	break;
 
       /* ... fall through ...  */
+      gcc_fallthrough ();
 
     case MODE_CC:
     default:
diff --git gcc/gcc/toplev.c gcc/gcc/toplev.c
index da80097..869ad9b 100644
--- gcc/gcc/toplev.c
+++ gcc/gcc/toplev.c
@@ -732,6 +732,7 @@ print_to_asm_out_file (print_switch_type type, const char * text)
       if (ASM_COMMENT_START[0] == 0)
 	prepend_sep = false;
       /* Drop through.  */
+      gcc_fallthrough ();
     case SWITCH_TYPE_PASSED:
     case SWITCH_TYPE_ENABLED:
       if (prepend_sep)
@@ -762,6 +763,7 @@ print_to_stderr (print_switch_type type, const char * text)
     case SWITCH_TYPE_ENABLED:
       fputc (' ', stderr);
       /* Drop through.  */
+      gcc_fallthrough ();
 
     case SWITCH_TYPE_DESCRIPTIVE:
       fputs (text, stderr);
diff --git gcc/gcc/trans-mem.c gcc/gcc/trans-mem.c
index 2a6e101..920f618 100644
--- gcc/gcc/trans-mem.c
+++ gcc/gcc/trans-mem.c
@@ -174,12 +174,14 @@ get_attrs_for (const_tree x)
       if (TREE_CODE (x) != POINTER_TYPE)
 	return NULL_TREE;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case POINTER_TYPE:
       x = TREE_TYPE (x);
       if (TREE_CODE (x) != FUNCTION_TYPE && TREE_CODE (x) != METHOD_TYPE)
 	return NULL_TREE;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case FUNCTION_TYPE:
     case METHOD_TYPE:
@@ -208,6 +210,7 @@ is_tm_pure (const_tree x)
       if (TREE_CODE (x) != POINTER_TYPE)
 	return false;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case POINTER_TYPE:
       x = TREE_TYPE (x);
@@ -1548,6 +1551,7 @@ requires_barrier (basic_block entry_block, tree x, gimple *stmt)
 	return false;
       gcc_assert (TREE_CODE (x) == VAR_DECL);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case PARM_DECL:
     case RESULT_DECL:
diff --git gcc/gcc/tree-cfg.c gcc/gcc/tree-cfg.c
index 0fac49c..7f75eb1 100644
--- gcc/gcc/tree-cfg.c
+++ gcc/gcc/tree-cfg.c
@@ -2995,6 +2995,7 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
       t = TREE_OPERAND (t, 0);
 
       /* Fall-through.  */
+      gcc_fallthrough ();
     case COMPONENT_REF:
     case ARRAY_REF:
     case ARRAY_RANGE_REF:
@@ -3064,6 +3065,7 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
 	  return t;
 	}
       /* FALLTHROUGH */
+      gcc_fallthrough ();
     case LT_EXPR:
     case LE_EXPR:
     case GT_EXPR:
@@ -4040,6 +4042,7 @@ verify_gimple_assign_ternary (gassign *stmt)
 	  return true;
 	}
       /* Fallthrough.  */
+      gcc_fallthrough ();
     case COND_EXPR:
       if (!useless_type_conversion_p (lhs_type, rhs2_type)
 	  || !useless_type_conversion_p (lhs_type, rhs3_type))
@@ -5413,6 +5416,7 @@ gimple_verify_flow_info (void)
 	  if (!gimple_call_builtin_p (stmt, BUILT_IN_RETURN))
 	    break;
 	  /* ... fallthru ... */
+	  gcc_fallthrough ();
 	case GIMPLE_RETURN:
 	  if (!single_succ_p (bb)
 	      || (single_succ_edge (bb)->flags
@@ -6698,6 +6702,7 @@ move_stmt_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p,
 	      r = move_stmt_eh_region_tree_nr (r, p);
 	      gimple_call_set_arg (stmt, 1, r);
 	      /* FALLTHRU */
+	      gcc_fallthrough ();
 
 	    case BUILT_IN_EH_POINTER:
 	    case BUILT_IN_EH_FILTER:
diff --git gcc/gcc/tree-chrec.c gcc/gcc/tree-chrec.c
index ee789a2..85959c1 100644
--- gcc/gcc/tree-chrec.c
+++ gcc/gcc/tree-chrec.c
@@ -287,6 +287,7 @@ chrec_fold_plus_1 (enum tree_code code, tree type,
 	CASE_CONVERT:
 	  if (tree_contains_chrecs (op1, NULL))
 	    return chrec_dont_know;
+	  gcc_fallthrough ();
 
 	default:
 	  if (code == PLUS_EXPR || code == POINTER_PLUS_EXPR)
@@ -304,6 +305,7 @@ chrec_fold_plus_1 (enum tree_code code, tree type,
     CASE_CONVERT:
       if (tree_contains_chrecs (op0, NULL))
 	return chrec_dont_know;
+      gcc_fallthrough ();
 
     default:
       switch (TREE_CODE (op1))
@@ -329,6 +331,7 @@ chrec_fold_plus_1 (enum tree_code code, tree type,
 	CASE_CONVERT:
 	  if (tree_contains_chrecs (op1, NULL))
 	    return chrec_dont_know;
+	  gcc_fallthrough ();
 
 	default:
 	  {
@@ -423,6 +426,7 @@ chrec_fold_multiply (tree type,
 	CASE_CONVERT:
 	  if (tree_contains_chrecs (op1, NULL))
 	    return chrec_dont_know;
+	  gcc_fallthrough ();
 
 	default:
 	  if (integer_onep (op1))
@@ -439,6 +443,7 @@ chrec_fold_multiply (tree type,
     CASE_CONVERT:
       if (tree_contains_chrecs (op0, NULL))
 	return chrec_dont_know;
+      gcc_fallthrough ();
 
     default:
       if (integer_onep (op0))
@@ -461,6 +466,7 @@ chrec_fold_multiply (tree type,
 	CASE_CONVERT:
 	  if (tree_contains_chrecs (op1, NULL))
 	    return chrec_dont_know;
+	  gcc_fallthrough ();
 
 	default:
 	  if (integer_onep (op1))
@@ -1026,6 +1032,7 @@ evolution_function_is_invariant_rec_p (tree chrec, int loopnum)
       if (!evolution_function_is_invariant_rec_p (TREE_OPERAND (chrec, 1),
 						  loopnum))
 	return false;
+      gcc_fallthrough ();
 
     case 1:
       if (!evolution_function_is_invariant_rec_p (TREE_OPERAND (chrec, 0),
@@ -1527,12 +1534,15 @@ for_each_scev_op (tree *scev, bool (*cbck) (tree *, void *), void *data)
     {
     case 3:
       for_each_scev_op (&TREE_OPERAND (*scev, 2), cbck, data);
+      gcc_fallthrough ();
 
     case 2:
       for_each_scev_op (&TREE_OPERAND (*scev, 1), cbck, data);
+      gcc_fallthrough ();
 
     case 1:
       for_each_scev_op (&TREE_OPERAND (*scev, 0), cbck, data);
+      gcc_fallthrough ();
 
     default:
       cbck (scev, data);
diff --git gcc/gcc/tree-complex.c gcc/gcc/tree-complex.c
index d7baf22..0c90f63 100644
--- gcc/gcc/tree-complex.c
+++ gcc/gcc/tree-complex.c
@@ -1336,6 +1336,8 @@ expand_complex_division (gimple_stmt_iterator *gsi, tree inner_type,
       rr = gimplify_build2 (gsi, code, inner_type, ai, bi);
       ri = gimplify_build2 (gsi, code, inner_type, ar, bi);
       ri = gimplify_build1 (gsi, NEGATE_EXPR, inner_type, ri);
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
 
     case PAIR (ONLY_REAL, VARYING):
     case PAIR (ONLY_IMAG, VARYING):
@@ -1354,6 +1356,7 @@ expand_complex_division (gimple_stmt_iterator *gsi, tree inner_type,
 	      break;
 	    }
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 
 	case 1:
 	  /* wide ranges of inputs must work for complex divide.  */
diff --git gcc/gcc/tree-data-ref.c gcc/gcc/tree-data-ref.c
index ed28ca1..5b0c4b2 100644
--- gcc/gcc/tree-data-ref.c
+++ gcc/gcc/tree-data-ref.c
@@ -591,6 +591,7 @@ split_constant_offset_1 (tree type, tree op0, enum tree_code code, tree op1,
     case POINTER_PLUS_EXPR:
       ocode = PLUS_EXPR;
       /* FALLTHROUGH */
+      gcc_fallthrough ();
     case PLUS_EXPR:
     case MINUS_EXPR:
       split_constant_offset (op0, &var0, &off0);
@@ -1685,6 +1686,7 @@ siv_subscript_p (const_tree chrec_a, const_tree chrec_b)
 	    case POLYNOMIAL_CHREC:
 	      if (CHREC_VARIABLE (chrec_a) != CHREC_VARIABLE (chrec_b))
 		return false;
+	      gcc_fallthrough ();
 
 	    default:
 	      return true;
@@ -3889,6 +3891,8 @@ get_references_in_stmt (gimple *stmt, vec<data_ref_loc, va_heap> *references)
 	    if (gimple_call_lhs (stmt) == NULL_TREE)
 	      break;
 	    ref.is_read = true;
+	    /* XXX Really fallthru?  */
+	    gcc_fallthrough ();
 	  case IFN_MASK_STORE:
 	    ptr = build_int_cst (TREE_TYPE (gimple_call_arg (stmt, 1)), 0);
 	    align = tree_to_shwi (gimple_call_arg (stmt, 1));
diff --git gcc/gcc/tree-dfa.c gcc/gcc/tree-dfa.c
index 9a3b072..9209aae 100644
--- gcc/gcc/tree-dfa.c
+++ gcc/gcc/tree-dfa.c
@@ -543,6 +543,7 @@ get_ref_base_and_extent (tree exp, HOST_WIDE_INT *poffset,
 	      goto done;
 	    }
 	  /* Fallthru.  */
+	  gcc_fallthrough ();
 	case MEM_REF:
 	  /* We need to deal with variable arrays ending structures such as
 	     struct { int length; int a[1]; } x;           x.a[d]
diff --git gcc/gcc/tree-dump.c gcc/gcc/tree-dump.c
index 05228a0..9aeb678 100644
--- gcc/gcc/tree-dump.c
+++ gcc/gcc/tree-dump.c
@@ -488,6 +488,7 @@ dequeue_and_dump (dump_info_p di)
     case METHOD_TYPE:
       dump_child ("clas", TYPE_METHOD_BASETYPE (t));
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case FUNCTION_TYPE:
       dump_child ("retn", TREE_TYPE (t));
@@ -519,6 +520,7 @@ dequeue_and_dump (dump_info_p di)
     case DEBUG_EXPR_DECL:
       dump_int (di, "-uid", DEBUG_TEMP_UID (t));
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case VAR_DECL:
     case PARM_DECL:
diff --git gcc/gcc/tree-eh.c gcc/gcc/tree-eh.c
index db72156..717ed1f 100644
--- gcc/gcc/tree-eh.c
+++ gcc/gcc/tree-eh.c
@@ -2011,11 +2011,13 @@ lower_eh_constructs_2 (struct leh_state *state, gimple_stmt_iterator *gsi)
 		 is accessible to abuse by users.  Just remove it and
 		 replace the use with the arbitrary value zero.  */
 	      rhs = build_int_cst (TREE_TYPE (TREE_TYPE (fndecl)), 0);
+	      gcc_fallthrough ();
 	    do_replace:
 	      lhs = gimple_call_lhs (stmt);
 	      x = gimple_build_assign (lhs, rhs);
 	      gsi_insert_before (gsi, x, GSI_SAME_STMT);
 	      /* FALLTHRU */
+	      gcc_fallthrough ();
 
 	    case BUILT_IN_EH_COPY_VALUES:
 	      /* Likewise this should not appear.  Remove it.  */
@@ -2027,6 +2029,7 @@ lower_eh_constructs_2 (struct leh_state *state, gimple_stmt_iterator *gsi)
 	    }
       }
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case GIMPLE_ASSIGN:
       /* If the stmt can throw use a new temporary for the assignment
diff --git gcc/gcc/tree-emutls.c gcc/gcc/tree-emutls.c
index 6cf49f9..cd3a86e 100644
--- gcc/gcc/tree-emutls.c
+++ gcc/gcc/tree-emutls.c
@@ -496,6 +496,7 @@ lower_emutls_1 (tree *ptr, int *walk_subtrees, void *cb_data)
       t = TREE_OPERAND (t, 0);
       is_addr = true;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case VAR_DECL:
       if (!DECL_THREAD_LOCAL_P (t))
@@ -507,6 +508,7 @@ lower_emutls_1 (tree *ptr, int *walk_subtrees, void *cb_data)
       if (EXPR_P (t))
         *walk_subtrees = 1;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case SSA_NAME:
       /* Special-case the return of SSA_NAME, since it's so common.  */
diff --git gcc/gcc/tree-inline.c gcc/gcc/tree-inline.c
index ef58866..c76deb0c 100644
--- gcc/gcc/tree-inline.c
+++ gcc/gcc/tree-inline.c
@@ -1665,6 +1665,7 @@ remap_gimple_stmt (gimple *stmt, copy_body_data *id)
 		    r = remap_eh_region_tree_nr (r, id);
 		    gimple_call_set_arg (copy, 1, r);
 		    /* FALLTHRU */
+		    gcc_fallthrough ();
 
 		  case BUILT_IN_EH_POINTER:
 		  case BUILT_IN_EH_FILTER:
diff --git gcc/gcc/tree-nested.c gcc/gcc/tree-nested.c
index 62cb01f..dc70b0b 100644
--- gcc/gcc/tree-nested.c
+++ gcc/gcc/tree-nested.c
@@ -899,6 +899,7 @@ convert_nonlocal_reference_op (tree *tp, int *walk_subtrees, void *data)
       if (TREE_STATIC (t) || DECL_EXTERNAL (t))
 	break;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case PARM_DECL:
       if (decl_function_context (t) != info->context)
@@ -1094,6 +1095,7 @@ convert_nonlocal_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
 	  if (OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause) == NULL)
 	    break;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case OMP_CLAUSE_FINAL:
 	case OMP_CLAUSE_IF:
 	case OMP_CLAUSE_NUM_THREADS:
@@ -1594,6 +1596,7 @@ convert_local_reference_op (tree *tp, int *walk_subtrees, void *data)
       if (TREE_STATIC (t) || DECL_EXTERNAL (t))
 	break;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case PARM_DECL:
       if (decl_function_context (t) == info->context)
@@ -1797,6 +1800,7 @@ convert_local_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
 	  if (OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (clause) == NULL)
 	    break;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case OMP_CLAUSE_FINAL:
 	case OMP_CLAUSE_IF:
 	case OMP_CLAUSE_NUM_THREADS:
@@ -2399,6 +2403,7 @@ convert_tramp_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
 	  return NULL_TREE;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
     case GIMPLE_OMP_PARALLEL:
     case GIMPLE_OMP_TASK:
       {
@@ -2567,8 +2572,9 @@ convert_gimple_call (gimple_stmt_iterator *gsi, bool *handled_ops_p,
 
     case GIMPLE_OMP_FOR:
       walk_body (convert_gimple_call, NULL, info,
-	  	 gimple_omp_for_pre_body_ptr (stmt));
+		 gimple_omp_for_pre_body_ptr (stmt));
       /* FALLTHRU */
+      gcc_fallthrough ();
     case GIMPLE_OMP_SECTIONS:
     case GIMPLE_OMP_SECTION:
     case GIMPLE_OMP_SINGLE:
diff --git gcc/gcc/tree-object-size.c gcc/gcc/tree-object-size.c
index 07455cc..b5b27c4 100644
--- gcc/gcc/tree-object-size.c
+++ gcc/gcc/tree-object-size.c
@@ -410,10 +410,12 @@ alloc_object_size (const gcall *call, int object_size_type)
       case BUILT_IN_CALLOC:
 	arg2 = 1;
 	/* fall through */
+	gcc_fallthrough ();
       case BUILT_IN_MALLOC:
       case BUILT_IN_ALLOCA:
       case BUILT_IN_ALLOCA_WITH_ALIGN:
 	arg1 = 0;
+	gcc_fallthrough ();
       default:
 	break;
       }
diff --git gcc/gcc/tree-pretty-print.c gcc/gcc/tree-pretty-print.c
index 734ecda..ae9beda 100644
--- gcc/gcc/tree-pretty-print.c
+++ gcc/gcc/tree-pretty-print.c
@@ -743,6 +743,7 @@ dump_omp_clause (pretty_printer *pp, tree clause, int spc, int flags)
       pp_colon (pp);
       dump_generic_node (pp, OMP_CLAUSE_DECL (clause),
 			 spc, flags, false);
+      gcc_fallthrough ();
      print_clause_size:
       if (OMP_CLAUSE_SIZE (clause))
 	{
@@ -2946,6 +2947,8 @@ dump_generic_node (pretty_printer *pp, tree node, int spc, int flags,
 
     dump_omp_loop:
       dump_omp_clauses (pp, OMP_FOR_CLAUSES (node), spc, flags);
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
 
     dump_omp_loop_cilk_for:
       if (!(flags & TDF_SLIM))
@@ -3763,6 +3766,7 @@ print_call_name (pretty_printer *pp, tree node, int flags)
 	  goto again;
 	}
       /* Fallthru.  */
+      gcc_fallthrough ();
     case COMPONENT_REF:
     case SSA_NAME:
     case OBJ_TYPE_REF:
diff --git gcc/gcc/tree-scalar-evolution.c gcc/gcc/tree-scalar-evolution.c
index e51f0aa..c8e975a 100644
--- gcc/gcc/tree-scalar-evolution.c
+++ gcc/gcc/tree-scalar-evolution.c
@@ -3592,6 +3592,7 @@ expression_expensive_p (tree expr)
 	return true;
 
       /* Fallthru.  */
+      gcc_fallthrough ();
     case tcc_unary:
       return expression_expensive_p (TREE_OPERAND (expr, 0));
 
diff --git gcc/gcc/tree-sra.c gcc/gcc/tree-sra.c
index 7c0e90d..71263f0 100644
--- gcc/gcc/tree-sra.c
+++ gcc/gcc/tree-sra.c
@@ -1188,6 +1188,7 @@ build_access_from_expr_1 (tree expr, gimple *stmt, bool write)
 	  && sra_mode != SRA_MODE_EARLY_IPA)
 	return NULL;
       /* fall through */
+      gcc_fallthrough ();
     case VAR_DECL:
     case PARM_DECL:
     case RESULT_DECL:
@@ -2157,6 +2158,7 @@ create_access_replacement (struct access *access)
 		&& TREE_CODE (TREE_OPERAND (d, 3)) != INTEGER_CST)
 	      fail = true;
 	    /* FALLTHRU */
+	    gcc_fallthrough ();
 	  case COMPONENT_REF:
 	    if (TREE_OPERAND (d, 2)
 		&& TREE_CODE (TREE_OPERAND (d, 2)) != INTEGER_CST)
diff --git gcc/gcc/tree-ssa-alias.c gcc/gcc/tree-ssa-alias.c
index 70c24b5..d3a76f7 100644
--- gcc/gcc/tree-ssa-alias.c
+++ gcc/gcc/tree-ssa-alias.c
@@ -1626,6 +1626,7 @@ ref_maybe_used_by_call_p_1 (gcall *call, ao_ref *ref)
 	      return true;
 	  }
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case BUILT_IN_STRCPY:
 	case BUILT_IN_STRNCPY:
 	case BUILT_IN_MEMCPY:
@@ -1656,6 +1657,7 @@ ref_maybe_used_by_call_p_1 (gcall *call, ao_ref *ref)
 	      return true;
 	  }
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case BUILT_IN_STRCPY_CHK:
 	case BUILT_IN_STRNCPY_CHK:
 	case BUILT_IN_MEMCPY_CHK:
diff --git gcc/gcc/tree-ssa-ccp.c gcc/gcc/tree-ssa-ccp.c
index ae120a8..8a71ff4 100644
--- gcc/gcc/tree-ssa-ccp.c
+++ gcc/gcc/tree-ssa-ccp.c
@@ -1458,6 +1458,7 @@ bit_value_binop_1 (enum tree_code code, tree type,
       swap_p = true;
       code = swap_tree_comparison (code);
       /* Fall through.  */
+      gcc_fallthrough ();
     case LT_EXPR:
     case LE_EXPR:
       {
@@ -3107,6 +3108,7 @@ pass_fold_builtins::execute (function *fun)
 		  if (result)
 		    break;
 		  /* FALLTHRU */
+		  gcc_fallthrough ();
 
 		default:;
 		}
diff --git gcc/gcc/tree-ssa-dce.c gcc/gcc/tree-ssa-dce.c
index 954fc67..c34aea3 100644
--- gcc/gcc/tree-ssa-dce.c
+++ gcc/gcc/tree-ssa-dce.c
@@ -269,6 +269,7 @@ mark_stmt_if_obviously_necessary (gimple *stmt, bool aggressive)
     case GIMPLE_COND:
       gcc_assert (EDGE_COUNT (gimple_bb (stmt)->succs) == 2);
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case GIMPLE_SWITCH:
       if (! aggressive)
diff --git gcc/gcc/tree-ssa-loop-ivopts.c gcc/gcc/tree-ssa-loop-ivopts.c
index 25b9780..690bb41 100644
--- gcc/gcc/tree-ssa-loop-ivopts.c
+++ gcc/gcc/tree-ssa-loop-ivopts.c
@@ -983,6 +983,7 @@ contains_abnormal_ssa_name_p (tree expr)
 	return true;
 
       /* Fallthru.  */
+      gcc_fallthrough ();
     case tcc_unary:
       if (contains_abnormal_ssa_name_p (TREE_OPERAND (expr, 0)))
 	return true;
@@ -1884,6 +1885,7 @@ find_deriving_biv_for_expr (struct ivopts_data *data, tree expr)
 	return iv;
 
       /* Fallthru.  */
+      gcc_fallthrough ();
     CASE_CONVERT:
       /* Casts are simple.  */
       return find_deriving_biv_for_expr (data, e1);
@@ -7100,6 +7102,7 @@ create_new_iv (struct ivopts_data *data, struct iv_cand *cand)
     case IP_AFTER_USE:
       after = true;
       /* fall through */
+      gcc_fallthrough ();
     case IP_BEFORE_USE:
       incr_pos = gsi_for_stmt (cand->incremented_at);
       break;
diff --git gcc/gcc/tree-ssa-loop-niter.c gcc/gcc/tree-ssa-loop-niter.c
index 0723752..871fbb0 100644
--- gcc/gcc/tree-ssa-loop-niter.c
+++ gcc/gcc/tree-ssa-loop-niter.c
@@ -80,6 +80,7 @@ split_to_var_and_offset (tree expr, tree *var, mpz_t offset)
     case MINUS_EXPR:
       negate = true;
       /* Fallthru.  */
+      gcc_fallthrough ();
 
     case PLUS_EXPR:
     case POINTER_PLUS_EXPR:
@@ -1911,6 +1912,7 @@ expand_simple_operations (tree expr, tree stop)
 	  && TYPE_OVERFLOW_TRAPS (TREE_TYPE (expr)))
 	return expr;
       /* Fallthru.  */
+      gcc_fallthrough ();
     case POINTER_PLUS_EXPR:
       /* And increments and decrements by a constant are simple.  */
       e1 = gimple_assign_rhs2 (stmt);
diff --git gcc/gcc/tree-ssa-math-opts.c gcc/gcc/tree-ssa-math-opts.c
index d31c12f..3fc8bd8 100644
--- gcc/gcc/tree-ssa-math-opts.c
+++ gcc/gcc/tree-ssa-math-opts.c
@@ -2872,6 +2872,7 @@ pass_optimize_bswap::execute (function *fun)
 		     % BITS_PER_UNIT)
 		continue;
 	      /* Fall through.  */
+	      gcc_fallthrough ();
 	    case BIT_IOR_EXPR:
 	      break;
 	    default:
diff --git gcc/gcc/tree-ssa-operands.c gcc/gcc/tree-ssa-operands.c
index eccea2f..6ccf097 100644
--- gcc/gcc/tree-ssa-operands.c
+++ gcc/gcc/tree-ssa-operands.c
@@ -827,6 +827,7 @@ get_expr_operands (struct function *fn, gimple *stmt, tree *expr_p, int flags)
 	  && TREE_THIS_VOLATILE (expr))
 	gimple_set_has_volatile_ops (stmt, true);
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case VIEW_CONVERT_EXPR:
     do_unary:
@@ -919,11 +920,13 @@ parse_ssa_operands (struct function *fn, gimple *stmt)
       /* Add call-clobbered operands, if needed.  */
       maybe_add_call_vops (fn, as_a <gcall *> (stmt));
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case GIMPLE_ASSIGN:
       get_expr_operands (fn, stmt, gimple_op_ptr (stmt, 0), opf_def);
       start = 1;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     default:
     do_default:
diff --git gcc/gcc/tree-ssa-pre.c gcc/gcc/tree-ssa-pre.c
index 3ce87d9..ed86333 100644
--- gcc/gcc/tree-ssa-pre.c
+++ gcc/gcc/tree-ssa-pre.c
@@ -1194,6 +1194,7 @@ fully_constant_expression (pre_expr e)
 		&& nary->opcode != VIEW_CONVERT_EXPR)
 	      return e;
 	    /* Fallthrough.  */
+	    gcc_fallthrough ();
 	  case tcc_unary:
 	    {
 	      /* We have to go from trees to pre exprs to value ids to
@@ -2503,6 +2504,7 @@ create_component_ref_by_pieces_1 (basic_block block, vn_reference_t ref,
 	  return currop->op0;
 	}
       /* Fallthrough.  */
+      gcc_fallthrough ();
     case REALPART_EXPR:
     case IMAGPART_EXPR:
     case VIEW_CONVERT_EXPR:
diff --git gcc/gcc/tree-ssa-propagate.c gcc/gcc/tree-ssa-propagate.c
index c4535a4..2405a76 100644
--- gcc/gcc/tree-ssa-propagate.c
+++ gcc/gcc/tree-ssa-propagate.c
@@ -641,6 +641,7 @@ valid_gimple_rhs_p (tree expr)
 	return false;
 
       /* Fallthru.  */
+      gcc_fallthrough ();
     case tcc_binary:
       if (!is_gimple_val (TREE_OPERAND (expr, 0))
 	  || !is_gimple_val (TREE_OPERAND (expr, 1)))
diff --git gcc/gcc/tree-ssa-reassoc.c gcc/gcc/tree-ssa-reassoc.c
index 9264e0b..32f5a5f 100644
--- gcc/gcc/tree-ssa-reassoc.c
+++ gcc/gcc/tree-ssa-reassoc.c
@@ -2086,9 +2086,11 @@ init_range_entry (struct range_entry *r, tree exp, gimple *stmt)
 	case GT_EXPR:
 	  is_bool = true;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	default:
 	  if (!is_bool)
 	    return;
+	  gcc_fallthrough ();
 	do_default:
 	  nexp = make_range_step (loc, code, arg0, arg1, exp_type,
 				  &low, &high, &in_p,
diff --git gcc/gcc/tree-ssa-sccvn.c gcc/gcc/tree-ssa-sccvn.c
index 0cbd2cd..02eff33 100644
--- gcc/gcc/tree-ssa-sccvn.c
+++ gcc/gcc/tree-ssa-sccvn.c
@@ -448,6 +448,7 @@ vn_get_stmt_kind (gimple *stmt)
 		  return VN_NARY;
 
 		/* Fallthrough.  */
+		gcc_fallthrough ();
 	      case tcc_declaration:
 		return VN_REFERENCE;
 
@@ -828,6 +829,7 @@ copy_reference_ops_from_ref (tree ref, vec<vn_reference_op_s> *result)
 	      break;
 	    }
 	  /* Fallthru.  */
+	  gcc_fallthrough ();
 	case PARM_DECL:
 	case CONST_DECL:
 	case RESULT_DECL:
@@ -960,6 +962,7 @@ ao_ref_init_from_vn_reference (ao_ref *ref,
 	      break;
 	    }
 	  /* Fallthru.  */
+	  gcc_fallthrough ();
 	case CALL_EXPR:
 	  return false;
 
diff --git gcc/gcc/tree-ssa-strlen.c gcc/gcc/tree-ssa-strlen.c
index 489c8f0..bffe1d8 100644
--- gcc/gcc/tree-ssa-strlen.c
+++ gcc/gcc/tree-ssa-strlen.c
@@ -500,6 +500,7 @@ get_string_length (strinfo *si)
 	  gimple_call_set_arg (stmt, 0, gimple_assign_lhs (lenstmt));
 	  lhs = NULL_TREE;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case BUILT_IN_STRCPY:
 	case BUILT_IN_STRCPY_CHK:
 	case BUILT_IN_STRCPY_CHKP:
@@ -527,6 +528,7 @@ get_string_length (strinfo *si)
 	      print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
 	    }
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case BUILT_IN_STPCPY:
 	case BUILT_IN_STPCPY_CHK:
 	case BUILT_IN_STPCPY_CHKP:
@@ -871,6 +873,7 @@ find_equal_ptrs (tree ptr, int idx)
 	  if (TREE_CODE (ptr) != ADDR_EXPR)
 	    return;
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 	case ADDR_EXPR:
 	  {
 	    int *pidx = addr_stridxptr (TREE_OPERAND (ptr, 0));
diff --git gcc/gcc/tree-tailcall.c gcc/gcc/tree-tailcall.c
index 0436f0f..dfdb990 100644
--- gcc/gcc/tree-tailcall.c
+++ gcc/gcc/tree-tailcall.c
@@ -300,6 +300,7 @@ process_assignment (gassign *stmt, gimple_stmt_iterator call, tree *m,
       op1 = gimple_assign_rhs2 (stmt);
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case GIMPLE_UNARY_RHS:
       op0 = gimple_assign_rhs1 (stmt);
diff --git gcc/gcc/tree-vect-patterns.c gcc/gcc/tree-vect-patterns.c
index f0c515d..7c56869 100644
--- gcc/gcc/tree-vect-patterns.c
+++ gcc/gcc/tree-vect-patterns.c
@@ -3111,10 +3111,12 @@ adjust_bool_pattern (tree var, tree out_type,
 	  goto and_ior_xor;
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
     case BIT_IOR_EXPR:
     case BIT_XOR_EXPR:
       irhs1 = *defs.get (rhs1);
       irhs2 = *defs.get (rhs2);
+      gcc_fallthrough ();
     and_ior_xor:
       if (TYPE_PRECISION (TREE_TYPE (irhs1))
 	  != TYPE_PRECISION (TREE_TYPE (irhs2)))
diff --git gcc/gcc/tree-vect-stmts.c gcc/gcc/tree-vect-stmts.c
index c41550d..6cfe26e 100644
--- gcc/gcc/tree-vect-stmts.c
+++ gcc/gcc/tree-vect-stmts.c
@@ -389,6 +389,7 @@ exist_non_indexing_operands_for_use_p (tree use, gimple *stmt)
 	    if (operand == use)
 	      return true;
 	    /* FALLTHRU */
+	    gcc_fallthrough ();
 	  case IFN_MASK_LOAD:
 	    operand = gimple_call_arg (stmt, 2);
 	    if (operand == use)
@@ -3792,6 +3793,7 @@ vectorizable_conversion (gimple *stmt, gimple_stmt_iterator *gsi,
 					 &decl1, &code1))
 	break;
       /* FALLTHRU */
+      gcc_fallthrough ();
     unsupported:
       if (dump_enabled_p ())
 	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
diff --git gcc/gcc/tree.c gcc/gcc/tree.c
index 2295111..e99f17f 100644
--- gcc/gcc/tree.c
+++ gcc/gcc/tree.c
@@ -1443,6 +1443,7 @@ wide_int_to_tree (tree type, const wide_int_ref &pcst)
 	case NULLPTR_TYPE:
 	  gcc_assert (hwi == 0);
 	  /* Fallthru.  */
+	  gcc_fallthrough ();
 
 	case POINTER_TYPE:
 	case REFERENCE_TYPE:
@@ -1566,6 +1567,7 @@ cache_integer_cst (tree t)
     case NULLPTR_TYPE:
       gcc_assert (integer_zerop (t));
       /* Fallthru.  */
+      gcc_fallthrough ();
 
     case POINTER_TYPE:
     case REFERENCE_TYPE:
@@ -3728,6 +3730,7 @@ find_placeholder_in_expr (tree exp, vec<tree> *refs)
 	  }
 
         /* Fall through...  */
+	gcc_fallthrough ();
 
       case tcc_exceptional:
       case tcc_unary:
@@ -3817,6 +3820,7 @@ substitute_in_expr (tree exp, tree f, tree r)
 	  return r;
 
         /* Fall through...  */
+	gcc_fallthrough ();
 
       case tcc_exceptional:
       case tcc_unary:
@@ -4924,6 +4928,7 @@ omp_declare_simd_clauses_equal (tree clauses1, tree clauses2)
 	  if (simple_cst_equal (OMP_CLAUSE_SIMDLEN_EXPR (cl1),
 				OMP_CLAUSE_SIMDLEN_EXPR (cl2)) != 1)
 	    return false;
+	  gcc_fallthrough ();
 	default:
 	  break;
 	}
@@ -7037,6 +7042,7 @@ type_cache_hasher::equal (type_hash *a, type_hash *b)
 	return 0;
 
       /* ... fall through ... */
+      gcc_fallthrough ();
 
     case INTEGER_TYPE:
     case REAL_TYPE:
@@ -7873,6 +7879,7 @@ add_expr (const_tree t, inchash::hash &hstate, unsigned int flags)
 	  code = TREE_CODE (t);
 	}
       /* FALL THROUGH */
+      gcc_fallthrough ();
     default:
       tclass = TREE_CODE_CLASS (code);
 
@@ -11574,6 +11581,7 @@ walk_type_fields (tree type, walk_tree_fn func, void *data,
 	}
 
       /* ... fall through ... */
+      gcc_fallthrough ();
 
     case COMPLEX_TYPE:
       WALK_SUBTREE (TREE_TYPE (type));
@@ -11583,6 +11591,7 @@ walk_type_fields (tree type, walk_tree_fn func, void *data,
       WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
 
       /* Fall through.  */
+      gcc_fallthrough ();
 
     case FUNCTION_TYPE:
       WALK_SUBTREE (TREE_TYPE (type));
@@ -11768,6 +11777,7 @@ walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
 	case OMP_CLAUSE__GRIDDIM_:
 	  WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 
 	case OMP_CLAUSE_ASYNC:
 	case OMP_CLAUSE_WAIT:
@@ -11807,6 +11817,7 @@ walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
 	case OMP_CLAUSE__CILK_FOR_COUNT_:
 	  WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
 	  /* FALLTHRU */
+	  gcc_fallthrough ();
 
 	case OMP_CLAUSE_INDEPENDENT:
 	case OMP_CLAUSE_NOWAIT:
@@ -11954,6 +11965,7 @@ walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
 	  WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
 	}
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     default:
       if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
@@ -12890,6 +12902,7 @@ block_may_fallthru (const_tree block)
       else
 	return true;
       /* FALLTHRU */
+      gcc_fallthrough ();
 
     case CALL_EXPR:
       /* Functions that do not return do not fall through.  */
diff --git gcc/gcc/tsan.c gcc/gcc/tsan.c
index 47764bc..9a7daa5 100644
--- gcc/gcc/tsan.c
+++ gcc/gcc/tsan.c
@@ -551,6 +551,7 @@ instrument_builtin_call (gimple_stmt_iterator *gsi)
 	    if (!integer_nonzerop (gimple_call_arg (stmt, 3)))
 	      continue;
 	    /* FALLTHRU */
+	    gcc_fallthrough ();
 	  case strong_cas:
 	    gcc_assert (num == 6);
 	    for (j = 0; j < 6; j++)
diff --git gcc/gcc/var-tracking.c gcc/gcc/var-tracking.c
index 9f09d30..85d31bc 100644
--- gcc/gcc/var-tracking.c
+++ gcc/gcc/var-tracking.c
@@ -1056,6 +1056,8 @@ adjust_mems (rtx loc, const_rtx old_rtx, void *data)
 					 ? GET_MODE_SIZE (amd->mem_mode)
 					 : -GET_MODE_SIZE (amd->mem_mode),
 					 GET_MODE (loc)));
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
     case POST_INC:
     case POST_DEC:
       if (addr == loc)
@@ -1078,6 +1080,8 @@ adjust_mems (rtx loc, const_rtx old_rtx, void *data)
       return addr;
     case PRE_MODIFY:
       addr = XEXP (loc, 1);
+      /* XXX Really fallthru?  */
+      gcc_fallthrough ();
     case POST_MODIFY:
       if (addr == loc)
 	addr = XEXP (loc, 0);
@@ -1116,6 +1120,7 @@ adjust_mems (rtx loc, const_rtx old_rtx, void *data)
 				 SUBREG_BYTE (loc));
       if (tem == NULL_RTX)
 	tem = gen_rtx_raw_SUBREG (GET_MODE (loc), addr, SUBREG_BYTE (loc));
+      gcc_fallthrough ();
     finish_subreg:
       if (MAY_HAVE_DEBUG_INSNS
 	  && GET_CODE (tem) == SUBREG
@@ -3153,6 +3158,7 @@ set_dv_changed (decl_or_value dv, bool newv)
       if (newv)
 	NO_LOC_P (DECL_RTL_KNOWN_SET (dv_as_decl (dv))) = false;
       /* Fall through...  */
+      gcc_fallthrough ();
 
     default:
       DECL_CHANGED (dv_as_decl (dv)) = newv;
diff --git gcc/gcc/varasm.c gcc/gcc/varasm.c
index 6a8fb81..1d659bd 100644
--- gcc/gcc/varasm.c
+++ gcc/gcc/varasm.c
@@ -589,6 +589,7 @@ default_function_section (tree decl, enum node_frequency freq,
            these ELF section.  */
         if (!in_lto_p || !flag_profile_values)
           return get_named_text_section (decl, ".text.hot", NULL);
+	gcc_fallthrough ();
       default:
 	return NULL;
     }
@@ -3568,6 +3569,7 @@ const_rtx_hash_1 (const_rtx x)
     {
     case CONST_INT:
       hwi = INTVAL (x);
+      gcc_fallthrough ();
 
     fold_hwi:
       {
@@ -3890,6 +3892,7 @@ output_constant_pool_1 (struct constant_descriptor_rtx *desc,
 	break;
       tmp = XEXP (XEXP (tmp, 0), 0);
       /* FALLTHRU  */
+      gcc_fallthrough ();
 
     case LABEL_REF:
       tmp = LABEL_REF_LABEL (tmp);
@@ -4173,6 +4176,7 @@ output_addressed_constants (tree exp)
     case MINUS_EXPR:
       output_addressed_constants (TREE_OPERAND (exp, 1));
       /* Fall through.  */
+      gcc_fallthrough ();
 
     CASE_CONVERT:
     case VIEW_CONVERT_EXPR:
@@ -7520,6 +7524,7 @@ elf_record_gcc_switches (print_switch_type type, const char * name)
 	      started = true;
 	    }
 	}
+      gcc_fallthrough ();
 
     default:
       break;
diff --git gcc/include/libiberty.h gcc/include/libiberty.h
index a9c885f..e435253 100644
--- gcc/include/libiberty.h
+++ gcc/include/libiberty.h
@@ -735,5 +735,10 @@ extern unsigned long libiberty_len;
 }
 #endif
 
+#if GCC_VERSION >= 7000
+# define D_FALLTHRU() __builtin_fallthrough ()
+#else
+# define D_FALLTHRU()
+#endif
 
 #endif /* ! defined (LIBIBERTY_H) */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]