1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 2a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -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. 5953202857c60214d80950a975e6e52aebf30bd16aEli Friedman __builtin_va_arg(ap, int) = 1; // expected-error {{expression 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 640adde128d96a73864569516e684faa570e3c0333David Majnemervoid f8(int a, ...) { 650adde128d96a73864569516e684faa570e3c0333David Majnemer __builtin_va_list ap; 660adde128d96a73864569516e684faa570e3c0333David Majnemer __builtin_va_start(ap, a); 670adde128d96a73864569516e684faa570e3c0333David Majnemer (void)__builtin_va_arg(ap, void); // expected-error {{second argument to 'va_arg' is of incomplete type 'void'}} 680adde128d96a73864569516e684faa570e3c0333David Majnemer __builtin_va_end(ap); 690adde128d96a73864569516e684faa570e3c0333David Majnemer} 7046d37c10404097eed7c173b17e52693edcb66486Eli Friedman 7146d37c10404097eed7c173b17e52693edcb66486Eli Friedmanenum E { x = -1, y = 2, z = 10000 }; 7246d37c10404097eed7c173b17e52693edcb66486Eli Friedmanvoid f9(__builtin_va_list args) 7346d37c10404097eed7c173b17e52693edcb66486Eli Friedman{ 7446d37c10404097eed7c173b17e52693edcb66486Eli Friedman (void)__builtin_va_arg(args, float); // expected-warning {{second argument to 'va_arg' is of promotable type 'float'}} 7546d37c10404097eed7c173b17e52693edcb66486Eli Friedman (void)__builtin_va_arg(args, enum E); // Don't warn here in C 7646d37c10404097eed7c173b17e52693edcb66486Eli Friedman (void)__builtin_va_arg(args, short); // expected-warning {{second argument to 'va_arg' is of promotable type 'short'}} 7746d37c10404097eed7c173b17e52693edcb66486Eli Friedman (void)__builtin_va_arg(args, char); // expected-warning {{second argument to 'va_arg' is of promotable type 'char'}} 7846d37c10404097eed7c173b17e52693edcb66486Eli Friedman} 79