c.opt: (fallow-parameterless-variadic-functions): New.
authorTristan Gingold <gingold@adacore.com>
Tue, 11 Oct 2011 07:13:59 +0000 (07:13 +0000)
committerTristan Gingold <gingold@gcc.gnu.org>
Tue, 11 Oct 2011 07:13:59 +0000 (07:13 +0000)
c-family/ChangeLog
2011-10-11  Tristan Gingold  <gingold@adacore.com>

        * c.opt: (fallow-parameterless-variadic-functions): New.

ChangeLog
2011-10-11  Tristan Gingold  <gingold@adacore.com>

        * doc/invoke.texi (C Dialect Options): Document
        -fallow-parameterless-variadic-functions.
        * c-parser.c (c_parser_parms_list_declarator): Handle it.

testsuite/ChangeLog
2011-10-11  Tristan Gingold  <gingold@adacore.com>

        * gcc.dg/va-arg-4.c: New test.
        * gcc.dg/va-arg-5.c: Ditto.

From-SVN: r179786

gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c.opt
gcc/c-parser.c
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/va-arg-4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/va-arg-5.c [new file with mode: 0644]

index b4bf8978549ecdc58a89b5944c79819a18b8ed96..957d661c3adf9a5ded83d51a1cfa6f1f924d4d94 100644 (file)
@@ -1,3 +1,9 @@
+2011-10-11  Tristan Gingold  <gingold@adacore.com>
+
+       * doc/invoke.texi (C Dialect Options): Document
+       -fallow-parameterless-variadic-functions.
+       * c-parser.c (c_parser_parms_list_declarator): Handle it.
+
 2011-10-10  Georg-Johann Lay  <avr@gjlay.de>
 
        * config/avr/avr.c (avr_option_override): Set
index 080d42ac340fac9756aec4e0d032cc6471a420db..e93b98dd4519c22d499238ea6cd21a0ae47776c8 100644 (file)
@@ -1,3 +1,7 @@
+2011-10-11  Tristan Gingold  <gingold@adacore.com>
+
+       * c.opt: (fallow-parameterless-variadic-functions): New.
+
 2011-09-08  Dodji Seketeli  <dodji@redhat.com>
 
        PR c++/33255 - Support -Wunused-local-typedefs warning
index e6ac5dca2efba13415084218daae58656f0e2199..79287c40422d77af7e6298eee93c947d1e5b5795 100644 (file)
@@ -700,6 +700,10 @@ Enforce class member access control semantics
 fall-virtual
 C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
+fallow-parameterless-variadic-functions
+C ObjC Var(flag_allow_parameterless_variadic_functions)
+Allow variadic functions without named parameter
+
 falt-external-templates
 C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 No longer supported
index c948b802ca5632b229aab8d4e00c5dbfd1c89647..af6cc149efc9fe73af42327a0f59d1fb2ceb1813 100644 (file)
@@ -3159,10 +3159,19 @@ c_parser_parms_list_declarator (c_parser *parser, tree attrs, tree expr)
   if (c_parser_next_token_is (parser, CPP_ELLIPSIS))
     {
       struct c_arg_info *ret = build_arg_info ();
-      /* Suppress -Wold-style-definition for this case.  */
-      ret->types = error_mark_node;
-      error_at (c_parser_peek_token (parser)->location,
-               "ISO C requires a named argument before %<...%>");
+
+      if (flag_allow_parameterless_variadic_functions)
+        {
+          /* F (...) is allowed.  */
+          ret->types = NULL_TREE;
+        }
+      else
+        {
+          /* Suppress -Wold-style-definition for this case.  */
+          ret->types = error_mark_node;
+          error_at (c_parser_peek_token (parser)->location,
+                    "ISO C requires a named argument before %<...%>");
+        }
       c_parser_consume_token (parser);
       if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
        {
index ef7ac68ebf2ab392f4493ce31b1e973256fd081c..688892814c5ca7d0dc7d89692856d84de5d35897 100644 (file)
@@ -170,7 +170,7 @@ in the following sections.
 @item C Language Options
 @xref{C Dialect Options,,Options Controlling C Dialect}.
 @gccoptlist{-ansi  -std=@var{standard}  -fgnu89-inline @gol
--aux-info @var{filename} @gol
+-aux-info @var{filename} -fallow-parameterless-variadic-functions @gol
 -fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
 -fhosted  -ffreestanding -fopenmp -fms-extensions -fplan9-extensions @gol
 -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp @gol
@@ -1622,6 +1622,13 @@ character).  In the case of function definitions, a K&R-style list of
 arguments followed by their declarations is also provided, inside
 comments, after the declaration.
 
+@item -fallow-parameterless-variadic-functions
+Accept variadic functions without named parameters.
+
+Although it is possible to define such a function, this is not very
+useful as it is not possible to read the arguments.  This is only
+supported for C as this construct is allowed by C++.
+
 @item -fno-asm
 @opindex fno-asm
 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
index c8af95762b3aca04a91282978476af19f939421d..1a80895dc58145554c5c353acc8d88b003826358 100644 (file)
@@ -1,3 +1,8 @@
+2011-10-11  Tristan Gingold  <gingold@adacore.com>
+
+       * gcc.dg/va-arg-4.c: New test.
+       * gcc.dg/va-arg-5.c: Ditto.
+
 2011-10-11  Uros Bizjak  <ubizjak@gmail.com>
 
        * lib/target-supports.exp (check_effective_target_fd_truncate):
diff --git a/gcc/testsuite/gcc.dg/va-arg-4.c b/gcc/testsuite/gcc.dg/va-arg-4.c
new file mode 100644 (file)
index 0000000..6d737c4
--- /dev/null
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+#include <stdarg.h>
+extern void baz(...);  /* { dg-error "requires a named argument" } */
diff --git a/gcc/testsuite/gcc.dg/va-arg-5.c b/gcc/testsuite/gcc.dg/va-arg-5.c
new file mode 100644 (file)
index 0000000..a00616e
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-fallow-parameterless-variadic-functions" } */
+#include <stdarg.h>
+extern void baz(...);