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