blob: 39cb2fa2962c102b424077787690e9c6af03069e [file] [log] [blame]
Rafael Espindola2219fc52013-05-14 12:45:47 +00001// RUN: %clang_cc1 -triple armv7 -fsyntax-only -verify %s
Logan Chien57086ce2012-10-10 06:56:20 +00002// RUN: %clang_cc1 -triple armv7 -target-abi apcs-gnu \
Rafael Espindola2219fc52013-05-14 12:45:47 +00003// RUN: -fsyntax-only -verify %s
Daniel Dunbar999daa52010-07-16 00:31:23 +00004
Rafael Espindola06338652013-05-14 18:06:10 +00005void f(void *a, void *b) {
6 __clear_cache(); // expected-error {{too few arguments to function call, expected 2, have 0}} // expected-note {{'__clear_cache' is a builtin with type 'void (void *, void *)}}
Rafael Espindola2219fc52013-05-14 12:45:47 +00007 __clear_cache(a); // expected-error {{too few arguments to function call, expected 2, have 1}}
8 __clear_cache(a, b);
9}
10
Rafael Espindola06338652013-05-14 18:06:10 +000011void __clear_cache(char*, char*); // expected-error {{conflicting types for '__clear_cache'}}
12void __clear_cache(void*, void*);
Daniel Dunbar999daa52010-07-16 00:31:23 +000013
Logan Chien57086ce2012-10-10 06:56:20 +000014#if defined(__ARM_PCS) || defined(__ARM_EABI__)
15// va_list on ARM AAPCS is struct { void* __ap }.
16void test1() {
17 __builtin_va_list ptr;
18 ptr.__ap = "x";
19 *(ptr.__ap) = '0'; // expected-error {{incomplete type 'void' is not assignable}}
20}
21#else
22// va_list on ARM apcs-gnu is void*.
23void test1() {
24 __builtin_va_list ptr;
25 ptr.__ap = "x"; // expected-error {{member reference base type '__builtin_va_list' is not a structure or union}}
26 *(ptr.__ap) = '0';// expected-error {{member reference base type '__builtin_va_list' is not a structure or union}}
27}
28
John McCalle155a3d2011-05-09 02:19:37 +000029void test2() {
30 __builtin_va_list ptr = "x";
31 *ptr = '0'; // expected-error {{incomplete type 'void' is not assignable}}
32}
Yi Kong1d268af2014-08-26 12:48:06 +000033#endif
Logan Chien57086ce2012-10-10 06:56:20 +000034
Yi Kong4efadfb2014-07-03 16:01:25 +000035void test3() {
36 __builtin_arm_dsb(16); // expected-error {{argument should be a value from 0 to 15}}
37 __builtin_arm_dmb(17); // expected-error {{argument should be a value from 0 to 15}}
38 __builtin_arm_isb(18); // expected-error {{argument should be a value from 0 to 15}}
39}
40
Yi Kong26d104a2014-08-13 19:18:14 +000041void test4() {
42 __builtin_arm_prefetch(0, 2, 0); // expected-error {{argument should be a value from 0 to 1}}
43 __builtin_arm_prefetch(0, 0, 2); // expected-error {{argument should be a value from 0 to 1}}
44}
45
Yi Kong1d268af2014-08-26 12:48:06 +000046void test5() {
47 __builtin_arm_dbg(16); // expected-error {{argument should be a value from 0 to 15}}
48}
Ahmed Bougacha5946ca42015-08-26 22:21:07 +000049
50void test6(int a, int b, int c) {
51 __builtin_arm_mrc( a, 0, 13, 0, 3); // expected-error {{argument to '__builtin_arm_mrc' must be a constant integer}}
52 __builtin_arm_mrc(15, a, 13, 0, 3); // expected-error {{argument to '__builtin_arm_mrc' must be a constant integer}}
53 __builtin_arm_mrc(15, 0, a, 0, 3); // expected-error {{argument to '__builtin_arm_mrc' must be a constant integer}}
54 __builtin_arm_mrc(15, 0, 13, a, 3); // expected-error {{argument to '__builtin_arm_mrc' must be a constant integer}}
55 __builtin_arm_mrc(15, 0, 13, 0, a); // expected-error {{argument to '__builtin_arm_mrc' must be a constant integer}}
56
57 __builtin_arm_mrc2( a, 0, 13, 0, 3); // expected-error {{argument to '__builtin_arm_mrc2' must be a constant integer}}
58 __builtin_arm_mrc2(15, a, 13, 0, 3); // expected-error {{argument to '__builtin_arm_mrc2' must be a constant integer}}
59 __builtin_arm_mrc2(15, 0, a, 0, 3); // expected-error {{argument to '__builtin_arm_mrc2' must be a constant integer}}
60 __builtin_arm_mrc2(15, 0, 13, a, 3); // expected-error {{argument to '__builtin_arm_mrc2' must be a constant integer}}
61 __builtin_arm_mrc2(15, 0, 13, 0, a); // expected-error {{argument to '__builtin_arm_mrc2' must be a constant integer}}
62
63 __builtin_arm_mcr( a, 0, b, 13, 0, 3); // expected-error {{argument to '__builtin_arm_mcr' must be a constant integer}}
64 __builtin_arm_mcr(15, a, b, 13, 0, 3); // expected-error {{argument to '__builtin_arm_mcr' must be a constant integer}}
65 __builtin_arm_mcr(15, 0, b, a, 0, 3); // expected-error {{argument to '__builtin_arm_mcr' must be a constant integer}}
66 __builtin_arm_mcr(15, 0, b, 13, a, 3); // expected-error {{argument to '__builtin_arm_mcr' must be a constant integer}}
67 __builtin_arm_mcr(15, 0, b, 13, 0, a); // expected-error {{argument to '__builtin_arm_mcr' must be a constant integer}}
68
69 __builtin_arm_mcr2( a, 0, b, 13, 0, 3); // expected-error {{argument to '__builtin_arm_mcr2' must be a constant integer}}
70 __builtin_arm_mcr2(15, a, b, 13, 0, 3); // expected-error {{argument to '__builtin_arm_mcr2' must be a constant integer}}
71 __builtin_arm_mcr2(15, 0, b, a, 0, 3); // expected-error {{argument to '__builtin_arm_mcr2' must be a constant integer}}
72 __builtin_arm_mcr2(15, 0, b, 13, a, 3); // expected-error {{argument to '__builtin_arm_mcr2' must be a constant integer}}
73 __builtin_arm_mcr2(15, 0, b, 13, 0, a); // expected-error {{argument to '__builtin_arm_mcr2' must be a constant integer}}
74
75 __builtin_arm_mcrr( a, 0, b, c, 0); // expected-error {{argument to '__builtin_arm_mcrr' must be a constant integer}}
76 __builtin_arm_mcrr(15, a, b, c, 0); // expected-error {{argument to '__builtin_arm_mcrr' must be a constant integer}}
77 __builtin_arm_mcrr(15, 0, b, c, a); // expected-error {{argument to '__builtin_arm_mcrr' must be a constant integer}}
78
79 __builtin_arm_mcrr2( a, 0, b, c, 0); // expected-error {{argument to '__builtin_arm_mcrr2' must be a constant integer}}
80 __builtin_arm_mcrr2(15, a, b, c, 0); // expected-error {{argument to '__builtin_arm_mcrr2' must be a constant integer}}
81 __builtin_arm_mcrr2(15, 0, b, c, a); // expected-error {{argument to '__builtin_arm_mcrr2' must be a constant integer}}
82}