diff options
author | Bernd Schmidt <bernds@redhat.com> | 2016-04-27 09:48:56 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2016-04-27 09:48:56 +0000 |
commit | c1e1f4333b65cb99f2dbfff267a634448d947529 (patch) | |
tree | 96f8374ba1ef35e3c658690c190cb0d008ae3001 /gcc/c/c-parser.c | |
parent | 06aed101fc1eb7bc685e334352a599f0a4718a22 (diff) | |
download | gcc-c1e1f4333b65cb99f2dbfff267a634448d947529.zip gcc-c1e1f4333b65cb99f2dbfff267a634448d947529.tar.gz gcc-c1e1f4333b65cb99f2dbfff267a634448d947529.tar.bz2 |
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
Diffstat (limited to 'gcc/c/c-parser.c')
-rw-r--r-- | gcc/c/c-parser.c | 17 |
1 files changed, 7 insertions, 10 deletions
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, - "%<memset%> 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 (); |