Commit 6f9b7472 by Martin Sebor Committed by Martin Sebor

re PR tree-optimization/82945 (add warning for passing non-strings to functions…

re PR tree-optimization/82945 (add warning for passing non-strings to functions that expect string arguments)

gcc/ChangeLog:

	PR tree-optimization/82945
	* calls.h (warn_nonstring_bound): Remove unused function.

From-SVN: r255036
parent 866e4d38
2017-11-21 Martin Sebor <msebor@redhat.com>
PR tree-optimization/82945
* calls.h (warn_nonstring_bound): Remove unused function.
2017-11-21 Martin Sebor <msebor@redhat.com>
PR tree-optimization/82945
* builtins.c (expand_builtin_strlen): Call maybe_warn_nonstring_arg.
* calls.h (maybe_warn_nonstring_arg): Declare new function.
* calls.c (get_attr_nonstring_decl, maybe_warn_nonstring_arg): New
......@@ -1535,58 +1535,6 @@ get_attr_nonstring_decl (tree expr, tree *ref)
return NULL_TREE;
}
/* Check the size argument to the strncmp built-in to see if it's within
the bounds of the arguments and if not, issue a warning. */
static void
warn_nonstring_bound (tree fndecl, tree call)
{
bool with_bounds = CALL_WITH_BOUNDS_P (call);
tree cnt = CALL_EXPR_ARG (call, with_bounds ? 4 : 2);
tree cntrange[2];
if (!get_size_range (cnt, cntrange))
return;
location_t callloc = EXPR_LOCATION (call);
for (unsigned i = 0; i != 2; ++i)
{
tree str = CALL_EXPR_ARG (call, i + 2 * with_bounds);
tree sref;
tree decl = get_attr_nonstring_decl (str, &sref);
if (!decl)
continue;
tree type = TREE_TYPE (decl);
if (TREE_CODE (type) != ARRAY_TYPE)
continue;
tree dom = TYPE_DOMAIN (type);
if (!dom)
continue;
tree bound = TYPE_MAX_VALUE (dom);
if (!bound)
continue;
bool warned = false;
if (tree_int_cst_le (bound, cntrange[0]))
warned = warning_at (callloc, OPT_Wstringop_truncation,
"%qD argument %i declared attribute %<nonstring%> "
"is smaller than the specified bound %E",
fndecl, i, cntrange[0]);
if (warned)
{
location_t loc = DECL_SOURCE_LOCATION (decl);
if (loc != UNKNOWN_LOCATION)
inform (loc, "argument %qD declared here", decl);
}
}
}
/* Warn about passing a non-string array/pointer to a function that
expects a nul-terminated string argument. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment