2016-07-11  Marek Polacek  <pola...@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) */

Reply via email to