On 11/26/24 5:27 AM, Jonathan Wakely wrote:
On Tue, 26 Nov 2024 at 08:34, Jakub Jelinek <ja...@redhat.com> wrote:

On Mon, Nov 25, 2024 at 03:40:18PM -0500, Marek Polacek wrote:
Just "omitting a comma", I think.

"of a function parameter list"

I suppose we should also test -Wno-deprecated and/or
-Wno-deprecated-variadic-comma-omission in C++26.

Thanks, I've made those changes including adding more copies
of variadic-comma*.C with different options and diagnostics
expectations.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2024-11-26  Jakub Jelinek  <ja...@redhat.com>

gcc/c-family/
         * c.opt: Implement C++26 P3176R1 - The Oxford variadic comma.
         (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 (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.

--- gcc/c-family/c.opt.jj       2024-11-22 19:52:19.477579338 +0100
+++ gcc/c-family/c.opt  2024-11-25 16:22:11.325028058 +0100
@@ -672,6 +672,10 @@ Wdeprecated-non-prototype
  C ObjC Var(warn_deprecated_non_prototype) Init(-1) Warning
  Warn about calls with arguments to functions declared without parameters.

+Wdeprecated-variadic-comma-omission
+C++ ObjC++ Var(warn_deprecated_variadic_comma_omission) Warning
+Warn about deprecated omission of comma before ... in variadic function 
declaration.
+
  Wdesignated-init
  C ObjC Var(warn_designated_init) Init(1) Warning
  Warn about positional initialization of structs requiring designated 
initializers.
--- gcc/c-family/c.opt.urls.jj  2024-11-18 21:59:35.872150269 +0100
+++ gcc/c-family/c.opt.urls     2024-11-25 17:38:25.396693802 +0100
@@ -310,6 +310,9 @@ UrlSuffix(gcc/C_002b_002b-Dialect-Option
  Wdeprecated-non-prototype
  UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated-non-prototype)

+Wdeprecated-variadic-comma-omission
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-variadic-comma-omission)
+
  Wdesignated-init
  UrlSuffix(gcc/Warning-Options.html#index-Wdesignated-init)

--- gcc/c-family/c-opts.cc.jj   2024-11-23 13:00:28.188030262 +0100
+++ gcc/c-family/c-opts.cc      2024-11-25 16:23:36.569829016 +0100
@@ -1051,6 +1051,11 @@ c_common_post_options (const char **pfil
                        warn_deprecated_literal_operator,
                        deprecated_in (cxx23));

+  /* -Wdeprecated-variadic-comma-omission is enabled by default in C++26.  */
+  SET_OPTION_IF_UNSET (&global_options, &global_options_set,
+                      warn_deprecated_variadic_comma_omission,
+                      deprecated_in (cxx26));
+
    /* -Wtemplate-id-cdtor is enabled by default in C++20.  */
    SET_OPTION_IF_UNSET (&global_options, &global_options_set,
                        warn_template_id_cdtor,
--- gcc/cp/parser.cc.jj 2024-11-23 13:00:29.060017680 +0100
+++ gcc/cp/parser.cc    2024-11-25 17:02:24.551059305 +0100
@@ -25667,6 +25667,16 @@ cp_parser_parameter_declaration_clause (
       omitted.  */
    else if (token->type == CPP_ELLIPSIS)
      {
+      /* Deprecated by P3176R1 in C++26.  */
+      if (warn_deprecated_variadic_comma_omission)
+       {
+         gcc_rich_location richloc (token->location);
+         richloc.add_fixit_insert_before (", ");
+         warning_at (&richloc, OPT_Wdeprecated_variadic_comma_omission,
+                     "omitting of %<,%> before variadic %<...%> is "
+                     "deprecated in C++26");

This should be either "omission of ',' before" or "omitting ',' before"

But not "omitting of" :-)

Agreed.

I also might say "varargs" instead of "variadic", since the latter could also refer to variadic templates?

Jason

Reply via email to