From c1e1f4333b65cb99f2dbfff267a634448d947529 Mon Sep 17 00:00:00 2001 From: Bernd Schmidt Date: Wed, 27 Apr 2016 09:48:56 +0000 Subject: invoke.texi (Warning Options): Add -Wmemset-elt-size. * doc/invoke.texi (Warning Options): Add -Wmemset-elt-size. (-Wmemset-elt-size): New item. c-family/ * c.opt (Wmemset-elt-size): New option. * c-common.c (warn_for_memset): New function. * c-common.h (warn_for_memset): Declare. c/ * c-parser.c (c_parser_postfix_expression_after_primary): Call warn_for_memset instead of warning directly here. cp/ * parser.c (cp_parser_postfix_expression): Call warn_for_memset instead of warning directly here. testsuite/ * c-c++-common/memset-array.c: New test. From-SVN: r235475 --- gcc/c/ChangeLog | 5 +++++ gcc/c/c-parser.c | 17 +++++++---------- 2 files changed, 12 insertions(+), 10 deletions(-) (limited to 'gcc/c') diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index b59d690..a641721 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,8 @@ +2016-04-27 Bernd Schmidt + + * c-parser.c (c_parser_postfix_expression_after_primary): Call + warn_for_memset instead of warning directly here. + 2016-04-26 Marek Polacek PR c/67784 diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 74423a6..36c44ab 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -8291,18 +8291,15 @@ c_parser_postfix_expression_after_primary (c_parser *parser, expr.value, exprlist, sizeof_arg, sizeof_ptr_memacc_comptypes); - if (warn_memset_transposed_args - && TREE_CODE (expr.value) == FUNCTION_DECL + if (TREE_CODE (expr.value) == FUNCTION_DECL && DECL_BUILT_IN_CLASS (expr.value) == BUILT_IN_NORMAL && DECL_FUNCTION_CODE (expr.value) == BUILT_IN_MEMSET - && vec_safe_length (exprlist) == 3 - && integer_zerop ((*exprlist)[2]) - && (literal_zero_mask & (1 << 2)) != 0 - && (!integer_zerop ((*exprlist)[1]) - || (literal_zero_mask & (1 << 1)) == 0)) - warning_at (expr_loc, OPT_Wmemset_transposed_args, - "% used with constant zero length parameter; " - "this could be due to transposed parameters"); + && vec_safe_length (exprlist) == 3) + { + tree arg0 = (*exprlist)[0]; + tree arg2 = (*exprlist)[2]; + warn_for_memset (expr_loc, arg0, arg2, literal_zero_mask); + } start = expr.get_start (); finish = parser->tokens_buf[0].get_finish (); -- cgit v1.1