don't use TYPE_ARG_TYPES when calling c-family:check_function_arguments
authorNathan Froyd <froydnj@codesourcery.com>
Mon, 23 May 2011 14:20:49 +0000 (14:20 +0000)
committerNathan Froyd <froydnj@gcc.gnu.org>
Mon, 23 May 2011 14:20:49 +0000 (14:20 +0000)
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

gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/c-family/c-common.h
gcc/c-typeck.c
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/typeck.c

index 62990819dbf316d34cbfc907ab3ecec9b0f8bab1..d045f3f5f92b165a410b8fa10cad44c6fef82171 100644 (file)
@@ -1,3 +1,8 @@
+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>
 
        PR tree-optimization/49115
index 7fa73314501ff2878892f31f88edcb066c1018bb..5044c076833a20ee656d57b2046a53d32bfa0e51 100644 (file)
@@ -1,3 +1,14 @@
+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>
 
        * c-common.c (c_common_reswords): Reorder.
index 8fc68eb6fea48164116ecd7781a9911c0d6cbe45..fef8ded203fec27898862b75a9c4ee6eb6bf2a50 100644 (file)
@@ -7479,20 +7479,23 @@ check_function_nonnull (tree attrs, int nargs, tree *argarray)
    array ARGARRAY.  */
 
 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)
     {
       int len = 0;
       int pos = 0;
       tree sentinel;
+      function_args_iterator iter;
+      tree t;
 
       /* Skip over the named arguments.  */
-      while (typelist && len < nargs)
+      FOREACH_FUNCTION_ARGS (fntype, t, iter)
        {
-         typelist = TREE_CHAIN (typelist);
+         if (len == nargs)
+           break;
          len++;
        }
 
@@ -7937,26 +7940,24 @@ handle_no_split_stack_attribute (tree *node, tree name,
   return NULL_TREE;
 }
 \f
-/* Check for valid arguments being passed to a function.
-   ATTRS is a list of attributes.  There are NARGS arguments in the array
-   ARGARRAY.  TYPELIST is the list of argument types for the function.
- */
+/* Check for valid arguments being passed to a function with FNTYPE.
+   There are NARGS arguments in the array ARGARRAY.  */
 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
      non-null.  We also need to do this if format checking is enabled.  */
 
   if (warn_nonnull)
-    check_function_nonnull (attrs, nargs, argarray);
+    check_function_nonnull (TYPE_ATTRIBUTES (fntype), nargs, argarray);
 
   /* Check for errors in format strings.  */
 
   if (warn_format || warn_missing_format_attribute)
-    check_function_format (attrs, nargs, argarray);
+    check_function_format (TYPE_ATTRIBUTES (fntype), nargs, argarray);
 
   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
index 7136b017dcb87c1048eb6a8ed7b082418142f723..89d4b80bdedda529d7f4320a8c4daa2d43b3bf81 100644 (file)
@@ -687,7 +687,7 @@ extern void finish_fname_decls (void);
 extern const char *fname_as_string (int);
 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 (*)
                                              (void *, tree,
                                               unsigned HOST_WIDE_INT),
index 6016db2783fd1754b2bb8b489c89f057cff1c028..e609611ab583348c0304adc32eacfe12fd7ba0a5 100644 (file)
@@ -2808,8 +2808,7 @@ build_function_call_vec (location_t loc, tree function, VEC(tree,gc) *params,
     return error_mark_node;
 
   /* Check that the arguments to the function are valid.  */
-  check_function_arguments (TYPE_ATTRIBUTES (fntype), nargs, argarray,
-                           TYPE_ARG_TYPES (fntype));
+  check_function_arguments (fntype, nargs, argarray);
 
   if (name != NULL_TREE
       && !strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10))
index 20c98083e9fd18ab8227a1729b3c52b3b9275d46..168f43a245d220023318f65e1583bf31eeed7c91 100644 (file)
@@ -1,3 +1,8 @@
+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>
 
        PR c++/18016
index 09ad4aea25ecec9f093db2056d00781b2964fa4b..972dca376eee61f397c323d4fe845458e3a796b9 100644 (file)
@@ -6477,8 +6477,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
   gcc_assert (j <= nargs);
   nargs = j;
 
-  check_function_arguments (TYPE_ATTRIBUTES (TREE_TYPE (fn)),
-                           nargs, argarray, TYPE_ARG_TYPES (TREE_TYPE (fn)));
+  check_function_arguments (TREE_TYPE (fn), nargs, argarray);
 
   /* Avoid actually calling copy constructors and copy assignment operators,
      if possible.  */
index dd1cc3b127c55d1f1ae860998f9fd8b096e52ce3..81ee63d7efdd4d1790b933dae1294430efef79bd 100644 (file)
@@ -3271,8 +3271,7 @@ cp_build_function_call_vec (tree function, VEC(tree,gc) **params,
 
   /* Check for errors in format strings and inappropriately
      null parameters.  */
-  check_function_arguments (TYPE_ATTRIBUTES (fntype), nargs, argarray,
-                           parm_types);
+  check_function_arguments (fntype, nargs, argarray);
 
   ret = build_cxx_call (function, nargs, argarray);