1 /* Test generic __atomic routines for various errors. */
2 /* { dg-do compile } */
3 /* { dg-require-effective-target sync_int_long } */
4 /* { dg-options "-ansi" } */
5
f1(void * p)6 void f1 (void* p)
7 {
8 __atomic_compare_exchange(p, p, p, 0, 0, 0); /* { dg-error "must be a non-void pointer type" } */
9 }
10
f2(int n)11 void f2 (int n)
12 {
13 int a[n], b[n];
14 __atomic_load (&a, &b, __ATOMIC_SEQ_CST); /* { dg-error "must be a pointer to a constant size" } */
15 }
16
17 struct s { };
f3(void)18 void f3 (void)
19 {
20 struct s a,b;
21 __atomic_load (&a, &b, __ATOMIC_SEQ_CST); /* { dg-error "must be a pointer to a nonzero size" } */
22 }
23
f4(int a,int b,int c)24 void f4 (int a, int b, int c)
25 {
26 __atomic_load (&a, &b, &c, __ATOMIC_SEQ_CST); /* { dg-error "incorrect number of arguments" } */
27 }
28
f5(int a,int b)29 void f5 (int a, int b)
30 {
31 __atomic_load (&a, b, __ATOMIC_SEQ_CST); /* { dg-error "must be a pointer type" } */
32 }
33
f6(int a,char b)34 void f6 (int a, char b)
35 {
36 __atomic_load (&a, &b, __ATOMIC_SEQ_CST); /* { dg-error "size mismatch in argument" } */
37 }
38
f7(int a,int b)39 void f7 (int a, int b)
40 {
41 __atomic_load (&a, &b, 45); /* { dg-warning "invalid memory model argument" } */
42 }
43
f8(int a,int b,float c)44 void f8 (int a, int b, float c)
45 {
46 __atomic_load (&a, &b, c); /* { dg-error "non-integer memory model argument" } */
47 }
48