Handle removal of old-style function definitions in C2x.
authorJoseph Myers <joseph@codesourcery.com>
Fri, 8 Nov 2019 01:21:40 +0000 (01:21 +0000)
committerJoseph Myers <jsm28@gcc.gnu.org>
Fri, 8 Nov 2019 01:21:40 +0000 (01:21 +0000)
commit017c6491077bee998eed9ed6520026285c906d37
tree17e627d2d781e8f6c48233b95f8bec50f1734fe2
parent3d6e7aa95cf3b354dded4cb1a8c546cbe217beb9
Handle removal of old-style function definitions in C2x.

C2x removes support for old-style function definitions with identifier
lists, changing () in function definitions to be equivalent to (void)
(while () in declarations that are not definitions still gives an
unprototyped type).

This patch updates GCC accordingly.  The new semantics for () are
implemented for C2x mode (meaning () in function definitions isn't
diagnosed by -Wold-style-definition in that mode).
-Wold-style-definition is enabled by default, and turned into a
pedwarn, for C2x.

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc:
* doc/invoke.texi (-Wold-style-definition): Document () not being
considered an old-style definition for C2x.

gcc/c:
* c-decl.c (grokparms): Convert () in a function definition to
(void) for C2x.
(store_parm_decls_oldstyle): Pedwarn for C2x.
(store_parm_decls): Update comment about () not generating a
prototype.

gcc/c-family:
* c.opt (Wold-style-definition): Initialize to -1.
* c-opts.c (c_common_post_options): Set warn_old_style_definition
to flag_isoc2x if not set explicitly.

gcc/testsuite:
* gcc.dg/c11-old-style-definition-1.c,
gcc.dg/c11-old-style-definition-2.c,
gcc.dg/c2x-old-style-definition-1.c,
gcc.dg/c2x-old-style-definition-2.c,
gcc.dg/c2x-old-style-definition-3.c,
gcc.dg/c2x-old-style-definition-4.c,
gcc.dg/c2x-old-style-definition-5.c,
gcc.dg/c2x-old-style-definition-6.c: New tests.

From-SVN: r277945
16 files changed:
gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-opts.c
gcc/c-family/c.opt
gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/c11-old-style-definition-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c11-old-style-definition-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2x-old-style-definition-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2x-old-style-definition-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2x-old-style-definition-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2x-old-style-definition-4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2x-old-style-definition-5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2x-old-style-definition-6.c [new file with mode: 0644]