]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: Implement C++26 P3176R1 - The Oxford variadic comma
authorJakub Jelinek <jakub@redhat.com>
Sat, 30 Nov 2024 00:49:21 +0000 (01:49 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Sat, 30 Nov 2024 00:49:21 +0000 (01:49 +0100)
commitcc67d95dc100706ea665e8cce581d59466aba62e
tree2b9e8d39d7f513aa182d163c7ec29776820eb0d1
parent20dcb7926bef7546fb1abdf45781d15578756893
c++: Implement C++26 P3176R1 - The Oxford variadic comma

While we are already in stage3, I wonder if implementing this small paper
wouldn't be useful even for GCC 15, so that we have in the GCC world one
extra year of deprecation of variadic ellipsis without preceding comma.

The paper just deprecates something, I'd hope most of the C++ code in the
wild when it uses variadic functions at all uses the comma before the
ellipsis.

2024-11-30  Jakub Jelinek  <jakub@redhat.com>

gcc/c-family/
* c.opt (Wdeprecated-variadic-comma-omission): New option.
* c.opt.urls: Regenerate.
* c-opts.cc (c_common_post_options): Default to
-Wdeprecated-variadic-comma-omission for C++26 or -Wpedantic.
gcc/cp/
* parser.cc: Implement C++26 P3176R1 - The Oxford variadic comma.
(cp_parser_parameter_declaration_clause): Emit
-Wdeprecated-variadic-comma-omission warnings.
gcc/
* doc/invoke.texi (-Wdeprecated-variadic-comma-omission): Document.
gcc/testsuite/
* g++.dg/cpp26/variadic-comma1.C: New test.
* g++.dg/cpp26/variadic-comma2.C: New test.
* g++.dg/cpp26/variadic-comma3.C: New test.
* g++.dg/cpp26/variadic-comma4.C: New test.
* g++.dg/cpp26/variadic-comma5.C: New test.
* g++.dg/cpp1z/fold10.C: Expect a warning for C++26.
* g++.dg/ext/attrib33.C: Likewise.
* g++.dg/cpp1y/lambda-generic-variadic19.C: Likewise.
* g++.dg/cpp2a/lambda-generic10.C: Likewise.
* g++.dg/cpp0x/lambda/lambda-const3.C: Likewise.
* g++.dg/cpp0x/variadic164.C: Likewise.
* g++.dg/cpp0x/variadic17.C: Likewise.
* g++.dg/cpp0x/udlit-args-neg.C: Likewise.
* g++.dg/cpp0x/variadic28.C: Likewise.
* g++.dg/cpp0x/gen-attrs-33.C: Likewise.
* g++.dg/cpp23/explicit-obj-diagnostics3.C: Likewise.
* g++.old-deja/g++.law/operators15.C: Likewise.
* g++.old-deja/g++.mike/p811.C: Likewise.
* g++.old-deja/g++.mike/p12306.C (printf): Add , before ... .
* g++.dg/analyzer/fd-bind-pr107783.C (bind): Likewise.
* g++.dg/cpp0x/vt-65790.C (printf): Likewise.
libstdc++-v3/
* include/std/functional (_Bind_check_arity): Add , before ... .
* include/bits/refwrap.h (_Mem_fn_traits, _Weak_result_type_impl):
Likewise.
* include/tr1/type_traits (is_function): Likewise.
29 files changed:
gcc/c-family/c-opts.cc
gcc/c-family/c.opt
gcc/c-family/c.opt.urls
gcc/cp/parser.cc
gcc/doc/invoke.texi
gcc/testsuite/g++.dg/analyzer/fd-bind-pr107783.C
gcc/testsuite/g++.dg/cpp0x/gen-attrs-33.C
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const3.C
gcc/testsuite/g++.dg/cpp0x/udlit-args-neg.C
gcc/testsuite/g++.dg/cpp0x/variadic164.C
gcc/testsuite/g++.dg/cpp0x/variadic17.C
gcc/testsuite/g++.dg/cpp0x/variadic28.C
gcc/testsuite/g++.dg/cpp0x/vt-65790.C
gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic19.C
gcc/testsuite/g++.dg/cpp1z/fold10.C
gcc/testsuite/g++.dg/cpp23/explicit-obj-diagnostics3.C
gcc/testsuite/g++.dg/cpp26/variadic-comma1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp26/variadic-comma2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp26/variadic-comma3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp26/variadic-comma4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp26/variadic-comma5.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp2a/lambda-generic10.C
gcc/testsuite/g++.dg/ext/attrib33.C
gcc/testsuite/g++.old-deja/g++.law/operators15.C
gcc/testsuite/g++.old-deja/g++.mike/p12306.C
gcc/testsuite/g++.old-deja/g++.mike/p811.C
libstdc++-v3/include/bits/refwrap.h
libstdc++-v3/include/std/functional
libstdc++-v3/include/tr1/type_traits