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