aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2011-10-11 07:13:59 +0000
committerTristan Gingold <gingold@gcc.gnu.org>2011-10-11 07:13:59 +0000
commit6637388fdc4b4c82c906966024f9012fc0c71df5 (patch)
tree42265edef2e5b8b22a409439cc87ddca221acd00 /gcc
parent10d1dc24ff815c3ed2b9c66493f05e44d5d7bafe (diff)
downloadgcc-6637388fdc4b4c82c906966024f9012fc0c71df5.zip
gcc-6637388fdc4b4c82c906966024f9012fc0c71df5.tar.gz
gcc-6637388fdc4b4c82c906966024f9012fc0c71df5.tar.bz2
c.opt: (fallow-parameterless-variadic-functions): New.
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-family/ChangeLog4
-rw-r--r--gcc/c-family/c.opt4
-rw-r--r--gcc/c-parser.c17
-rw-r--r--gcc/doc/invoke.texi9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/va-arg-4.c3
-rw-r--r--gcc/testsuite/gcc.dg/va-arg-5.c4
8 files changed, 47 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b4bf897..957d661 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 080d42a..e93b98d 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -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
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index e6ac5dc..79287c4 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -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
diff --git a/gcc/c-parser.c b/gcc/c-parser.c
index c948b80..af6cc14 100644
--- a/gcc/c-parser.c
+++ b/gcc/c-parser.c
@@ -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))
{
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index ef7ac68..6888928 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c8af957..1a80895 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..6d737c4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/va-arg-4.c
@@ -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
index 0000000..a00616e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/va-arg-5.c
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-fallow-parameterless-variadic-functions" } */
+#include <stdarg.h>
+extern void baz(...);