OSDN Git Service

PR c/17301
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 12 Oct 2004 08:32:17 +0000 (08:32 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 12 Oct 2004 08:32:17 +0000 (08:32 +0000)
* c-typeck.c (convert_arguments): Return error_mark_node if there
are too few arguments.
(build_function_call): Handle error_mark_node return from
convert_arguments.

testsuite:
* gcc.dg/pr17301-2.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@88921 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/c-typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr17301-2.c [new file with mode: 0644]

index 5f387f8..1ba7210 100644 (file)
@@ -1,3 +1,11 @@
+2004-10-12  Joseph S. Myers  <jsm@polyomino.org.uk>
+
+       PR c/17301
+       * c-typeck.c (convert_arguments): Return error_mark_node if there
+       are too few arguments.
+       (build_function_call): Handle error_mark_node return from
+       convert_arguments.
+
 2004-10-06  Paolo Bonzini  <bonzini@gnu.org>
 
        * configure.ac (symbolic_link): Replace with $LN_S.
index 5fe3b9d..7cc1024 100644 (file)
@@ -1987,6 +1987,9 @@ build_function_call (tree function, tree params)
   coerced_params
     = convert_arguments (TYPE_ARG_TYPES (fntype), params, function, fundecl);
 
+  if (coerced_params == error_mark_node)
+    return error_mark_node;
+
   /* Check that the arguments to the function are valid.  */
 
   check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params);
@@ -2014,7 +2017,8 @@ build_function_call (tree function, tree params)
 \f
 /* Convert the argument expressions in the list VALUES
    to the types in the list TYPELIST.  The result is a list of converted
-   argument expressions.
+   argument expressions, unless there are too few arguments in which
+   case it is error_mark_node.
 
    If TYPELIST is exhausted, or when an element has NULL as its type,
    perform the default conversions.
@@ -2219,7 +2223,10 @@ convert_arguments (tree typelist, tree values, tree function, tree fundecl)
     }
 
   if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
-    error ("too few arguments to function %qE", function);
+    {
+      error ("too few arguments to function %qE", function);
+      return error_mark_node;
+    }
 
   return nreverse (result);
 }
index 13217f7..766dcec 100644 (file)
@@ -1,3 +1,8 @@
+2004-10-12  Joseph S. Myers  <jsm@polyomino.org.uk>
+
+       PR c/17301
+       * gcc.dg/pr17301-2.c: New test.
+
 2004-10-11  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/15876
diff --git a/gcc/testsuite/gcc.dg/pr17301-2.c b/gcc/testsuite/gcc.dg/pr17301-2.c
new file mode 100644 (file)
index 0000000..e89b953
--- /dev/null
@@ -0,0 +1,9 @@
+/* Invalid use of __builtin_stdarg_start should not cause an ICE.  Bug
+   17301.  Case with no arguments.  */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+void foo (char *format, ...)
+{
+  __builtin_stdarg_start (); /* { dg-error "error: too few arguments to function '__builtin_stdarg_start'" } */
+}