aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/c-c++-common/Wvarargs.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/c-c++-common/Wvarargs.c')
-rw-r--r--gcc-4.9/gcc/testsuite/c-c++-common/Wvarargs.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/c-c++-common/Wvarargs.c b/gcc-4.9/gcc/testsuite/c-c++-common/Wvarargs.c
new file mode 100644
index 000000000..408f427b5
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/c-c++-common/Wvarargs.c
@@ -0,0 +1,54 @@
+/* { dg-do compile } */
+
+#include <stdarg.h>
+
+void
+err (int a)
+{
+ va_list vp;
+ va_start (vp, a); // { dg-error "used in function with fixed args" }
+}
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvarargs"
+
+void
+foo0 (int a, int b, ...)
+{
+ va_list vp;
+ /* 'a' is not the last argument of the enclosing function, but
+ don't warn because we are ignoring -Wvarargs. */
+ va_start (vp, a);
+ va_end (vp);
+}
+
+void
+foo1 (int a, register int b, ...)
+{
+ va_list vp;
+ /* 'b' is declared with register storage, but don't warn
+ because we are ignoring -Wvarargs. */
+ va_start (vp, b);
+ va_end (vp);
+}
+
+#pragma GCC diagnostic pop
+
+void
+foo2 (int a, int b, ...)
+{
+ va_list vp;
+ /* 'a' is not the last argument of the enclosing function, so
+ warn. */
+ va_start (vp, a); /* { dg-warning "second parameter" } */
+ va_end (vp);
+}
+
+void
+foo3 (int a, register int b, ...)
+{
+ va_list vp;
+ /* 'b' is declared with register storage, so warn. */
+ va_start (vp, b); /* { dg-warning "undefined behaviour" } */
+ va_end (vp);
+}