summaryrefslogtreecommitdiffstats
path: root/clang/test/Sema/MicrosoftExtensions.c
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2014-03-26 15:38:33 +0000
committerReid Kleckner <reid@kleckner.net>2014-03-26 15:38:33 +0000
commit597e81dea1059c8a075f29f5fcadcb1ae58e42e3 (patch)
tree8f062e22ab2752e2074986c5e059dc808c26763d /clang/test/Sema/MicrosoftExtensions.c
parentc491a8d4577052bc6b3b4c72a7db6a7cfcbc2ed0 (diff)
downloadbcm5719-llvm-597e81dea1059c8a075f29f5fcadcb1ae58e42e3.tar.gz
bcm5719-llvm-597e81dea1059c8a075f29f5fcadcb1ae58e42e3.zip
-fms-extensions: Add __va_start builtin, which is used for x64
The main difference between __va_start and __builtin_va_start is that the address of the va_list has already been taken, and the va_list is always a char*. __va_end and __va_arg are not needed. llvm-svn: 204821
Diffstat (limited to 'clang/test/Sema/MicrosoftExtensions.c')
-rw-r--r--clang/test/Sema/MicrosoftExtensions.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/clang/test/Sema/MicrosoftExtensions.c b/clang/test/Sema/MicrosoftExtensions.c
index 4441f179736..a4afcb1e640 100644
--- a/clang/test/Sema/MicrosoftExtensions.c
+++ b/clang/test/Sema/MicrosoftExtensions.c
@@ -131,3 +131,17 @@ int *(__ptr32 __sptr wrong9); // expected-error {{'__sptr' attribute only applie
typedef int *T;
T __ptr32 wrong10; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
+
+typedef char *my_va_list;
+void __cdecl __va_start(my_va_list *ap, ...); // expected-note {{passing argument to parameter 'ap' here}}
+void vmyprintf(const char *f, my_va_list ap);
+void myprintf(const char *f, ...) {
+ my_va_list ap;
+ if (1) {
+ __va_start(&ap, f);
+ vmyprintf(f, ap);
+ ap = 0;
+ } else {
+ __va_start(ap, f); // expected-warning {{incompatible pointer types passing 'my_va_list'}}
+ }
+}
OpenPOWER on IntegriCloud