diff options
Diffstat (limited to 'test/Sema/varargs.c')
| -rw-r--r-- | test/Sema/varargs.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/test/Sema/varargs.c b/test/Sema/varargs.c index 5329c2e61c98..457d84c212f7 100644 --- a/test/Sema/varargs.c +++ b/test/Sema/varargs.c @@ -4,7 +4,7 @@ void f1(int a) { __builtin_va_list ap; - + __builtin_va_start(ap, a, a); // expected-error {{too many arguments to function}} __builtin_va_start(ap, a); // expected-error {{'va_start' used in function with fixed args}} } @@ -12,18 +12,17 @@ void f1(int a) void f2(int a, int b, ...) { __builtin_va_list ap; - - __builtin_va_start(ap, 10); // expected-warning {{second parameter of 'va_start' not last named argument}} - __builtin_va_start(ap, a); // expected-warning {{second parameter of 'va_start' not last named argument}} + + __builtin_va_start(ap, 10); // expected-warning {{second argument to 'va_start' is not the last named parameter}} + __builtin_va_start(ap, a); // expected-warning {{second argument to 'va_start' is not the last named parameter}} __builtin_va_start(ap, b); } -void f3(float a, ...) -{ +void f3(float a, ...) { // expected-note 2{{parameter of type 'float' is declared here}} __builtin_va_list ap; - - __builtin_va_start(ap, a); - __builtin_va_start(ap, (a)); + + __builtin_va_start(ap, a); // expected-warning {{passing an object that undergoes default argument promotion to 'va_start' has undefined behavior}} + __builtin_va_start(ap, (a)); // expected-warning {{passing an object that undergoes default argument promotion to 'va_start' has undefined behavior}} } @@ -83,3 +82,15 @@ void f10(int a, ...) { i = __builtin_va_start(ap, a); // expected-error {{assigning to 'int' from incompatible type 'void'}} __builtin_va_end(ap); } + +void f11(short s, ...) { // expected-note {{parameter of type 'short' is declared here}} + __builtin_va_list ap; + __builtin_va_start(ap, s); // expected-warning {{passing an object that undergoes default argument promotion to 'va_start' has undefined behavior}} + __builtin_va_end(ap); +} + +void f12(register int i, ...) { // expected-note {{parameter of type 'int' is declared here}} + __builtin_va_list ap; + __builtin_va_start(ap, i); // expected-warning {{passing a parameter declared with the 'register' keyword to 'va_start' has undefined behavior}} + __builtin_va_end(ap); +} |
