aboutsummaryrefslogtreecommitdiff
path: root/gcc/c/c-parser.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@redhat.com>2016-04-27 09:48:56 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2016-04-27 09:48:56 +0000
commitc1e1f4333b65cb99f2dbfff267a634448d947529 (patch)
tree96f8374ba1ef35e3c658690c190cb0d008ae3001 /gcc/c/c-parser.c
parent06aed101fc1eb7bc685e334352a599f0a4718a22 (diff)
downloadgcc-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.c17
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 ();