PR tree-optimization/86401
[official-gcc.git] / gcc / testsuite / c-c++-common / Wvarargs.c
blob71d8c5dff93894f9ebfcf062b67e263c90a3dc12
1 /* { dg-do compile } */
3 #include <stdarg.h>
5 void
6 err (int a)
8 va_list vp;
9 va_start (vp, a); // { dg-error "used in function with fixed args" }
12 #pragma GCC diagnostic push
13 #pragma GCC diagnostic ignored "-Wvarargs"
15 void
16 foo0 (int a, int b, ...)
18 va_list vp;
19 /* 'a' is not the last argument of the enclosing function, but
20 don't warn because we are ignoring -Wvarargs. */
21 va_start (vp, a);
22 va_end (vp);
25 void
26 foo1 (int a, register int b, ...) // { dg-warning "ISO C\\+\\+17 does not allow 'register' storage class specifier" "" { target c++17 } }
28 va_list vp;
29 /* 'b' is declared with register storage, but don't warn
30 because we are ignoring -Wvarargs. */
31 va_start (vp, b);
32 va_end (vp);
35 #pragma GCC diagnostic pop
37 void
38 foo2 (int a, int b, ...)
40 va_list vp;
41 /* 'a' is not the last argument of the enclosing function, so
42 warn. */
43 va_start (vp, a); /* { dg-warning "second parameter" } */
44 va_end (vp);
47 void
48 foo3 (int a, register int b, ...) // { dg-warning "ISO C\\+\\+17 does not allow 'register' storage class specifier" "" { target c++17 } }
50 va_list vp;
51 /* 'b' is declared with register storage, so warn. */
52 va_start (vp, b); /* { dg-warning "undefined behavior" } */
53 va_end (vp);