The D front-end has C-style variadic functions and va_start/va_arg, so
it is right to also have warnings for inproper use.
gcc/d/ChangeLog:
PR d/96154
* gdc.texi (Warnings): Document -Wvarargs.
* lang.opt: Add -Wvarargs
gcc/testsuite/ChangeLog:
PR d/96154
* gdc.dg/pr96154a.d: New test.
* gdc.dg/pr96154b.d: New test.
where a pragma that is part of the D language, but not implemented by
the compiler, won't get reported.
+@item -Wno-varargs
+@cindex Wvarargs
+@cindex Wno-varargs
+Do not warn upon questionable usage of the macros used to handle variable
+arguments like @code{va_start}.
+
@item -fignore-unknown-pragmas
@cindex @option{-fignore-unknown-pragmas}
@cindex @option{-fno-ignore-unknown-pragmas}
D LangEnabledBy(D, Wall)
; Documented in C
+Wvarargs
+D
+; Documented in C
+
X
D
Generate JSON file.
--- /dev/null
+// { dg-do compile }
+
+import core.stdc.stdarg;
+
+void
+error (int a)
+{
+ va_list vp;
+ va_start (vp, a); // { dg-error "used in function with fixed arguments" }
+}
+
+void
+warn (int a, int b, ...)
+{
+ va_list vp;
+ va_start (vp, a); // { dg-warning "second parameter" }
+ va_end (vp);
+}
--- /dev/null
+// { dg-options "-Wno-varargs" }
+// { dg-do compile }
+
+import core.stdc.stdarg;
+
+void
+error (int a)
+{
+ va_list vp;
+ va_start (vp, a); // { dg-error "used in function with fixed arguments" }
+}
+
+void
+warn (int a, int b, ...)
+{
+ va_list vp;
+ va_start (vp, a); // No warning because of -Wno-varargs in effect.
+ va_end (vp);
+}