1 void f00(int _Atomic dst); 2 void f01(int _Atomic *dst); 3 void f02(int _Atomic *dst); 4 void f03(int _Atomic *dst); 5 6 int _Atomic qo; 7 int uo; 8 f00(int dst)9void f00(int dst) { } /* check-should-pass */ f01(typeof (& qo)dst)10void f01(typeof(&qo) dst) { } /* check-should-pass */ f02(int * dst)11void f02(int *dst) { } /* check-should-fail */ f03(typeof (& uo)dst)12void f03(typeof(&uo) dst) { } /* check-should-fail */ 13 foo(void)14void foo(void) 15 { 16 qo = uo; /* check-should-pass */ 17 uo = qo; /* check-should-pass */ 18 } 19 ref(void)20void ref(void) 21 { 22 const int qo; 23 int uo; 24 extern const int *pqo; 25 extern int *puo; 26 27 pqo = &qo; /* check-should-pass */ 28 pqo = &uo; /* check-should-pass */ 29 pqo = puo; 30 31 puo = &uo; /* check-should-pass */ 32 33 puo = &qo; /* check-should-fail */ 34 puo = pqo; /* check-should-fail */ 35 } 36 bar(void)37void bar(void) 38 { 39 extern int _Atomic *pqo; 40 extern int *puo; 41 42 pqo = &qo; /* check-should-pass */ 43 pqo = &uo; /* check-should-pass */ 44 pqo = puo; 45 46 puo = &uo; /* check-should-pass */ 47 48 puo = &qo; /* check-should-fail */ 49 puo = pqo; /* check-should-fail */ 50 } 51 baz(void)52void baz(void) 53 { 54 extern typeof(&qo) pqo; 55 extern typeof(&uo) puo; 56 57 pqo = &qo; /* check-should-pass */ 58 pqo = &uo; /* check-should-pass */ 59 pqo = puo; 60 61 puo = &uo; /* check-should-pass */ 62 63 puo = &qo; /* check-should-fail */ 64 puo = pqo; /* check-should-fail */ 65 } 66 67 /* 68 * check-name: C11 _Atomic type qualifier 69 * check-command: sparse -Wno-decl $file; 70 * 71 * check-error-start 72 c11-atomic.c:11:6: error: symbol 'f02' redeclared with different type (originally declared at c11-atomic.c:3) - incompatible argument 1 (different modifiers) 73 c11-atomic.c:12:6: error: symbol 'f03' redeclared with different type (originally declared at c11-atomic.c:4) - incompatible argument 1 (different modifiers) 74 c11-atomic.c:33:13: warning: incorrect type in assignment (different modifiers) 75 c11-atomic.c:33:13: expected int *extern [assigned] puo 76 c11-atomic.c:33:13: got int const * 77 c11-atomic.c:34:13: warning: incorrect type in assignment (different modifiers) 78 c11-atomic.c:34:13: expected int *extern [assigned] puo 79 c11-atomic.c:34:13: got int const *extern [assigned] pqo 80 c11-atomic.c:48:13: warning: incorrect type in assignment (different modifiers) 81 c11-atomic.c:48:13: expected int *extern [assigned] puo 82 c11-atomic.c:48:13: got int [atomic] * 83 c11-atomic.c:49:13: warning: incorrect type in assignment (different modifiers) 84 c11-atomic.c:49:13: expected int *extern [assigned] puo 85 c11-atomic.c:49:13: got int [atomic] *extern [assigned] pqo 86 c11-atomic.c:63:13: warning: incorrect type in assignment (different modifiers) 87 c11-atomic.c:63:13: expected int *extern [assigned] puo 88 c11-atomic.c:63:13: got int [atomic] * 89 c11-atomic.c:64:13: warning: incorrect type in assignment (different modifiers) 90 c11-atomic.c:64:13: expected int *extern [assigned] puo 91 c11-atomic.c:64:13: got int [atomic] *extern [assigned] pqo 92 * check-error-end 93 */ 94