summaryrefslogtreecommitdiffstats
path: root/clang/test/Sema/builtins-arm.c
diff options
context:
space:
mode:
authorLogan Chien <tzuhsiang.chien@gmail.com>2012-10-10 06:56:20 +0000
committerLogan Chien <tzuhsiang.chien@gmail.com>2012-10-10 06:56:20 +0000
commit57086ce24895f9a53a3d0eafa32117a6edc4194e (patch)
treef89375526e6f599152b608120c60e9b93789337d /clang/test/Sema/builtins-arm.c
parent05fee08dfa9821279b2d3f805a6303dcb8d86c03 (diff)
downloadbcm5719-llvm-57086ce24895f9a53a3d0eafa32117a6edc4194e.tar.gz
bcm5719-llvm-57086ce24895f9a53a3d0eafa32117a6edc4194e.zip
Fix PR 11709: Change the definition of va_list to meet AAPCS requirement
AAPCS ABI Section 7.1.4 [1] specifies that va_list should be defined as struct __va_list { void *__ap;}; And in C++, it is defined in namespace std. [1] http://infocenter.arm.com/help/topic /com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf Patch by Weiming Zhao. llvm-svn: 165609
Diffstat (limited to 'clang/test/Sema/builtins-arm.c')
-rw-r--r--clang/test/Sema/builtins-arm.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/clang/test/Sema/builtins-arm.c b/clang/test/Sema/builtins-arm.c
index 4077240ce49..7b48af155ee 100644
--- a/clang/test/Sema/builtins-arm.c
+++ b/clang/test/Sema/builtins-arm.c
@@ -1,5 +1,7 @@
// RUN: %clang_cc1 -triple armv7 -fsyntax-only -verify -DTEST0 %s
// RUN: %clang_cc1 -triple armv7 -fsyntax-only -verify -DTEST1 %s
+// RUN: %clang_cc1 -triple armv7 -target-abi apcs-gnu \
+// RUN: -fsyntax-only -verify -DTEST1 %s
#ifdef TEST0
void __clear_cache(char*, char*);
@@ -9,8 +11,24 @@ void __clear_cache(char*, char*);
void __clear_cache(void*, void*);
#endif
-// va_list on ARM is void*.
+#if defined(__ARM_PCS) || defined(__ARM_EABI__)
+// va_list on ARM AAPCS is struct { void* __ap }.
+void test1() {
+ __builtin_va_list ptr;
+ ptr.__ap = "x";
+ *(ptr.__ap) = '0'; // expected-error {{incomplete type 'void' is not assignable}}
+}
+#else
+// va_list on ARM apcs-gnu is void*.
+void test1() {
+ __builtin_va_list ptr;
+ ptr.__ap = "x"; // expected-error {{member reference base type '__builtin_va_list' is not a structure or union}}
+ *(ptr.__ap) = '0';// expected-error {{member reference base type '__builtin_va_list' is not a structure or union}}
+}
+
void test2() {
__builtin_va_list ptr = "x";
*ptr = '0'; // expected-error {{incomplete type 'void' is not assignable}}
}
+
+#endif
OpenPOWER on IntegriCloud