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