Commit dde05067 by Nathan Froyd Committed by Nathan Froyd

don't use TYPE_ARG_TYPES when calling c-family:check_function_arguments

don't use TYPE_ARG_TYPES when calling c-family:check_function_arguments
gcc/
	* c-typeck.c (build_function_call_vec): Tweak call to
	check_function_arguments.

gcc/c-family/
	* c-common.h (check_function_arguments): Tweak prototype of
	check_function_arguments.
	* c-common.c (check_function_arguments): Likewise.  Adjust
	calls to check_function_nonnull, check_function_format, and
	check_function_sentinel.
	(check_function_sentinel): Take a FUNCTION_TYPE rather than
	separate attributes and typelist arguments.  Use
	FOREACH_FUNCTION_ARGS to iterate over argument types.

gcc/cp/
	* call.c (build_over_call): Tweak call to check_function_arguments.
	* typeck.c (cp_build_function_call_vec): Likewise.

From-SVN: r174067
parent 094f6ab3
2011-05-23 Nathan Froyd <froydnj@codesourcery.com>
* c-typeck.c (build_function_call_vec): Tweak call to
check_function_arguments.
2011-05-23 Richard Guenther <rguenther@suse.de> 2011-05-23 Richard Guenther <rguenther@suse.de>
PR tree-optimization/49115 PR tree-optimization/49115
......
2011-05-23 Nathan Froyd <froydnj@codesourcery.com>
* c-common.h (check_function_arguments): Tweak prototype of
check_function_arguments.
* c-common.c (check_function_arguments): Likewise. Adjust
calls to check_function_nonnull, check_function_format, and
check_function_sentinel.
(check_function_sentinel): Take a FUNCTION_TYPE rather than
separate attributes and typelist arguments. Use
FOREACH_FUNCTION_ARGS to iterate over argument types.
2011-05-15 Paolo Carlini <paolo.carlini@oracle.com> 2011-05-15 Paolo Carlini <paolo.carlini@oracle.com>
* c-common.c (c_common_reswords): Reorder. * c-common.c (c_common_reswords): Reorder.
......
...@@ -7479,20 +7479,23 @@ check_function_nonnull (tree attrs, int nargs, tree *argarray) ...@@ -7479,20 +7479,23 @@ check_function_nonnull (tree attrs, int nargs, tree *argarray)
array ARGARRAY. */ array ARGARRAY. */
static void static void
check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist) check_function_sentinel (const_tree fntype, int nargs, tree *argarray)
{ {
tree attr = lookup_attribute ("sentinel", attrs); tree attr = lookup_attribute ("sentinel", TYPE_ATTRIBUTES (fntype));
if (attr) if (attr)
{ {
int len = 0; int len = 0;
int pos = 0; int pos = 0;
tree sentinel; tree sentinel;
function_args_iterator iter;
tree t;
/* Skip over the named arguments. */ /* Skip over the named arguments. */
while (typelist && len < nargs) FOREACH_FUNCTION_ARGS (fntype, t, iter)
{ {
typelist = TREE_CHAIN (typelist); if (len == nargs)
break;
len++; len++;
} }
...@@ -7937,26 +7940,24 @@ handle_no_split_stack_attribute (tree *node, tree name, ...@@ -7937,26 +7940,24 @@ handle_no_split_stack_attribute (tree *node, tree name,
return NULL_TREE; return NULL_TREE;
} }
/* Check for valid arguments being passed to a function. /* Check for valid arguments being passed to a function with FNTYPE.
ATTRS is a list of attributes. There are NARGS arguments in the array There are NARGS arguments in the array ARGARRAY. */
ARGARRAY. TYPELIST is the list of argument types for the function.
*/
void void
check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist) check_function_arguments (const_tree fntype, int nargs, tree *argarray)
{ {
/* Check for null being passed in a pointer argument that must be /* Check for null being passed in a pointer argument that must be
non-null. We also need to do this if format checking is enabled. */ non-null. We also need to do this if format checking is enabled. */
if (warn_nonnull) if (warn_nonnull)
check_function_nonnull (attrs, nargs, argarray); check_function_nonnull (TYPE_ATTRIBUTES (fntype), nargs, argarray);
/* Check for errors in format strings. */ /* Check for errors in format strings. */
if (warn_format || warn_missing_format_attribute) if (warn_format || warn_missing_format_attribute)
check_function_format (attrs, nargs, argarray); check_function_format (TYPE_ATTRIBUTES (fntype), nargs, argarray);
if (warn_format) if (warn_format)
check_function_sentinel (attrs, nargs, argarray, typelist); check_function_sentinel (fntype, nargs, argarray);
} }
/* Generic argument checking recursion routine. PARAM is the argument to /* Generic argument checking recursion routine. PARAM is the argument to
......
...@@ -687,7 +687,7 @@ extern void finish_fname_decls (void); ...@@ -687,7 +687,7 @@ extern void finish_fname_decls (void);
extern const char *fname_as_string (int); extern const char *fname_as_string (int);
extern tree fname_decl (location_t, unsigned, tree); extern tree fname_decl (location_t, unsigned, tree);
extern void check_function_arguments (tree, int, tree *, tree); extern void check_function_arguments (const_tree, int, tree *);
extern void check_function_arguments_recurse (void (*) extern void check_function_arguments_recurse (void (*)
(void *, tree, (void *, tree,
unsigned HOST_WIDE_INT), unsigned HOST_WIDE_INT),
......
...@@ -2808,8 +2808,7 @@ build_function_call_vec (location_t loc, tree function, VEC(tree,gc) *params, ...@@ -2808,8 +2808,7 @@ build_function_call_vec (location_t loc, tree function, VEC(tree,gc) *params,
return error_mark_node; return error_mark_node;
/* Check that the arguments to the function are valid. */ /* Check that the arguments to the function are valid. */
check_function_arguments (TYPE_ATTRIBUTES (fntype), nargs, argarray, check_function_arguments (fntype, nargs, argarray);
TYPE_ARG_TYPES (fntype));
if (name != NULL_TREE if (name != NULL_TREE
&& !strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10)) && !strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10))
......
2011-05-23 Nathan Froyd <froydnj@codesourcery.com>
* call.c (build_over_call): Tweak call to check_function_arguments.
* typeck.c (cp_build_function_call_vec): Likewise.
2011-05-23 Jonathan Wakely <jwakely.gcc@gmail.com> 2011-05-23 Jonathan Wakely <jwakely.gcc@gmail.com>
PR c++/18016 PR c++/18016
......
...@@ -6477,8 +6477,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) ...@@ -6477,8 +6477,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
gcc_assert (j <= nargs); gcc_assert (j <= nargs);
nargs = j; nargs = j;
check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)), check_function_arguments (TREE_TYPE (fn), nargs, argarray);
nargs, argarray, TYPE_ARG_TYPES (TREE_TYPE (fn)));
/* Avoid actually calling copy constructors and copy assignment operators, /* Avoid actually calling copy constructors and copy assignment operators,
if possible. */ if possible. */
......
...@@ -3271,8 +3271,7 @@ cp_build_function_call_vec (tree function, VEC(tree,gc) **params, ...@@ -3271,8 +3271,7 @@ cp_build_function_call_vec (tree function, VEC(tree,gc) **params,
/* Check for errors in format strings and inappropriately /* Check for errors in format strings and inappropriately
null parameters. */ null parameters. */
check_function_arguments (TYPE_ATTRIBUTES (fntype), nargs, argarray, check_function_arguments (fntype, nargs, argarray);
parm_types);
ret = build_cxx_call (function, nargs, argarray); ret = build_cxx_call (function, nargs, argarray);
......
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