2016-07-11 Marek Polacek <pola...@redhat.com> PR c/7652 * c-array-notation.c (expand_array_notations): Add gcc_fallthrough. * c-decl.c (pop_scope): Likewise. (grokdeclarator): Likewise. (get_parm_info): Likewise. * c-objc-common.c (c_tree_printer): Likewise. * c-parser.c (c_parser_external_declaration): Likewise. (c_parser_declspecs): Likewise. (c_parser_statement_after_labels): Likewise. (c_parser_postfix_expression): Likewise. (c_parser_check_literal_zero): Likewise. (c_parser_omp_variable_list): Likewise. (c_parser_omp_for_loop): Likewise. * c-typeck.c (composite_type): Likewise. (build_unary_op): Likewise. (c_mark_addressable): Likewise. (build_binary_op): Likewise. (c_finish_omp_clauses): Likewise.
diff --git gcc/gcc/c/c-array-notation.c gcc/gcc/c/c-array-notation.c index c7cf66a..cf91b21 100644 --- gcc/gcc/c/c-array-notation.c +++ gcc/gcc/c/c-array-notation.c @@ -1303,6 +1303,7 @@ expand_array_notations (tree *tp, int *walk_subtrees, void *) A[x:y]; Replace those with just void zero node. */ *tp = void_node; + gcc_fallthrough (); default: break; } diff --git gcc/gcc/c/c-decl.c gcc/gcc/c/c-decl.c index 8b966fe..d3d3bda 100644 --- gcc/gcc/c/c-decl.c +++ gcc/gcc/c/c-decl.c @@ -1284,6 +1284,7 @@ pop_scope (void) } /* Fall through. */ + gcc_fallthrough (); case TYPE_DECL: case CONST_DECL: common_symbol: @@ -1329,6 +1330,7 @@ pop_scope (void) } /* Fall through. */ + gcc_fallthrough (); /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have already been put there by store_parm_decls. Unused- parameter warnings are handled by function.c. @@ -5564,6 +5566,7 @@ grokdeclarator (const struct c_declarator *declarator, case cdk_array: loc = decl->id_loc; /* FALL THRU. */ + gcc_fallthrough (); case cdk_function: case cdk_pointer: @@ -7250,6 +7253,7 @@ get_parm_info (bool ellipsis, tree expr) DECL_CHAIN (decl) = others; others = decl; /* fall through */ + gcc_fallthrough (); case ERROR_MARK: set_shadowed: diff --git gcc/gcc/c/c-objc-common.c gcc/gcc/c/c-objc-common.c index 20dc024..21c0e2c 100644 --- gcc/gcc/c/c-objc-common.c +++ gcc/gcc/c/c-objc-common.c @@ -112,6 +112,7 @@ c_tree_printer (pretty_printer *pp, text_info *text, const char *spec, } } /* FALLTHRU */ + gcc_fallthrough (); case 'F': if (DECL_NAME (t)) diff --git gcc/gcc/c/c-parser.c gcc/gcc/c/c-parser.c index 1a50dea..0a33728 100644 --- gcc/gcc/c/c-parser.c +++ gcc/gcc/c/c-parser.c @@ -1546,6 +1546,7 @@ c_parser_external_declaration (c_parser *parser) } /* Else fall through, and yield a syntax error trying to parse as a declaration or function definition. */ + gcc_fallthrough (); default: decl_or_fndef: /* A declaration or a function definition (or, in Objective-C, @@ -2517,6 +2518,7 @@ c_parser_declspecs (c_parser *parser, struct c_declspecs *specs, if (!auto_type_ok) goto out; /* Fall through. */ + gcc_fallthrough (); case RID_UNSIGNED: case RID_LONG: case RID_SHORT: @@ -5339,6 +5341,7 @@ c_parser_statement_after_labels (c_parser *parser, bool *if_p, default: expr_stmt: stmt = c_finish_expr_stmt (loc, c_parser_expression_conv (parser).value); + gcc_fallthrough (); expect_semicolon: c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>"); break; @@ -8174,6 +8177,7 @@ c_parser_postfix_expression (c_parser *parser) break; } /* Else fall through to report error. */ + gcc_fallthrough (); default: c_parser_error (parser, "expected expression"); expr.set_error (); @@ -8578,6 +8582,7 @@ c_parser_check_literal_zero (c_parser *parser, unsigned *literal_zero_mask, && (c_parser_peek_2nd_token (parser)->type == CPP_COMMA || c_parser_peek_2nd_token (parser)->type == CPP_CLOSE_PAREN)) *literal_zero_mask |= 1U << idx; + gcc_fallthrough (); default: break; } @@ -10672,6 +10677,7 @@ c_parser_omp_variable_list (c_parser *parser, break; } /* FALLTHROUGH */ + gcc_fallthrough (); case OMP_CLAUSE_MAP: case OMP_CLAUSE_FROM: case OMP_CLAUSE_TO: @@ -10693,6 +10699,7 @@ c_parser_omp_variable_list (c_parser *parser, t = build_component_ref (op_loc, t, ident, comp_loc); } /* FALLTHROUGH */ + gcc_fallthrough (); case OMP_CLAUSE_DEPEND: case OMP_CLAUSE_REDUCTION: while (c_parser_next_token_is (parser, CPP_OPEN_SQUARE)) @@ -14394,6 +14401,7 @@ restart: if (code == OMP_ATOMIC_CAPTURE_NEW && !structured_block) code = OMP_ATOMIC_CAPTURE_OLD; /* FALLTHROUGH */ + gcc_fallthrough (); case PREINCREMENT_EXPR: lhs = TREE_OPERAND (lhs, 0); unfolded_lhs = NULL_TREE; @@ -14405,6 +14413,7 @@ restart: if (code == OMP_ATOMIC_CAPTURE_NEW && !structured_block) code = OMP_ATOMIC_CAPTURE_OLD; /* FALLTHROUGH */ + gcc_fallthrough (); case PREDECREMENT_EXPR: lhs = TREE_OPERAND (lhs, 0); unfolded_lhs = NULL_TREE; @@ -14423,6 +14432,7 @@ restart: /* Undo effects of boolean_increment for post {in,de}crement. */ lhs = TREE_OPERAND (TREE_OPERAND (lhs, 1), 0); /* FALLTHRU */ + gcc_fallthrough (); case MODIFY_EXPR: if (TREE_CODE (lhs) == MODIFY_EXPR && TREE_CODE (TREE_TYPE (TREE_OPERAND (lhs, 0))) == BOOLEAN_TYPE) @@ -14458,6 +14468,7 @@ restart: } } /* FALLTHRU */ + gcc_fallthrough (); default: if (!lvalue_p (unfolded_lhs)) lhs = non_lvalue (lhs); @@ -14863,6 +14874,7 @@ c_parser_omp_for_loop (location_t loc, c_parser *parser, enum tree_code code, if (code == CILK_SIMD || code == CILK_FOR) break; /* FALLTHRU. */ + gcc_fallthrough (); default: /* Can't be cond = error_mark_node, because we want to preserve the location until c_finish_omp_for. */ diff --git gcc/gcc/c/c-typeck.c gcc/gcc/c/c-typeck.c index bafd0d2..4c1d775 100644 --- gcc/gcc/c/c-typeck.c +++ gcc/gcc/c/c-typeck.c @@ -607,6 +607,7 @@ composite_type (tree t1, tree t2) t1 = qualify_type (t1, t2); /* ... falls through ... */ } + gcc_fallthrough (); default: return build_type_attribute_variant (t1, attributes); @@ -4494,6 +4495,7 @@ build_unary_op (location_t location, } /* ... fall through ... */ + gcc_fallthrough (); case ARRAY_REF: if (TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (TREE_OPERAND (arg, 0)))) @@ -4512,6 +4514,7 @@ build_unary_op (location_t location, "address of array with reverse scalar storage " "order requested"); } + gcc_fallthrough (); default: break; @@ -4696,9 +4699,11 @@ c_mark_addressable (tree exp) } /* drops in */ + gcc_fallthrough (); case FUNCTION_DECL: TREE_ADDRESSABLE (x) = 1; /* drops out */ + gcc_fallthrough (); default: return true; } @@ -11464,6 +11469,7 @@ build_binary_op (location_t location, enum tree_code code, op1 = c_save_expr (op1); imag = build2 (resultcode, real_type, imag, op1); /* Fall through. */ + gcc_fallthrough (); case PLUS_EXPR: case MINUS_EXPR: real = build2 (resultcode, real_type, real, op1); @@ -11485,6 +11491,7 @@ build_binary_op (location_t location, enum tree_code code, op0 = c_save_expr (op0); imag = build2 (resultcode, real_type, op0, imag); /* Fall through. */ + gcc_fallthrough (); case PLUS_EXPR: real = build2 (resultcode, real_type, op0, real); break; @@ -12944,6 +12951,7 @@ c_finish_omp_clauses (tree clauses, enum c_omp_region_type ort) check_dup_generic: t = OMP_CLAUSE_DECL (c); + gcc_fallthrough (); check_dup_generic_t: if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL) {