Viewing file: Wvarargs.c (1.27 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { 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); }
|