blob: bfd8276a2920e91095ebb7674017f1279cd1f380 [file] [log] [blame]
/* { dg-do compile } */
#include <stdarg.h>
void
err (int a)
{
va_list vp;
va_start (vp, a); // { dg-error "used in function with fixed arguments" }
}
#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, ...) // { dg-warning "ISO C\\+\\+17 does not allow 'register' storage class specifier" "" { target c++17 } }
{
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, ...) // { dg-warning "ISO C\\+\\+17 does not allow 'register' storage class specifier" "" { target c++17 } }
{
va_list vp;
/* 'b' is declared with register storage, so warn. */
va_start (vp, b); /* { dg-warning "undefined behavior" } */
va_end (vp);
}