varargs.c revision f502691c86299ed23b7e121e27610ba5bb44a1ee
1d7d5f0223bd30dfd618762349c6209dd1d5ea3e6Daniel Dunbar// RUN: clang-cc -fsyntax-only -verify %s &&
2d7d5f0223bd30dfd618762349c6209dd1d5ea3e6Daniel Dunbar// RUN: clang-cc -fsyntax-only -verify %s -triple x86_64-apple-darwin9
36eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson
46eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlssonvoid f1(int a)
56eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson{
66eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson    __builtin_va_list ap;
76eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson
86eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson    __builtin_va_start(ap, a, a); // expected-error {{too many arguments to function}}
96eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson    __builtin_va_start(ap, a); // expected-error {{'va_start' used in function with fixed args}}
106eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson}
116eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson
126eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlssonvoid f2(int a, int b, ...)
136eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson{
146eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson    __builtin_va_list ap;
156eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson
166eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson    __builtin_va_start(ap, 10); // expected-warning {{second parameter of 'va_start' not last named argument}}
176eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson    __builtin_va_start(ap, a); // expected-warning {{second parameter of 'va_start' not last named argument}}
186eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson    __builtin_va_start(ap, b);
196eda8c9cefb498ac8403bc65854e6ce411a07855Anders Carlsson}
2088cf226caee50956ef47edd4d44cf7b80703a26cAnders Carlsson
2188cf226caee50956ef47edd4d44cf7b80703a26cAnders Carlssonvoid f3(float a, ...)
2288cf226caee50956ef47edd4d44cf7b80703a26cAnders Carlsson{
2388cf226caee50956ef47edd4d44cf7b80703a26cAnders Carlsson    __builtin_va_list ap;
2488cf226caee50956ef47edd4d44cf7b80703a26cAnders Carlsson
2588cf226caee50956ef47edd4d44cf7b80703a26cAnders Carlsson    __builtin_va_start(ap, a);
2688cf226caee50956ef47edd4d44cf7b80703a26cAnders Carlsson    __builtin_va_start(ap, (a));
2788cf226caee50956ef47edd4d44cf7b80703a26cAnders Carlsson}
2858ace88985b920971b052de8a9a7b89de0654dc0Chris Lattner
2958ace88985b920971b052de8a9a7b89de0654dc0Chris Lattner
3058ace88985b920971b052de8a9a7b89de0654dc0Chris Lattner// stdarg: PR3075
3158ace88985b920971b052de8a9a7b89de0654dc0Chris Lattnervoid f4(const char *msg, ...) {
3258ace88985b920971b052de8a9a7b89de0654dc0Chris Lattner __builtin_va_list ap;
3358ace88985b920971b052de8a9a7b89de0654dc0Chris Lattner __builtin_stdarg_start((ap), (msg));
3458ace88985b920971b052de8a9a7b89de0654dc0Chris Lattner __builtin_va_end (ap);
3558ace88985b920971b052de8a9a7b89de0654dc0Chris Lattner}
3658ace88985b920971b052de8a9a7b89de0654dc0Chris Lattner
3756f20ae1010aa71defd7572f660b41288c56cdd1Eli Friedmanvoid f5() {
3856f20ae1010aa71defd7572f660b41288c56cdd1Eli Friedman  __builtin_va_list ap;
3956f20ae1010aa71defd7572f660b41288c56cdd1Eli Friedman  __builtin_va_start(ap,ap); // expected-error {{'va_start' used in function with fixed args}}
4056f20ae1010aa71defd7572f660b41288c56cdd1Eli Friedman}
4156f20ae1010aa71defd7572f660b41288c56cdd1Eli Friedman
4256f20ae1010aa71defd7572f660b41288c56cdd1Eli Friedmanvoid f6(int a, ...) {
4356f20ae1010aa71defd7572f660b41288c56cdd1Eli Friedman  __builtin_va_list ap;
4456f20ae1010aa71defd7572f660b41288c56cdd1Eli Friedman  __builtin_va_start(ap); // expected-error {{too few arguments to function}}
4556f20ae1010aa71defd7572f660b41288c56cdd1Eli Friedman}
466597f985156b3a24c0a9db1e01eeec85714c4a8dEli Friedman
476597f985156b3a24c0a9db1e01eeec85714c4a8dEli Friedman// PR3350
486597f985156b3a24c0a9db1e01eeec85714c4a8dEli Friedmanvoid
496597f985156b3a24c0a9db1e01eeec85714c4a8dEli Friedmanfoo(__builtin_va_list authors, ...) {
506597f985156b3a24c0a9db1e01eeec85714c4a8dEli Friedman  __builtin_va_start (authors, authors);
516597f985156b3a24c0a9db1e01eeec85714c4a8dEli Friedman  (void)__builtin_va_arg(authors, int);
526597f985156b3a24c0a9db1e01eeec85714c4a8dEli Friedman  __builtin_va_end (authors);
536597f985156b3a24c0a9db1e01eeec85714c4a8dEli Friedman}
546597f985156b3a24c0a9db1e01eeec85714c4a8dEli Friedman
55adadd8db2aba32f689e7057d8b7ce004be30685bDaniel Dunbarvoid f7(int a, ...) {
56adadd8db2aba32f689e7057d8b7ce004be30685bDaniel Dunbar  __builtin_va_list ap;
57adadd8db2aba32f689e7057d8b7ce004be30685bDaniel Dunbar  __builtin_va_start(ap, a);
58adadd8db2aba32f689e7057d8b7ce004be30685bDaniel Dunbar  // FIXME: This error message is sub-par.
59adadd8db2aba32f689e7057d8b7ce004be30685bDaniel Dunbar  __builtin_va_arg(ap, int) = 1; // expected-error {{non-object type 'int' is not assignable}}
60adadd8db2aba32f689e7057d8b7ce004be30685bDaniel Dunbar  int *x = &__builtin_va_arg(ap, int); // expected-error {{address expression must be an lvalue or a function designator}}
61adadd8db2aba32f689e7057d8b7ce004be30685bDaniel Dunbar  __builtin_va_end(ap);
62adadd8db2aba32f689e7057d8b7ce004be30685bDaniel Dunbar}
63f502691c86299ed23b7e121e27610ba5bb44a1eeChris Lattner
64f502691c86299ed23b7e121e27610ba5bb44a1eeChris Lattner// rdar://6726818
65f502691c86299ed23b7e121e27610ba5bb44a1eeChris Lattnervoid f8() {
66f502691c86299ed23b7e121e27610ba5bb44a1eeChris Lattner  const __builtin_va_list args2;
67f502691c86299ed23b7e121e27610ba5bb44a1eeChris Lattner  (void)__builtin_va_arg(args2, int);
68f502691c86299ed23b7e121e27610ba5bb44a1eeChris Lattner}
69f502691c86299ed23b7e121e27610ba5bb44a1eeChris Lattner
70