OSDN Git Service

Add testcases for PR43464.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / pr30457.c
1 /* PR 30457 warn about va_start(ap, invalid) */
2 /* { dg-do compile } */
3 /* { dg-options "-std=c99" } */
4
5 /* Undefined by C99 7.15.1.4p4 (va_start):
6    "If the parameter parmN is declared with the register storage
7     class, with a function or array type, or with a type that is
8     not compatible with the type that results after application of
9     the default argument promotions, the behavior is undefined."  */
10
11 #include <stdarg.h>
12
13 void foo(register short paramN, ...)
14 {
15   va_list ap;
16
17   va_start(ap, paramN); /* { dg-warning "undefined behaviour when second parameter of 'va_start' is declared with 'register' storage" } */
18   
19   /* Undefined by C99 7.15.1.1p2:  */
20   (void) va_arg(ap, char); /* { dg-warning "'char' is promoted to 'int' when passed through '...'" } */
21   /* { dg-message "note: .so you should pass .int. not .char. to .va_arg.." "" { target *-*-* } 20 } */
22   /* { dg-message "note: if this code is reached, the program will abort"  "" { target *-*-* } 20 } */
23
24   va_end(ap);
25 }
26