--- gcc/c/c-parser.cc | 24 ++++++++++++++++++++++++ gcc/c/c-typeck.cc | 3 +++ 2 files changed, 27 insertions(+) diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index 49e72267967..90f7f609144 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -4874,6 +4874,8 @@ c_parser_direct_declarator (c_parser *parser, bool type_seen_p, c_dtr_syn kind, c_parser_consume_token (parser); if (c_parser_nth_token_starts_std_attributes (parser, 1)) inner->u.id.attrs = c_parser_std_attribute_specifier_sequence (parser); +// XXX: 'int f(int n)[n];' triggers this +warning_at (c_parser_peek_token(parser)->location, OPT_Wsign_conversion, "ALX: J"); return c_parser_direct_declarator_inner (parser, *seen_id, inner); } @@ -5007,7 +5009,11 @@ c_parser_direct_declarator_inner (c_parser *parser, bool id_present, c_parser_consume_token (parser); } else if (!c_parser_next_token_is (parser, CPP_CLOSE_SQUARE)) +{ +// XXX: 'int f(int n)[n];' triggers this +warning_at (c_parser_peek_token(parser)->location, OPT_Wsign_conversion, "ALX: H"); dimen = c_parser_expr_no_commas (parser, NULL); +} if (static_seen) { @@ -5080,6 +5086,8 @@ c_parser_direct_declarator_inner (c_parser *parser, bool id_present, inner = build_attrs_declarator (std_attrs, inner); } inner = build_function_declarator (args, inner); +// XXX: 'int f(int n)[n];' triggers this +warning_at (c_parser_peek_token(parser)->location, OPT_Wsign_conversion, "ALX: I"); ret = c_parser_direct_declarator_inner (parser, id_present, inner); pop_scope (); return ret; @@ -9824,6 +9832,8 @@ c_parser_expr_no_commas (c_parser *parser, struct c_expr *after, bool save_in_omp_for = c_in_omp_for; c_in_omp_for = false; gcc_assert (!after || c_dialect_objc ()); +// XXX: 'int f(int n)[n];' triggers this +warning_at (c_parser_peek_token(parser)->location, OPT_Wsign_conversion, "ALX: G"); lhs = c_parser_conditional_expression (parser, after, omp_atomic_lhs); op_location = c_parser_peek_token (parser)->location; switch (c_parser_peek_token (parser)->type) @@ -9911,6 +9921,8 @@ c_parser_conditional_expression (c_parser *parser, struct c_expr *after, gcc_assert (!after || c_dialect_objc ()); +// XXX: 'int f(int n)[n];' triggers this +warning_at (c_parser_peek_token(parser)->location, OPT_Wsign_conversion, "ALX: F"); cond = c_parser_binary_expression (parser, after, omp_atomic_lhs); if (c_parser_next_token_is_not (parser, CPP_QUERY)) @@ -10216,6 +10228,8 @@ c_parser_binary_expression (c_parser *parser, struct c_expr *after, } while (0) gcc_assert (!after || c_dialect_objc ()); stack[0].loc = c_parser_peek_token (parser)->location; +// XXX: 'int f(int n)[n];' triggers this +warning_at (stack[0].loc, OPT_Wsign_conversion, "ALX: E"); stack[0].expr = c_parser_cast_expression (parser, after); stack[0].prec = PREC_NONE; stack[0].sizeof_arg = c_last_sizeof_arg; @@ -10448,8 +10462,13 @@ c_parser_cast_expression (c_parser *parser, struct c_expr *after) return ret; } else +{ +// XXX: 'int f(int n)[n];' triggers this +location_t loc = c_parser_peek_token (parser)->location; +warning_at (loc, OPT_Wsign_conversion, "ALX: D"); return c_parser_unary_expression (parser); } +} /* Parse an unary expression (C90 6.3.3, C99 6.5.3, C11 6.5.3). @@ -10610,6 +10629,9 @@ c_parser_unary_expression (c_parser *parser) return c_parser_postfix_expression (parser); } default: +// XXX: 'int f(int n)[n];' triggers this +location_t loc = c_parser_peek_token (parser)->location; +warning_at (loc, OPT_Wsign_conversion, "ALX: C"); return c_parser_postfix_expression (parser); } } @@ -11486,6 +11508,8 @@ c_parser_postfix_expression (c_parser *parser) { tree id = c_parser_peek_token (parser)->value; c_parser_consume_token (parser); +// XXX: 'int f(int n)[n];' triggers this + warning_at (loc, OPT_Wsign_conversion, "ALX: B"); expr.value = build_external_ref (loc, id, (c_parser_peek_token (parser)->type == CPP_OPEN_PAREN), diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index 0e1f842e22d..e5bd9eca3a8 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -3516,6 +3516,9 @@ build_external_ref (location_t loc, tree id, bool fun, tree *type) return error_mark_node; else { +// XXX: 'int f(int n)[n];' triggers this + warning_at (loc, OPT_Wsign_conversion, "ALX: A"); + undeclared_variable (loc, id); return error_mark_node; } -- 2.49.0